diff --git a/Cambios.txt b/Cambios.txt index 935e6b88..45824166 100644 --- a/Cambios.txt +++ b/Cambios.txt @@ -1,34 +1,61 @@ -PicPas 0.8.4 +PicPas 0.9.0 ============ -* Se crea el campo TgenCodPic.lastOpCode, para almacenar la �ltima instrucci�n compilada, y se -modifican las instrucciones "k" para que usen este campo. -* Se Modifican las clases TPicRegister y TPicRegisterBit, en XpresTypesPIC, para agregar el campo -"addr" y convertir los campos "offs" y "bank" en propiedades de solo lectura. -* Se modifican diversas rutinas afectadas, especialmente de la unidad "GenCodPic", para adaptarse -a la nueva definici�n de TPicRegister y TPicRegisterBit. -* Se pasa a usar la versi�n 1.3 de PicUtils. -* Se simplifica la definici�n del almacenamiento: stVarRefVar y se actualizan las rutinas -aefctadas. -* Se reemplazan diversas rutinas del generador de c�digo, con instrucciones "k". -* Se cambia por completo los contenedores de las direcciones de memoria de la clase TxpEleVar, -y se adaptan diversas rutinas para trabajar con este nuevo tipo de almacenamiento. -* Se implementa la operaci�n MOD para bytes. -* Se crea �n nuevo patr�n de pruebas para los tipos Byte, incluyendo la operaci�n MOD. -* Se modifica la ventana de depuraci�n para que muestre el desensambaldo de forma similar a como -se muestra en la ventana principal. -* Se mueve AddCaller() de TGenCodPic a TCompilerBase, y usa en lugar del evento -TxpElement.AddCaller() que es eliminado. -* Se pasa a usar la versi�n 1.7 de la librer�a ogMotEdicion. -* Se activa un men� contextual en el editor gr�fico de la ventana de depuraci�n. -* Se crea el objeto gr�fico TOgLogicState, en la ventana de depuraci�n. Pero no es a�n funcional. -* Se compila una versi�n del binario para Mac (Colaboraci�n de https://github.com/cuistax). +Se actualizan rutas/versiones de las librer�as. +Se modifica la unidad XpresTypesPIC en la forma en que se define P65Pas, para facilitar la +adquisici�n de las mejoras realizadas en este compilador. +Se modifica la unidad XpresElementsPIC para que adquiera algunas mejoras de P65Pas. +Se adaptan algunas rutinas de las unidades COmpiler_PICXX para que sean compatibles con las +mejoras de P65Pas. +Se mejora la interfaz, cambiando el ToolBar por un CoolBar y se mejora el bot�n de selecci�n +del compilador. +Se corrige la rutina TGenCodBas.GenCodBank() de la unidad GenCodBas_PIC17, para detectar mejor +a las direcciones que est�n mapeadas en todos los bancos. +Se mejora el desensamblado para la serie 16F mejorada. +Se corrige la rutina TGenCodBas.PICCurBank() en la unidad GenCodBas_PIC17. +Se corrige un error en la rutina TCompOperands.byte2() de la unidad CompOperands. +Se agrega la instrucci�n MOVLB en el archivo de sintaxis de ensamblador. +Se usa una versi�n corregida de PicUtils. La correcci�n tiene que ver con el m�todo +TPIC16.Disassembler(), en el desensamblado de la instrucci�n i_MOVWF. + +PicPas 0.8.8 +============ +## Cambios +Se corrige la reconstrucci�n del diagrama en la ventana de simulaci�n. +Se quita la opci�n de compilaci�n por l�nea de par�metros, ya que ahora se tiene m�s +compiladores y hay problemas en mostrar mensajes de error. +Se incluyen men�s para seleccionar el compilador por defecto. +Se incluye traducciones para nuevos cadenas de la unidad FormPrincipal. +Se incluye rutina para prueba de compilaci�n de las unidades, y se pone acceso desde +el men� principal (Herramientas>). +Se agrega rutina de verificaci�n de error en los m�todos TGenCodBas.AssignRAMinByte(). +Se agrega leyenda en la ventana Explorador de RAM. +Se pasa a trabajar con la versi�n 1.6 de PicUtils. +Se incrementa par�metros a los comandos de la directiva: $SET_STATE_RAM, para poder definir el estado y zonas mapeadas en todos los bancos, con una sola directiva. +Se actualizan las unidades de dispositivos, para que usen la nueva sintaxis de $SET_STATE_RAM. +Se cambia el nombre de la carpeta /TestCode a /testcode16 +Se cambia el nombre de los men�s de la unidad FrameArcExplor para hacerlos m�s consistentes con la terminolog�a inglesa. +Se agrega el men� "Crear copia" en la unidad FrameArcExplor. +Se activa el atajo al men� contextual al men� de la unidad FrameArcExplor. +Se cambia al atajo, desde la ventana principal, para mostrar el arbol de sintaxis. Ahora es ALt+F2. +Se inhabilita la ejecuci�n (simulaci�n) cuando se compila una unidad. +Se mejora el autocompletado, actualizando la librer�a SynFacilCompletion y corrigiendo FraEditView y CodeTools. +Se crean las listas TXpTreeElements.AllCOnst, TXpTreeElements.AllUnits, TXpTreeElements.AllTypes y los m�todos de llenado respectivo. +Se crean los m�todos: + TCompilerBase.RemoveUnusedFunc + TCompilerBase.RemoveUnusedVars + TCompilerBase.RemoveUnusedCons + TCompilerBase.RemoveUnusedTypes + TCompilerBase.UpdateUsedUnits +Y se crea documentaci�n sobre estos nuevos m�todos. +Se modifica TXpTreeElements.FindNext() y para corregir el acceso a campos de la secci�n IMPLEMENTATION de una unidad. +Se corrige la asignaci�n del nombre del nodo principal en el m�todo TCompiler_PIC16.Compile(). +Se agregan rutinas para detectar a las unidades usadas. +Se crea el nuevo elemento TxpEleFinal en la unidad XpresElementsPIC. PENDIENTES +-Revisar los errores en el posicionamiento de los puntos de conexi�n resaltados, cuando se cambia el zoom y se hace desplazamiento. -Revisar el uso de bancos, para funciones del sistema, como delay_ms() y las llamadas que se -hacen para algunas operacionas como DIV. Se sugiere primero eliminar TxpElement.AddCaller() -y definir un m�todo como TCOmpilerBase.AddCallerTo() para realizar el mismo trabajo, de modo -que se pueda tener acceso a las variables de entorno del compilador como FirstPass y se evita el -uso confuso de eventos, y se simplifica el c�digo. +hacen para algunas operacionas como DIV. -Revisar si conviene crear el almacenamiento VarRefVarOff, para expresiones de tipo: (p+5)^ @@ -37,8 +64,7 @@ uso confuso de eventos, y se simplifica el c -Reemplazar todas las rutinas del generador de c�digo con las instrucciones "k" e ir desapareciendo campos auxiliares de TOperand, como .bank o .offs. --Revisar el manejo de bancos en el generador de c�digo, cuando se usan instrucciones condicionales -como BTFSS o DECFSZ, en los algoritmos. +-Revisar el manejo de bancos en el generador de c�digo, cuando se usan instrucciones condicionales como BTFSS o DECFSZ, en los algoritmos. -Revisar la implementaci�n de IF THEN END, para optimizar el caso m�s simple, el que el cuerpo contiene una sola instrucci�n, evitando saltos innecesarios. -Terminar de implementar los arreglos. @@ -71,6 +97,142 @@ los lazos y condicionales. -Revisar el comportamiento de los programas compilados, con m�s de un banco de memoria RAM y m�s de una p�gina de ROM. +PicPas 0.8.7 +============ +## Notas +Esta versi�n consolida el soporte a la familia de PIC con instrucciones de 12 bits, incluyendo nuevas rutinas y corrigiendo algunas en el generador de c�digo. A�n quedan puntos pendientes por revisar pero son incidencias menores. +Adem�s se contin�an con los cambios en la arquitectura del proyecto que mejoren el soporte Multi-compilador de PicPas. +Los cambios m�s notables son las mejoras considerables que se est�n incluyendo en el depurador/simulador, que ahora puede incluir componentes electr�nicos adicionales al PIC. Adem�s la simulaci�n es mucho m�s completa y no se limita a solo simular valores digitales sino que se hace an�lisis de nodos con valores de voltaje e impedancias. + +## Cambios +- Se pasa a usar la librer�a PicUtils en su versi�n 1.5. +- Se quita el soporte a los PIC de la serie 12F, en la directiva {$PROCESSOR}, porque se est� prefiriendo la definici�n de micros, usando directivas m�s detalladas. +- Se agregan m�todos de acceso a p1^ y p2^ en la unidad Parser. +- Se crea el m�todo TCompilerBase.OperationStr() para dar m�s informaci�n sobre una operaci�n ROB, y se pasa a usar en las unidades generadoras de c�digo. +- Se crea la directiva $SET_UNIMP_BITS1 para definir bits no implementados, fijos a 1. +- Se crea la unidad ParserDirec para incluir rutinas comunes del "Parser" de directivas, que se implementan para todos los compiladores, y se simplifican las unidades ParserDirec_PIC10 y ParserDirec_PIC16. +- Se crean los m�todo TParserDirecBase.AddSysVariableNumber() y AddSysVariableString() en la unidad ParserDirec y se implementa un m�todo para agregar instrucciones de forma din�mica. +- Se crean los archivos de traducci�n tra_GenCodBas.pas, tra_GenCod.pas y las rutinas para el cambio del idioma. +- Se corrigen la modificaci�n de la bandera Z en TPIC16.Exec() y TPIC10.Exec(). +- Se revisan y corrigen varias rutinas del compilador PIC10, para que reemplacen correctamente a las instrucciones ADDLW y SUBLW. Tambi�n se quita el uso del registro FSR que se usa en algunas rutinas de PIC16. +- Se crean rutinas de pruebas para el compilador PIC10, en la ruta "/testcode10". +- Se reemplazan m�s instrucciones del generador de c�digo por instrucciones K, de modo que se ampl�a el trabajo a variables de bancos RAM diversos. +- Se corrige un error en la visualizaci�n de etiquetas en la ventana del depurador. +- Se crea la unidad FramePicAsm y se incluye la funcionalidad de mostrar el c�dgo ensamblador. +- Se mejora el comportamiento del men� contextual para la ventana de depuraci�n y se incluye la posibilidad de plegar c�digo en el c�digo ensamblador. +- Se pasa a usar la version 2.4 de la librer�a ogEditGraf. +- Se agregan diversas funciones al frame FramePicDiagram, como puntos de conexi�n y resaltado, as� como mejor manejo de las etiquetas y se corrige el error de la falta de coincidencia del cuadro de selecci�n con la forma, en algunos casos. +- Se incluyen elementos gr�ficos nuevos en el frame FramePicDiagram, y se incluyen conectores para poder enlazarlos a modo de conexiones. +- Se crean dos temporizaciones independientes para referscar la ventana de Depuraci�n. +- Se modifica la implementaci�n de la la directiva SET, para que considere como v�lidas, el uso de unidades como KHz y MHz. +- Se cambia de nombre a las clases TgenCodBas_PIC16 por TgenCodBas y a TgenCodBas_PIC10 por TgenCodBas. +- Se crea, a modo experimental, las unidades necesarias para el compilador PIC17. +- Se mejora la lista de acceso, en la pantalla principal, para seleccionar al compilador actual. +- Se elimina la generaci�n de archivos *.hex para las unidades, al momento de compilarlas. +- Se cambia la tecla de acceso a la compilaci�n de F9 a Ctrl+F9. + + +PicPas 0.8.6 +============ +* Se reemplazan m�s rutinas del generador de c�digo de la unidad GenCod_PIC16 con instrucciones +"k". +* Se reescriben la rutina TGenCod.ROB_byte_and_byte(), TGenCod.ROB_byte_or_byte() y +TGenCod.ROB_byte_xor_byte() para no usar TGenCod.opers_byte() y se incluyen algunas optimizaciones. +* Se elimina TGenCod.opers_byte(). +* Se modifican los m�todos AddrString, IsBitSize, IsByteSize, IsWordSize y IsDWordSize en +TxpEleType para que no accedan a los tipos typBit, typBool, ... y as� puedan moverse estos +campos a la clase TCompilerBase. +* Se mueve la declaraci�n de tipos: typBit, typBool, typByte, typChar, typWord, typDWord a la +clase TCOmpilerBase, para poder crear instancias independientes de compiladores, basados en +TCOmpilerBase. +* Se cambia de nombre a TfrmPrincipal.Compiler por TfrmPrincipal.Compiler16 y se crea el +objeto TfrmPrincipal.Compiler10 +* Se modifica la unidad "Parser" para incluir campos virtuales y abstractos en TCompilerBase. +* Se modifica frmPrincipal para que pueda trabajar con distintos compiladores, descendientes +de la clase TCompilerBase. +* Se redise�a gran parte de la unidad FrameRegWatcher para que acepte a un objeto TCompilerBase +como fuente, de modo que ya no es espec�fico de PIC16. Adem�s se implementa la opci�n de mostrar +variables de tipo bit y se le crea un archivo de traducciones para el idioma. +* Se modifica la unidad FrameRamExplorer para que acepte a un objeto TCompilerBase +como fuente, de modo que ya no es espec�fico de PIC16. +* Se modifica la unidad FrameRomExplorer para que acepte a un objeto TCompilerBase +como fuente, de modo que ya no es espec�fico de PIC16. +* Se crea el registro TWordRec en PicCore y se usa para optimizar el manejo de los campo PCH y +PCL de TPIC16 y TPIC10. +* Se modifica FramePicregisters, para optimizar y modularizar la forma en que se muestran los +bits de un registro. Se quita, adem�s, la descripci�n de los bits del registro STATUS. +* Se modifica la forma de llamar a TfrmPrincipal.frmDebug para poder indicarle el compilador y +el PIC, al momento de mostrar el formulario. +* Se modifica FormDebugger para que pueda trabajar con los compiladores PIC10 y PIC16. +* Se cambia la plantilla de Programa nuevo, para hacerla m�s actualziada a la forma de trabajo +actual, usando unidades. +* Se actualizan los programas de la carpeta ejemplo, a la nueva forma de trabajar con las +unidades. +* Se elimina el campo fraSynTree de la clase TCodeTools y se modifica TCodeTool.Create() para +que acepte un compilador gen�rico de la clase TcompilerBase. +* Se renombra la carpeta /devices a /devices16 y se crean las carpetas /devices10, /devices17, +/devices18 y se separan las unidades de acuerdo a su arquitectura. +* Se modifican a los compiladores para que busquen a sus unidades en la ruta que les +corresponde. +* Se optimiza TCodeTool.SetCompletion() para evitar leer por triplicado, la lista de unidades. +* Se crean las directivas $SET_PIN_NAME y $RESET_PINS y se incluyen en el archivo de sintaxis. +* Se uniformiza el c�digo de las unidades FrameRamExplorer y FrameRomExplorer. + + +PicPas 0.8.5 +============ +Se crea la unidad /devices para almacenar las unidades de modelos de microcontroladores. +Se implementa la b�squeda de unidades en la carpeta /devices para compilaci�n y autocompletado. +Se cambia de nombre a las variables de rutas para que empiecen con "pat" en lugar de "rut". +Se incluyen librer�as que definen diversos dispositivos que no est�n definidos internamente. +Se compila el proyecto con la versi�n 1.8 de Lazarus. +Se crea una entrada nueva en los archivos de idioma para ingresar el idioma frances. +Se cambia el nombre del proyecto a PicPas (antes era Project1). +Se optimiza la operaci�n * para resultado menor a 256. +Se implementa la operaci�n * +Se implementa la operaci�n * +Se cambia de nombre a la unidad XpresParserPIC for Parser y se eliminan las referencias a TPIC16 +Se cambia de nombre a la unidad GenCodPIC for GenCodBas_PIC16 +Se cambia de nombre a la unidad GenCod for GenCod_PIC16 +Se cambia de nombre a la unidad Parser for Compiler_PIC16 +Se cambia de nombre a la unidad ParserDirec for ParserDirec_PIC16. +Se cambia de nombre a la unidad ParserAsm for ParserAsmPIC16 +Se cambia el nombre de TfrmPrincipal.CT a CodeTool. +Se cambia el nombre de TfrmPrincipal.cxp a TfrmPrincipal.Compiler. +Se cambia de nombre a la clase TGenCodPic por TGenCodBas_PICBase. +Se pasa a usar la versi�n 2.3 de ogEditGraf. +Se elimina el campo TGenCodBas_PIC16.lastOpCode +Se cambia el sistema de traducci�n de idioma a FrameArcExplor, para que use el mismo que +usa todo el proyecto. +Se mueven m�todos de GenCod_PIC16 a "Parser" para que sirvan a otros compiladores. +Se divide la documentaci�n t�cnica en varios archivos m�s espec�ficos. + + +PicPas 0.8.4 +============ +* Se crea el campo TgenCodPic.lastOpCode, para almacenar la �ltima instrucci�n compilada, y se +modifican las instrucciones "k" para que usen este campo. +* Se Modifican las clases TPicRegister y TPicRegisterBit, en XpresTypesPIC, para agregar el campo +"addr" y convertir los campos "offs" y "bank" en propiedades de solo lectura. +* Se modifican diversas rutinas afectadas, especialmente de la unidad "GenCodPic", para adaptarse +a la nueva definici�n de TPicRegister y TPicRegisterBit. +* Se pasa a usar la versi�n 1.3 de PicUtils. +* Se simplifica la definici�n del almacenamiento: stVarRefVar y se actualizan las rutinas +aefctadas. +* Se reemplazan diversas rutinas del generador de c�digo, con instrucciones "k". +* Se cambia por completo los contenedores de las direcciones de memoria de la clase TxpEleVar, +y se adaptan diversas rutinas para trabajar con este nuevo tipo de almacenamiento. +* Se implementa la operaci�n MOD para bytes. +* Se crea �n nuevo patr�n de pruebas para los tipos Byte, incluyendo la operaci�n MOD. +* Se modifica la ventana de depuraci�n para que muestre el desensambaldo de forma similar a como +se muestra en la ventana principal. +* Se mueve AddCaller() de TGenCodPic a TCompilerBase, y usa en lugar del evento +TxpElement.AddCaller() que es eliminado. +* Se pasa a usar la versi�n 1.7 de la librer�a ogMotEdicion. +* Se activa un men� contextual en el editor gr�fico de la ventana de depuraci�n. +* Se crea el objeto gr�fico TOgLogicState, en la ventana de depuraci�n. Pero no es a�n funcional. +* Se compila una versi�n del binario para Mac (Colaboraci�n de https://github.com/cuistax). + PicPas 0.8.3 ============ diff --git "a/Docs/Documentaci\303\263n T\303\251cnica - Fundamentos.docm" "b/Docs/Documentaci\303\263n T\303\251cnica - Fundamentos.docm" new file mode 100644 index 00000000..2b5e9cec Binary files /dev/null and "b/Docs/Documentaci\303\263n T\303\251cnica - Fundamentos.docm" differ diff --git a/Docs/Manual de Usuario.doc b/Docs/Manual de Usuario.doc index 59ac80cd..c1e61ddb 100644 Binary files a/Docs/Manual de Usuario.doc and b/Docs/Manual de Usuario.doc differ diff --git a/PIC12F609.pas b/PIC12F609.pas deleted file mode 100644 index 7aaaaa22..00000000 --- a/PIC12F609.pas +++ /dev/null @@ -1,219 +0,0 @@ -unit PIC12F609; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F609'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 2} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 1024} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_C1IF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_T1GINV : bit absolute T1CON.7; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - VRCON : byte absolute $0019; - VRCON_C1VREN : bit absolute VRCON.7; - VRCON_VRR : bit absolute VRCON.6; - VRCON_FBREN : bit absolute VRCON.5; - VRCON_VR2 : bit absolute VRCON.4; - VRCON_VR1 : bit absolute VRCON.3; - VRCON_VR0 : bit absolute VRCON.2; - CMCON0 : byte absolute $001a; - CMCON0_C1ON : bit absolute CMCON0.6; - CMCON0_C1OUT : bit absolute CMCON0.5; - CMCON0_C1OE : bit absolute CMCON0.4; - CMCON0_C1POL : bit absolute CMCON0.3; - CMCON0_C1R : bit absolute CMCON0.2; - CMCON0_C1CH : bit absolute CMCON0.1; - CMCON1 : byte absolute $001c; - CMCON1_T1ACS : bit absolute CMCON1.4; - CMCON1_C1HYS : bit absolute CMCON1.3; - CMCON1_T1GSS : bit absolute CMCON1.2; - CMCON1_C1SYNC : bit absolute CMCON1.1; - OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_C1IE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCTUNE : byte absolute $0090; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - WPU : byte absolute $0095; - WPU_WPUA5 : bit absolute WPU.5; - WPU_WPUA4 : bit absolute WPU.4; - WPU_WPUA2 : bit absolute WPU.3; - WPU_WPUA1 : bit absolute WPU.2; - WPU_WPUA0 : bit absolute WPU.1; - IOC : byte absolute $0096; - IOC_IOC5 : bit absolute IOC.5; - IOC_IOC4 : bit absolute IOC.4; - IOC_IOC3 : bit absolute IOC.3; - IOC_IOC2 : bit absolute IOC.2; - IOC_IOC1 : bit absolute IOC.1; - IOC_IOC0 : bit absolute IOC.0; - ANSEL : byte absolute $009f; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS1 : bit absolute ANSEL.2; - ANSEL_ANS0 : bit absolute ANSEL.1; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-01A:SFR'} // VRCON, CMCON0 - {$SET_STATE_RAM '01C-01C:SFR'} // CMCON1 - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCTUNE - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '09F-09F:SFR'} // ANSEL - {$SET_STATE_RAM '0F0-0FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:09'} // PIR1 - {$SET_UNIMP_BITS '019:BF'} // VRCON - {$SET_UNIMP_BITS '01A:F5'} // CMCON0 - {$SET_UNIMP_BITS '01C:1B'} // CMCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:09'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '09F:7F'} // ANSEL - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/OSC1/CLKIN - // Pin 3 : GP4/C1IN-/T1G/OSC2/CLKOUT - // Pin 4 : GP3/MCLR/Vpp - // Pin 5 : GP2/T0CKI/INT/C1OUT - // Pin 6 : GP1/C1IN0-/ICSPCLK - // Pin 7 : GP0/C1IN+/ICSPDAT - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $03FF} // BOR enabled - {$define _BOREN_NSLEEP = $03FE} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $03FC} // BOR disabled - - // IOSCFS : Internal Oscillator Frequency Select - {$define _IOSCFS_8MHZ = $03FF} // 8 MHz - {$define _IOSCFS_4MHZ = $03FB} // 4 MHz - - // CP : Code Protection bit - {$define _CP_OFF = $03FF} // Program memory code protection is disabled - {$define _CP_ON = $03F7} // Program memory code protection is enabled - - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $03FF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $03EF} // MCLR pin function is digital input, MCLR internally tied to VDD - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $03FF} // PWRT disabled - {$define _PWRTE_ON = $03DF} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $03FF} // WDT enabled - {$define _WDTE_OFF = $03BF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $03FF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $037F} // RCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $02FF} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $027F} // INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_EC = $01FF} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN - {$define _FOSC_HS = $017F} // HS oscillator: High-speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_XT = $00FF} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_LP = $007F} // LP oscillator: Low-power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - -implementation -end. diff --git a/PIC12F615.pas b/PIC12F615.pas deleted file mode 100644 index a98dbe45..00000000 --- a/PIC12F615.pas +++ /dev/null @@ -1,286 +0,0 @@ -unit PIC12F615; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F615'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 2} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 1024} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_ADIF : bit absolute PIR1.5; - PIR1_ECCPIF : bit absolute PIR1.4; - PIR1_C1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_T1GINV : bit absolute T1CON.7; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute T2CON.6; - T2CON_TOUTPS2 : bit absolute T2CON.5; - T2CON_TOUTPS1 : bit absolute T2CON.4; - T2CON_TOUTPS0 : bit absolute T2CON.3; - T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS1 : bit absolute T2CON.1; - T2CON_T2CKPS0 : bit absolute T2CON.0; - CCPR1L : byte absolute $0013; - CCPR1H : byte absolute $0014; - CCP1CON : byte absolute $0015; - CCP1CON_P1M : bit absolute CCP1CON.7; - CCP1CON_DC1B1 : bit absolute CCP1CON.5; - CCP1CON_DC1B0 : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - PWM1CON : byte absolute $0016; - PWM1CON_PRSEN : bit absolute PWM1CON.7; - PWM1CON_PDC6 : bit absolute PWM1CON.6; - PWM1CON_PDC5 : bit absolute PWM1CON.5; - PWM1CON_PDC4 : bit absolute PWM1CON.4; - PWM1CON_PDC3 : bit absolute PWM1CON.3; - PWM1CON_PDC2 : bit absolute PWM1CON.2; - PWM1CON_PDC1 : bit absolute PWM1CON.1; - PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $0017; - ECCPAS_ECCPASE : bit absolute ECCPAS.7; - ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; - ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; - ECCPAS_ECCPAS0 : bit absolute ECCPAS.4; - ECCPAS_PSSAC1 : bit absolute ECCPAS.3; - ECCPAS_PSSAC0 : bit absolute ECCPAS.2; - ECCPAS_PSSBD1 : bit absolute ECCPAS.1; - ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - VRCON : byte absolute $0019; - VRCON_C1VREN : bit absolute VRCON.7; - VRCON_VRR : bit absolute VRCON.6; - VRCON_FBREN : bit absolute VRCON.5; - VRCON_VR2 : bit absolute VRCON.4; - VRCON_VR1 : bit absolute VRCON.3; - VRCON_VR0 : bit absolute VRCON.2; - CMCON0 : byte absolute $001a; - CMCON0_C1ON : bit absolute CMCON0.6; - CMCON0_C1OUT : bit absolute CMCON0.5; - CMCON0_C1OE : bit absolute CMCON0.4; - CMCON0_C1POL : bit absolute CMCON0.3; - CMCON0_C1R : bit absolute CMCON0.2; - CMCON0_C1CH : bit absolute CMCON0.1; - CMCON1 : byte absolute $001c; - CMCON1_T1ACS : bit absolute CMCON1.4; - CMCON1_C1HYS : bit absolute CMCON1.3; - CMCON1_T1GSS : bit absolute CMCON1.2; - CMCON1_C1SYNC : bit absolute CMCON1.1; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; - ADCON0_ADFM : bit absolute ADCON0.7; - ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.4; - ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; - OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_ADIE : bit absolute PIE1.5; - PIE1_ECCPIE : bit absolute PIE1.4; - PIE1_C1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCTUNE : byte absolute $0090; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PR2 : byte absolute $0092; - APFCON : byte absolute $0093; - APFCON_T1GSEL : bit absolute APFCON.4; - APFCON_P1BSEL : bit absolute APFCON.3; - APFCON_P1ASEL : bit absolute APFCON.2; - WPU : byte absolute $0095; - WPU_WPUA5 : bit absolute WPU.5; - WPU_WPUA4 : bit absolute WPU.4; - WPU_WPUA2 : bit absolute WPU.3; - WPU_WPUA1 : bit absolute WPU.2; - WPU_WPUA0 : bit absolute WPU.1; - IOC : byte absolute $0096; - IOC_IOC5 : bit absolute IOC.5; - IOC_IOC4 : bit absolute IOC.4; - IOC_IOC3 : bit absolute IOC.3; - IOC_IOC2 : bit absolute IOC.2; - IOC_IOC1 : bit absolute IOC.1; - IOC_IOC0 : bit absolute IOC.0; - ADRESL : byte absolute $009e; - ANSEL : byte absolute $009f; - ANSEL_ADCS2 : bit absolute ANSEL.6; - ANSEL_ADCS1 : bit absolute ANSEL.5; - ANSEL_ADCS0 : bit absolute ANSEL.4; - ANSEL_AN3 : bit absolute ANSEL.3; - ANSEL_AN2 : bit absolute ANSEL.2; - ANSEL_AN1 : bit absolute ANSEL.1; - ANSEL_AN0 : bit absolute ANSEL.0; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-017:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS - {$SET_STATE_RAM '019-01A:SFR'} // VRCON, CMCON0 - {$SET_STATE_RAM '01C-01C:SFR'} // CMCON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCTUNE - {$SET_STATE_RAM '092-093:SFR'} // PR2, APFCON - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ANSEL - {$SET_STATE_RAM '0F0-0FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:6B'} // PIR1 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '015:BF'} // CCP1CON - {$SET_UNIMP_BITS '019:BF'} // VRCON - {$SET_UNIMP_BITS '01A:F5'} // CMCON0 - {$SET_UNIMP_BITS '01C:1B'} // CMCON1 - {$SET_UNIMP_BITS '01F:DF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:6B'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:13'} // APFCON - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '09F:7F'} // ANSEL - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/P1A/OSC1/CLKIN - // Pin 3 : GP4/AN3/C1IN1-/T1G/P1B/OSC2/CLKOUT - // Pin 4 : GP3/T1G/MCLR/Vpp - // Pin 5 : GP2/AN2/T0CKI/INT/C1OUT/CCP1/P1A - // Pin 6 : GP1/AN1/C1IN0-/Vref/ICSPCLK - // Pin 7 : GP0/AN0/C1IN+/P1B/ICSPDAT - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $03FF} // BOR enabled - {$define _BOREN_NSLEEP = $03FE} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $03FC} // BOR disabled - - // IOSCFS : Internal Oscillator Frequency Select - {$define _IOSCFS_8MHZ = $03FF} // 8 MHz - {$define _IOSCFS_4MHZ = $03FB} // 4 MHz - - // CP : Code Protection bit - {$define _CP_OFF = $03FF} // Program memory code protection is disabled - {$define _CP_ON = $03F7} // Program memory code protection is enabled - - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $03FF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $03EF} // MCLR pin function is digital input, MCLR internally tied to VDD - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $03FF} // PWRT disabled - {$define _PWRTE_ON = $03DF} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $03FF} // WDT enabled - {$define _WDTE_OFF = $03BF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $03FF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $037F} // RCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $02FF} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $027F} // INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_EC = $01FF} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN - {$define _FOSC_HS = $017F} // HS oscillator: High-speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_XT = $00FF} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_LP = $007F} // LP oscillator: Low-power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - -implementation -end. diff --git a/PIC12F617.pas b/PIC12F617.pas deleted file mode 100644 index 20cc5b1c..00000000 --- a/PIC12F617.pas +++ /dev/null @@ -1,325 +0,0 @@ -unit PIC12F617; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F617'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 2} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 2048} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_ADIF : bit absolute PIR1.5; - PIR1_CCP1IF : bit absolute PIR1.4; - PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_T1GINV : bit absolute T1CON.7; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute T2CON.6; - T2CON_TOUTPS2 : bit absolute T2CON.5; - T2CON_TOUTPS1 : bit absolute T2CON.4; - T2CON_TOUTPS0 : bit absolute T2CON.3; - T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; - CCPR1L : byte absolute $0013; - CCPR1H : byte absolute $0014; - CCP1CON : byte absolute $0015; - CCP1CON_P1M : bit absolute CCP1CON.7; - CCP1CON_DCB1 : bit absolute CCP1CON.5; - CCP1CON_DCB0 : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - PWM1CON : byte absolute $0016; - PWM1CON_PRSEN : bit absolute PWM1CON.7; - PWM1CON_PDC6 : bit absolute PWM1CON.6; - PWM1CON_PDC5 : bit absolute PWM1CON.5; - PWM1CON_PDC4 : bit absolute PWM1CON.4; - PWM1CON_PDC3 : bit absolute PWM1CON.3; - PWM1CON_PDC2 : bit absolute PWM1CON.2; - PWM1CON_PDC1 : bit absolute PWM1CON.1; - PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $0017; - ECCPAS_ECCPASE : bit absolute ECCPAS.7; - ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; - ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; - ECCPAS_ECCPAS0 : bit absolute ECCPAS.4; - ECCPAS_PSSAC1 : bit absolute ECCPAS.3; - ECCPAS_PSSAC0 : bit absolute ECCPAS.2; - ECCPAS_PSSBD1 : bit absolute ECCPAS.1; - ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - VRCON : byte absolute $0019; - VRCON_CMVREN : bit absolute VRCON.7; - VRCON_VRR : bit absolute VRCON.6; - VRCON_FVREN : bit absolute VRCON.5; - VRCON_VR1 : bit absolute VRCON.4; - VRCON_VR0 : bit absolute VRCON.3; - CMCON0 : byte absolute $001a; - CMCON0_CMON : bit absolute CMCON0.6; - CMCON0_COUT : bit absolute CMCON0.5; - CMCON0_CMOE : bit absolute CMCON0.4; - CMCON0_CMPOL : bit absolute CMCON0.3; - CMCON0_CMR : bit absolute CMCON0.2; - CMCON0_CMCH : bit absolute CMCON0.1; - CMCON1 : byte absolute $001c; - CMCON1_T1ACS : bit absolute CMCON1.4; - CMCON1_CMHYS : bit absolute CMCON1.3; - CMCON1_T1GSS : bit absolute CMCON1.2; - CMCON1_CMSYNC : bit absolute CMCON1.1; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; - ADCON0_ADFM : bit absolute ADCON0.7; - ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.4; - ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; - OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_ADIE : bit absolute PIE1.5; - PIE1_CCP1IE : bit absolute PIE1.4; - PIE1_CMIE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCTUNE : byte absolute $0090; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PR2 : byte absolute $0092; - APFCON : byte absolute $0093; - APFCON_T1GSEL : bit absolute APFCON.4; - APFCON_P1BSEL : bit absolute APFCON.3; - APFCON_P1ASEL : bit absolute APFCON.2; - WPU : byte absolute $0095; - WPU_WPU5 : bit absolute WPU.5; - WPU_WPU4 : bit absolute WPU.4; - WPU_WPU2 : bit absolute WPU.3; - WPU_WPU1 : bit absolute WPU.2; - WPU_WPU0 : bit absolute WPU.1; - IOC : byte absolute $0096; - IOC_IOC5 : bit absolute IOC.5; - IOC_IOC4 : bit absolute IOC.4; - IOC_IOC3 : bit absolute IOC.3; - IOC_IOC2 : bit absolute IOC.2; - IOC_IOC1 : bit absolute IOC.1; - IOC_IOC0 : bit absolute IOC.0; - PMCON1 : byte absolute $0098; - PMCON1_WREN : bit absolute PMCON1.2; - PMCON1_WR : bit absolute PMCON1.1; - PMCON1_RD : bit absolute PMCON1.0; - PMCON2 : byte absolute $0099; - PMADRL : byte absolute $009a; - PMADRL_PMADRL7 : bit absolute PMADRL.7; - PMADRL_PMADRL6 : bit absolute PMADRL.6; - PMADRL_PMADRL5 : bit absolute PMADRL.5; - PMADRL_PMADRL4 : bit absolute PMADRL.4; - PMADRL_PMADRL3 : bit absolute PMADRL.3; - PMADRL_PMADRL2 : bit absolute PMADRL.2; - PMADRL_PMADRL1 : bit absolute PMADRL.1; - PMADRL_PMADRL0 : bit absolute PMADRL.0; - PMADRH : byte absolute $009b; - PMADRH_PMADRH2 : bit absolute PMADRH.2; - PMADRH_PMADRH1 : bit absolute PMADRH.1; - PMADRH_PMADRH0 : bit absolute PMADRH.0; - PMDATL : byte absolute $009c; - PMDATL_PMDATL7 : bit absolute PMDATL.7; - PMDATL_PMDATL6 : bit absolute PMDATL.6; - PMDATL_PMDATL5 : bit absolute PMDATL.5; - PMDATL_PMDATL4 : bit absolute PMDATL.4; - PMDATL_PMDATL3 : bit absolute PMDATL.3; - PMDATL_PMDATL2 : bit absolute PMDATL.2; - PMDATL_PMDATL1 : bit absolute PMDATL.1; - PMDATL_PMDATL0 : bit absolute PMDATL.0; - PMDATH : byte absolute $009d; - ADRESL : byte absolute $009e; - ANSEL : byte absolute $009f; - ANSEL_ADCS2 : bit absolute ANSEL.6; - ANSEL_ADCS1 : bit absolute ANSEL.5; - ANSEL_ADCS0 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-017:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS - {$SET_STATE_RAM '019-01A:SFR'} // VRCON, CMCON0 - {$SET_STATE_RAM '01C-01C:SFR'} // CMCON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCTUNE - {$SET_STATE_RAM '092-093:SFR'} // PR2, APFCON - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '098-09F:SFR'} // PMCON1, PMCON2, PMADRL, PMADRH, PMDATL, PMDATH, ADRESL, ANSEL - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:6B'} // PIR1 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '015:BF'} // CCP1CON - {$SET_UNIMP_BITS '019:BF'} // VRCON - {$SET_UNIMP_BITS '01A:F5'} // CMCON0 - {$SET_UNIMP_BITS '01C:1B'} // CMCON1 - {$SET_UNIMP_BITS '01F:DF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:6B'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:13'} // APFCON - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '098:00'} // PMCON1 - {$SET_UNIMP_BITS '099:00'} // PMCON2 - {$SET_UNIMP_BITS '09A:00'} // PMADRL - {$SET_UNIMP_BITS '09B:00'} // PMADRH - {$SET_UNIMP_BITS '09C:00'} // PMDATL - {$SET_UNIMP_BITS '09D:00'} // PMDATH - {$SET_UNIMP_BITS '09F:7F'} // ANSEL - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/P1A/OSC1/CLKIN - // Pin 3 : GP4/AN3/C1IN1-/T1G/P1B/OSC2/CLKOUT - // Pin 4 : GP3/T1G/MCLR/Vpp - // Pin 5 : GP2/AN2/T0CKI/INT/C1OUT/CCP1/P1A - // Pin 6 : GP1/AN1/C1IN0-/Vref/ICSPCLK - // Pin 7 : GP0/AN0/C1IN+/P1B/ICSPDAT - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_OFF = $0FFF} // Write protection off - {$define _WRT_BOOT = $0FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by PMCON1 control - {$define _WRT_HALF = $0FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by PMCON1 control - {$define _WRT_ALL = $0FFC} // 000h to 7FFh write protected, entire program memory is write protected. - - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $0FF3} // BOR disabled - - // IOSCFS : Internal Oscillator Frequency Select - {$define _IOSCFS_8MHZ = $0FFF} // 8 MHz - {$define _IOSCFS_4MHZ = $0FEF} // 4 MHz - - // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory is not code protected - {$define _CP_ON = $0FDF} // Program memory is external read and write protected - - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled - {$define _MCLRE_OFF = $0FBF} // MCLR pin is alternate function, MCLR function is internally disabled - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // EXTRC oscillator: CLKOUT function on RA4/AN3/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // EXTRCIO oscillator: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/AN3/T1G/OSC2/CLKOUT, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT - -implementation -end. diff --git a/PIC12F629.pas b/PIC12F629.pas deleted file mode 100644 index 8743b293..00000000 --- a/PIC12F629.pas +++ /dev/null @@ -1,228 +0,0 @@ -unit PIC12F629; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F629'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 2} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 1024} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_EEIF : bit absolute PIR1.5; - PIR1_ADIF : bit absolute PIR1.4; - PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - CMCON : byte absolute $0019; - CMCON_COUT : bit absolute CMCON.6; - CMCON_CINV : bit absolute CMCON.5; - CMCON_CIS : bit absolute CMCON.4; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_EEIE : bit absolute PIE1.5; - PIE1_ADIE : bit absolute PIE1.4; - PIE1_CMIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCAL : byte absolute $0090; - OSCCAL_CAL5 : bit absolute OSCCAL.7; - OSCCAL_CAL4 : bit absolute OSCCAL.6; - OSCCAL_CAL3 : bit absolute OSCCAL.5; - OSCCAL_CAL2 : bit absolute OSCCAL.4; - OSCCAL_CAL1 : bit absolute OSCCAL.3; - OSCCAL_CAL0 : bit absolute OSCCAL.2; - WPU : byte absolute $0095; - WPU_WPU5 : bit absolute WPU.5; - WPU_WPU4 : bit absolute WPU.4; - WPU_WPU2 : bit absolute WPU.3; - WPU_WPU1 : bit absolute WPU.2; - WPU_WPU0 : bit absolute WPU.1; - IOC : byte absolute $0096; - IOC_IOC5 : bit absolute IOC.5; - IOC_IOC4 : bit absolute IOC.4; - IOC_IOC3 : bit absolute IOC.3; - IOC_IOC2 : bit absolute IOC.2; - IOC_IOC1 : bit absolute IOC.1; - IOC_IOC0 : bit absolute IOC.0; - VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; - VRCON_VRR : bit absolute VRCON.5; - VRCON_VR3 : bit absolute VRCON.3; - VRCON_VR2 : bit absolute VRCON.2; - VRCON_VR1 : bit absolute VRCON.1; - VRCON_VR0 : bit absolute VRCON.0; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-019:SFR'} // CMCON - {$SET_STATE_RAM '020-05F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCCAL - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '099-09D:SFR'} // VRCON, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '0A0-0DF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:C9'} // PIR1 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '019:5F'} // CMCON - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:C9'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:FC'} // OSCCAL - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09B:7F'} // EEADR - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/OSC1/CLKIN - // Pin 3 : GP4/T1G/OSC2/CLKOUT - // Pin 4 : GP3/MCLR/Vpp - // Pin 5 : GP2/T0CKI/INT/COUT - // Pin 6 : GP1/CIN-/ICSPCLK - // Pin 7 : GP0/CIN+/ICSPDAT - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // BG : Bandgap Calibration bits for BOD and POR voltage - {$define _BG_ = $31FF} // Highest bandgap voltage - {$define _BG_ = $31FC} // Lowest bandgap voltage - - // Reserved : Reserved - {$define _Reserved_ = $31E3} // Reserved - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $31FF} // Data memory code protection is disabled - {$define _CPD_ON = $31DF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $31FF} // Program Memory code protection is disabled - {$define _CP_ON = $31BF} // Program Memory code protection is enabled - - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $31FF} // BOD enabled - {$define _BOREN_OFF = $317F} // BOD disabled - - // MCLRE : GP3/MCLR pin function select - {$define _MCLRE_ON = $31FF} // GP3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $30FF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD - - // PWRTE : Power-Up Timer Enable bit - {$define _PWRTE_OFF = $33FF} // PWRT disabled - {$define _PWRTE_ON = $31FF} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $35FF} // WDT enabled - {$define _WDTE_OFF = $31FF} // WDT disabled - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $39FF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $31FF} // RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $29FF} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $21FF} // INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_EC = $19FF} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN - {$define _FOSC_HS = $11FF} // HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_XT = $09FF} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - -implementation -end. diff --git a/PIC12F635.pas b/PIC12F635.pas deleted file mode 100644 index 1b38e576..00000000 --- a/PIC12F635.pas +++ /dev/null @@ -1,296 +0,0 @@ -unit PIC12F635; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F635'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 4} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 1024} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RAIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_EEIF : bit absolute PIR1.6; - PIR1_LVDIF : bit absolute PIR1.5; - PIR1_CRIF : bit absolute PIR1.4; - PIR1_C1IF : bit absolute PIR1.3; - PIR1_OSFIF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_T1GINV : bit absolute T1CON.7; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - WDTCON : byte absolute $0018; - WDTCON_WDTPS3 : bit absolute WDTCON.4; - WDTCON_WDTPS2 : bit absolute WDTCON.3; - WDTCON_WDTPS1 : bit absolute WDTCON.2; - WDTCON_WDTPS0 : bit absolute WDTCON.1; - WDTCON_SWDTEN : bit absolute WDTCON.0; - CMCON0 : byte absolute $0019; - CMCON0_COUT : bit absolute CMCON0.6; - CMCON0_CINV : bit absolute CMCON0.5; - CMCON0_CIS : bit absolute CMCON0.4; - CMCON0_CM0 : bit absolute CMCON0.3; - CMCON1 : byte absolute $001a; - CMCON1_T1GSS : bit absolute CMCON1.1; - CMCON1_CMSYNC : bit absolute CMCON1.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_EEIE : bit absolute PIE1.6; - PIE1_LVDIE : bit absolute PIE1.5; - PIE1_CRIE : bit absolute PIE1.4; - PIE1_C1IE : bit absolute PIE1.3; - PIE1_OSFIE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; - PCON_ULPWUE : bit absolute PCON.5; - PCON_SBOREN : bit absolute PCON.4; - PCON_WUR : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.6; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; - OSCCON_OSTS : bit absolute OSCCON.3; - OSCCON_HTS : bit absolute OSCCON.2; - OSCCON_LTS : bit absolute OSCCON.1; - OSCCON_SCS : bit absolute OSCCON.0; - OSCTUNE : byte absolute $0090; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - LVDCON : byte absolute $0094; - LVDCON_IRVST : bit absolute LVDCON.5; - LVDCON_LVDEN : bit absolute LVDCON.4; - LVDCON_LVDL2 : bit absolute LVDCON.3; - LVDCON_LVDL1 : bit absolute LVDCON.2; - LVDCON_LVDL0 : bit absolute LVDCON.1; - WPUDA : byte absolute $0095; - WPUDA_WPUDA5 : bit absolute WPUDA.5; - WPUDA_WPUDA4 : bit absolute WPUDA.4; - WPUDA_WPUDA2 : bit absolute WPUDA.3; - WPUDA_WPUDA1 : bit absolute WPUDA.2; - WPUDA_WPUDA0 : bit absolute WPUDA.1; - IOCA : byte absolute $0096; - IOCA_IOCA5 : bit absolute IOCA.5; - IOCA_IOCA4 : bit absolute IOCA.4; - IOCA_IOCA3 : bit absolute IOCA.3; - IOCA_IOCA2 : bit absolute IOCA.2; - IOCA_IOCA1 : bit absolute IOCA.1; - IOCA_IOCA0 : bit absolute IOCA.0; - WDA : byte absolute $0097; - WDA_WDA5 : bit absolute WDA.5; - WDA_WDA4 : bit absolute WDA.4; - WDA_WDA2 : bit absolute WDA.3; - WDA_WDA1 : bit absolute WDA.2; - WDA_WDA0 : bit absolute WDA.1; - VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; - VRCON_VRR : bit absolute VRCON.5; - VRCON_VR3 : bit absolute VRCON.3; - VRCON_VR2 : bit absolute VRCON.2; - VRCON_VR1 : bit absolute VRCON.1; - VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - CRCON : byte absolute $0110; - CRCON_GO_nDONE : bit absolute CRCON.7; - CRCON_ENC_nDEC : bit absolute CRCON.6; - CRCON_CRREG1 : bit absolute CRCON.5; - CRCON_CRREG0 : bit absolute CRCON.4; - CRDAT0 : byte absolute $0111; - CRDAT1 : byte absolute $0112; - CRDAT2 : byte absolute $0113; - CRDAT3 : byte absolute $0114; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '018-01A:SFR'} // WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-090:SFR'} // PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '094-097:SFR'} // LVDCON, WPUDA, IOCA, WDA - {$SET_STATE_RAM '099-09D:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '110-114:SFR'} // CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-105:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-185:bnk1'} // TRISIO - {$SET_MAPPED_RAM '18A-18A:bnk1'} // PCLATH - {$SET_MAPPED_RAM '18B-18B:bnk0'} // INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:ED'} // PIR1 - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '019:5F'} // CMCON0 - {$SET_UNIMP_BITS '01A:02'} // CMCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:ED'} // PIE1 - {$SET_UNIMP_BITS '08E:3B'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '094:37'} // LVDCON - {$SET_UNIMP_BITS '095:37'} // WPUDA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:37'} // WDA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '110:C3'} // CRCON - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/OSC1/CLKIN - // Pin 3 : GP4/T1G/OSC2/CLKOUT - // Pin 4 : GP3/MCLR/Vpp - // Pin 5 : GP2/T0CKI/INT/C1OUT - // Pin 6 : GP1/C1IN-/ICSPCLK - // Pin 7 : GP0/C1IN+/ICSPDAT/ULPWU - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // WURE : Wake-Up Reset Enable bit - {$define _WURE_OFF = $1FFF} // Standard wake-up and continue enabled - {$define _WURE_ON = $1FFE} // Wake-up and Reset enabled - - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor disabled - - // IESO : Internal-External Switchover bit - {$define _IESO_ON = $1FFF} // Internal External Switchover mode enabled - {$define _IESO_OFF = $1FFB} // Internal External Switchover mode disabled - - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOD enabled and SBOdEN bit disabled - {$define _BOREN_NSLEEP = $1FF7} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. - {$define _BOREN_SBODEN = $1FEF} // SBODEN controls BOD function - {$define _BOREN_OFF = $1FE7} // BOD and SBODEN disabled - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory is not code protected - {$define _CPD_ON = $1FDF} // Data memory is external read protected - - // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory is not code protected - {$define _CP_ON = $1FBF} // Program memory is external read and write-protected - - // MCLRE : MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled - {$define _MCLRE_OFF = $1F7F} // MCLR pin function is alternate function, MCLR function is internally disabled - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - -implementation -end. diff --git a/PIC12F675.pas b/PIC12F675.pas deleted file mode 100644 index 5e6b2b09..00000000 --- a/PIC12F675.pas +++ /dev/null @@ -1,247 +0,0 @@ -unit PIC12F675; - -// Define hardware -{$SET PIC_MODEL = 'PIC12F675'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 8} -{$SET PIC_NUMBANKS = 2} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 1024} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - GPIO : byte absolute $0005; - GPIO_GP5 : bit absolute GPIO.5; - GPIO_GP4 : bit absolute GPIO.4; - GPIO_GP3 : bit absolute GPIO.3; - GPIO_GP2 : bit absolute GPIO.2; - GPIO_GP1 : bit absolute GPIO.1; - GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_EEIF : bit absolute PIR1.5; - PIR1_ADIF : bit absolute PIR1.4; - PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - CMCON : byte absolute $0019; - CMCON_COUT : bit absolute CMCON.6; - CMCON_CINV : bit absolute CMCON.5; - CMCON_CIS : bit absolute CMCON.4; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; - ADCON0_ADFM : bit absolute ADCON0.7; - ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_GO_nDONE : bit absolute ADCON0.3; - ADCON0_ADON : bit absolute ADCON0.2; - ADCON0_GO_DONE : bit absolute ADCON0.1; - OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISIO : byte absolute $0085; - TRISIO_TRISIO5 : bit absolute TRISIO.5; - TRISIO_TRISIO4 : bit absolute TRISIO.4; - TRISIO_TRISIO3 : bit absolute TRISIO.3; - TRISIO_TRISIO2 : bit absolute TRISIO.2; - TRISIO_TRISIO1 : bit absolute TRISIO.1; - TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; - PIE1_EEIE : bit absolute PIE1.5; - PIE1_ADIE : bit absolute PIE1.4; - PIE1_CMIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCAL : byte absolute $0090; - OSCCAL_CAL5 : bit absolute OSCCAL.7; - OSCCAL_CAL4 : bit absolute OSCCAL.6; - OSCCAL_CAL3 : bit absolute OSCCAL.5; - OSCCAL_CAL2 : bit absolute OSCCAL.4; - OSCCAL_CAL1 : bit absolute OSCCAL.3; - OSCCAL_CAL0 : bit absolute OSCCAL.2; - WPU : byte absolute $0095; - WPU_WPU5 : bit absolute WPU.5; - WPU_WPU4 : bit absolute WPU.4; - WPU_WPU2 : bit absolute WPU.3; - WPU_WPU1 : bit absolute WPU.2; - WPU_WPU0 : bit absolute WPU.1; - IOC : byte absolute $0096; - IOC_IOC5 : bit absolute IOC.5; - IOC_IOC4 : bit absolute IOC.4; - IOC_IOC3 : bit absolute IOC.3; - IOC_IOC2 : bit absolute IOC.2; - IOC_IOC1 : bit absolute IOC.1; - IOC_IOC0 : bit absolute IOC.0; - VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; - VRCON_VRR : bit absolute VRCON.5; - VRCON_VR3 : bit absolute VRCON.3; - VRCON_VR2 : bit absolute VRCON.2; - VRCON_VR1 : bit absolute VRCON.1; - VRCON_VR0 : bit absolute VRCON.0; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ANSEL : byte absolute $009f; - ANSEL_ADCS2 : bit absolute ANSEL.6; - ANSEL_ADCS1 : bit absolute ANSEL.5; - ANSEL_ADCS0 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-019:SFR'} // CMCON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-05F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCCAL - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '099-09F:SFR'} // VRCON, EEDATA, EEADR, EECON1, EECON2, ADRESL, ANSEL - {$SET_STATE_RAM '0A0-0DF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:C9'} // PIR1 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '019:5F'} // CMCON - {$SET_UNIMP_BITS '01F:CF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:C9'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:FC'} // OSCCAL - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09B:7F'} // EEADR - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:7F'} // ANSEL - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : GP5/T1CKI/OSC1/CLKIN - // Pin 3 : GP4/AN3/T1G/OSC2/CLKOUT - // Pin 4 : GP3/MCLR/Vpp - // Pin 5 : GP2/AN2/T0CKI/INT/COUT - // Pin 6 : GP1/AN1/CIN-/Vref/ICSPCLK - // Pin 7 : GP0/AN0/CIN+/ICSPDAT - // Pin 8 : Vss - - - // -- RAM to PIN mapping -- - - - - // -- Bits Configuration -- - - // BG : Bandgap Calibration bits for BOD and POR voltage - {$define _BG_ = $31FF} // Highest bandgap voltage - {$define _BG_ = $31FC} // Lowest bandgap voltage - - // Reserved : Reserved - {$define _Reserved_ = $31E3} // Reserved - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $31FF} // Data memory code protection is disabled - {$define _CPD_ON = $31DF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $31FF} // Program Memory code protection is disabled - {$define _CP_ON = $31BF} // Program Memory code protection is enabled - - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $31FF} // BOD enabled - {$define _BOREN_OFF = $317F} // BOD disabled - - // MCLRE : GP3/MCLR pin function select - {$define _MCLRE_ON = $31FF} // GP3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $30FF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD - - // PWRTE : Power-Up Timer Enable bit - {$define _PWRTE_OFF = $33FF} // PWRT disabled - {$define _PWRTE_ON = $31FF} // PWRT enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $35FF} // WDT enabled - {$define _WDTE_OFF = $31FF} // WDT disabled - - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $39FF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $31FF} // RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $29FF} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $21FF} // INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN - {$define _FOSC_EC = $19FF} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN - {$define _FOSC_HS = $11FF} // HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_XT = $09FF} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN - -implementation -end. diff --git a/PIC16F720.pas b/PIC16F720.pas deleted file mode 100644 index 4974513a..00000000 --- a/PIC16F720.pas +++ /dev/null @@ -1,425 +0,0 @@ -unit PIC16F720; - -// Define hardware -{$SET PIC_MODEL = 'PIC16F720'} -{$SET PIC_MAXFREQ = 16000000} -{$SET PIC_NPINS = 20} -{$SET PIC_NUMBANKS = 4} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 2048} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.6; - PORTA_RA4 : bit absolute PORTA.5; - PORTA_RA3 : bit absolute PORTA.4; - PORTA_RA2 : bit absolute PORTA.3; - PORTA_RA1 : bit absolute PORTA.2; - PORTA_RA0 : bit absolute PORTA.1; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.4; - PORTB_RB6 : bit absolute PORTB.3; - PORTB_RB5 : bit absolute PORTB.2; - PORTB_RB4 : bit absolute PORTB.1; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RABIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_TMR1GIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_TXIF : bit absolute PIR1.4; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; - T1CON_T1CKPS0 : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute T2CON.6; - T2CON_TOUTPS2 : bit absolute T2CON.5; - T2CON_TOUTPS1 : bit absolute T2CON.4; - T2CON_TOUTPS0 : bit absolute T2CON.3; - T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1L : byte absolute $0015; - CCPR1H : byte absolute $0016; - CCP1CON : byte absolute $0017; - CCP1CON_DC1 : bit absolute CCP1CON.7; - CCP1CON_B1 : bit absolute CCP1CON.6; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - RCSTA : byte absolute $0018; - RCSTA_SPEN : bit absolute RCSTA.7; - RCSTA_RX9 : bit absolute RCSTA.6; - RCSTA_SREN : bit absolute RCSTA.5; - RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_ADDEN : bit absolute RCSTA.3; - RCSTA_FERR : bit absolute RCSTA.2; - RCSTA_OERR : bit absolute RCSTA.1; - RCSTA_RX9D : bit absolute RCSTA.0; - TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; - ADCON0_CHS3 : bit absolute ADCON0.5; - ADCON0_CHS2 : bit absolute ADCON0.4; - ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_CHS0 : bit absolute ADCON0.2; - ADCON0_GO_nDONE : bit absolute ADCON0.1; - ADCON0_ADON : bit absolute ADCON0.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISA_TRISA5 : bit absolute TRISA.5; - TRISA_TRISA4 : bit absolute TRISA.4; - TRISA_TRISA2 : bit absolute TRISA.3; - TRISA_TRISA1 : bit absolute TRISA.2; - TRISA_TRISA0 : bit absolute TRISA.1; - TRISB : byte absolute $0086; - TRISB_TRISB7 : bit absolute TRISB.4; - TRISB_TRISB6 : bit absolute TRISB.3; - TRISB_TRISB5 : bit absolute TRISB.2; - TRISB_TRISB4 : bit absolute TRISB.1; - TRISC : byte absolute $0087; - TRISC_TRISC7 : bit absolute TRISC.7; - TRISC_TRISC6 : bit absolute TRISC.6; - TRISC_TRISC5 : bit absolute TRISC.5; - TRISC_TRISC4 : bit absolute TRISC.4; - TRISC_TRISC3 : bit absolute TRISC.3; - TRISC_TRISC2 : bit absolute TRISC.2; - TRISC_TRISC1 : bit absolute TRISC.1; - TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_TMR1GIE : bit absolute PIE1.7; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_RCIE : bit absolute PIE1.5; - PIE1_TXIE : bit absolute PIE1.4; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TMR2IE : bit absolute PIE1.1; - PIE1_TMR1IE : bit absolute PIE1.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; - T1GCON_TMR1GE : bit absolute T1GCON.7; - T1GCON_T1GPOL : bit absolute T1GCON.6; - T1GCON_T1GTM : bit absolute T1GCON.5; - T1GCON_T1GSPM : bit absolute T1GCON.4; - T1GCON_T1GGO_DONE : bit absolute T1GCON.3; - T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; - OSCCON : byte absolute $0090; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; - OSCCON_ICSL : bit absolute OSCCON.3; - OSCCON_ICSS : bit absolute OSCCON.2; - OSCTUNE : byte absolute $0091; - OSCTUNE_TUN5 : bit absolute OSCTUNE.5; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPADD_ADD7 : bit absolute SSPADD.7; - SSPADD_ADD6 : bit absolute SSPADD.6; - SSPADD_ADD5 : bit absolute SSPADD.5; - SSPADD_ADD4 : bit absolute SSPADD.4; - SSPADD_ADD3 : bit absolute SSPADD.3; - SSPADD_ADD2 : bit absolute SSPADD.2; - SSPADD_ADD1 : bit absolute SSPADD.1; - SSPADD_ADD0 : bit absolute SSPADD.0; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_D_nA : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_R_nW : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - WPUA : byte absolute $0095; - WPUA_WPUA5 : bit absolute WPUA.7; - WPUA_WPUA4 : bit absolute WPUA.6; - WPUA_WPUA3 : bit absolute WPUA.5; - WPUA_WPUA2 : bit absolute WPUA.4; - WPUA_WPUA1 : bit absolute WPUA.3; - WPUA_WPUA0 : bit absolute WPUA.2; - IOCA : byte absolute $0096; - IOCA_IOCA5 : bit absolute IOCA.7; - IOCA_IOCA4 : bit absolute IOCA.6; - IOCA_IOCA3 : bit absolute IOCA.5; - IOCA_IOCA2 : bit absolute IOCA.4; - IOCA_IOCA1 : bit absolute IOCA.3; - IOCA_IOCA0 : bit absolute IOCA.2; - TXSTA : byte absolute $0098; - TXSTA_CSRC : bit absolute TXSTA.7; - TXSTA_TX9 : bit absolute TXSTA.6; - TXSTA_TXEN : bit absolute TXSTA.5; - TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; - SPBRG : byte absolute $0099; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.7; - FVRCON_FVREN : bit absolute FVRCON.6; - FVRCON_TSEN : bit absolute FVRCON.5; - FVRCON_TSRNG : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; - ADCON1_ADCS2 : bit absolute ADCON1.4; - ADCON1_ADCS1 : bit absolute ADCON1.3; - ADCON1_ADCS0 : bit absolute ADCON1.2; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - IOCB : byte absolute $0116; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - ANSELA : byte absolute $0185; - ANSELA_ANSA5 : bit absolute ANSELA.5; - ANSELA_ANSA4 : bit absolute ANSELA.4; - ANSELA_ANSA2 : bit absolute ANSELA.3; - ANSELA_ANSA1 : bit absolute ANSELA.2; - ANSELA_ANSA0 : bit absolute ANSELA.1; - ANSELB : byte absolute $0186; - ANSELB_ANSB5 : bit absolute ANSELB.5; - ANSELB_ANSB4 : bit absolute ANSELB.4; - ANSELC : byte absolute $0187; - ANSELC_ANSC7 : bit absolute ANSELC.7; - ANSELC_ANSC6 : bit absolute ANSELC.6; - ANSELC_ANSC3 : bit absolute ANSELC.5; - ANSELC_ANSC2 : bit absolute ANSELC.4; - ANSELC_ANSC1 : bit absolute ANSELC.3; - ANSELC_ANSC0 : bit absolute ANSELC.2; - PMCON1 : byte absolute $018c; - PMCON1_CFGS : bit absolute PMCON1.6; - PMCON1_LWLO : bit absolute PMCON1.5; - PMCON1_FREE : bit absolute PMCON1.4; - PMCON1_WREN : bit absolute PMCON1.3; - PMCON1_WR : bit absolute PMCON1.2; - PMCON1_RD : bit absolute PMCON1.1; - PMCON2 : byte absolute $018d; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-01A:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-096:SFR'} // PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUA, IOCA - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09D-09D:SFR'} // FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB, ANSELC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, PMCON1, PMCON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:07'} // PMADRH - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '187:00'} // ANSELC - {$SET_UNIMP_BITS '18C:01'} // PMCON1 - {$SET_UNIMP_BITS '18D:00'} // PMCON2 - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : RA5/T1CKI/CLKIN - // Pin 3 : RA4/AN3/T1G/CLKOUT - // Pin 4 : RA3/MCLR/Vpp - // Pin 5 : RC5/CCP1 - // Pin 6 : RC4 - // Pin 7 : RC3/AN7 - // Pin 8 : RC6/AN8/SS - // Pin 9 : RC7/AN9/SDO - // Pin 10 : RB7/TX/CK - // Pin 11 : RB6/SCK/SCL - // Pin 12 : RB5/AN11/RX/DT - // Pin 13 : RB4/AN10/SDI/SDA - // Pin 14 : RC2/AN6 - // Pin 15 : RC1/AN5 - // Pin 16 : RC0/AN4 - // Pin 17 : RA2/AN2/T0CKI/INT - // Pin 18 : RA1/AN1/ICSPCLK/ICDCLK - // Pin 19 : RA0/AN0/ICSPDAT/ICDDAT - // Pin 20 : Vss - - - // -- RAM to PIN mapping -- - - {$MAP_RAM_TO_PIN '005:1-19,2-18,3-17,4-4,5-3,6-2'} // PORTA - {$MAP_RAM_TO_PIN '006:1-13,2-12,3-11,4-10'} // PORTB - {$MAP_RAM_TO_PIN '007:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC - - - // -- Bits Configuration -- - - // DEBUG : Debugger Mode - {$define _DEBUG_ON = $337A} // Background debugger is enabled - {$define _DEBUG_OFF = $337B} // Background debugger is disabled - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_OFF = $3379} // INTOSC Frequency is 500 kHz - {$define _PLLEN_ON = $337B} // INTOSC Frequency is 16 MHz (32x) - - // BOREN : Brown-out Reset Enable bits - {$define _BOREN_OFF = $3373} // Brown-out Reset disabled (Preconditioned State) - {$define _BOREN_NSLEEP = $337B} // Brown-out Reset enabled during operation and disabled in Sleep - {$define _BOREN_ON = $337F} // Brown-out Reset enabled - - // CP : Flash Program Memory Code Protection bit - {$define _CP_ON = $336B} // 0000h to 07FFh code protection on - {$define _CP_OFF = $337B} // Code protection off - - // MCLRE : RA3/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $337B} // RA3/MCLR/VPP pin function is MCLR; Weak pull-up enabled. - {$define _MCLRE_OFF = $335B} // RA3/MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up disabled - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_ON = $333B} // PWRT enabled - {$define _PWRTE_OFF = $337B} // PWRT disabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_OFF = $337B} // WDT disabled - {$define _WDTE_ON = $33FB} // WDT enabled - - // FOSC : Oscillator Selection bits - {$define _FOSC_ECCLK = $337B} // EC oscillator: CLKO function on RA4/CLKO pin, CLKI on RA5/CLKI - {$define _FOSC_ECIO = $327B} // EC oscillator: I/O function on RA4/CLKO pin, CLKI on RA5/CLKI - {$define _FOSC_INTOSCCLK = $317B} // INTOSC oscillator: CLKO function on RA4/CLKO pin, I/O function on RA5/CLKI - {$define _FOSC_INTOSCIO = $307B} // INTOSCIO oscillator: I/O function on RA4/CLKO pin, I/O function on RA5/CLKI - - // VCAPEN : - {$define _VCAPEN_OFF = $0013} // All VCAP pin functions are disabled. - - // WRTEN : Flash memory self-write protection bits - {$define _WRTEN_OFF = $0017} // Write protection off - {$define _WRTEN_BOOT = $0015} // 0h to 1FFh of flash memory write protected, 200h to FFFh may be modified - {$define _WRTEN_HALF = $0013} // 0h to 7FFh of flash memory write protected, 800h to FFFh may be modified - {$define _WRTEN_FULL = $0011} // 0h to FFFh of flash memory write protected, no address may be modified - -implementation -end. diff --git a/PIC16F721.pas b/PIC16F721.pas deleted file mode 100644 index b2fd0542..00000000 --- a/PIC16F721.pas +++ /dev/null @@ -1,424 +0,0 @@ -unit PIC16F721; - -// Define hardware -{$SET PIC_MODEL = 'PIC16F721'} -{$SET PIC_MAXFREQ = 16000000} -{$SET PIC_NPINS = 20} -{$SET PIC_NUMBANKS = 4} -{$SET PIC_NUMPAGES = 2} -{$SET PIC_MAXFLASH = 4096} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.6; - PORTA_RA4 : bit absolute PORTA.5; - PORTA_RA3 : bit absolute PORTA.4; - PORTA_RA2 : bit absolute PORTA.3; - PORTA_RA1 : bit absolute PORTA.2; - PORTA_RA0 : bit absolute PORTA.1; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.4; - PORTB_RB6 : bit absolute PORTB.3; - PORTB_RB5 : bit absolute PORTB.2; - PORTB_RB4 : bit absolute PORTB.1; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RABIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_TMR1GIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_TXIF : bit absolute PIR1.4; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; - T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; - T1CON_T1CKPS0 : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute T2CON.6; - T2CON_TOUTPS2 : bit absolute T2CON.5; - T2CON_TOUTPS1 : bit absolute T2CON.4; - T2CON_TOUTPS0 : bit absolute T2CON.3; - T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1L : byte absolute $0015; - CCPR1H : byte absolute $0016; - CCP1CON : byte absolute $0017; - CCP1CON_DC1 : bit absolute CCP1CON.7; - CCP1CON_B1 : bit absolute CCP1CON.6; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - RCSTA : byte absolute $0018; - RCSTA_SPEN : bit absolute RCSTA.7; - RCSTA_RX9 : bit absolute RCSTA.6; - RCSTA_SREN : bit absolute RCSTA.5; - RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_ADDEN : bit absolute RCSTA.3; - RCSTA_FERR : bit absolute RCSTA.2; - RCSTA_OERR : bit absolute RCSTA.1; - RCSTA_RX9D : bit absolute RCSTA.0; - TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; - ADCON0_CHS3 : bit absolute ADCON0.5; - ADCON0_CHS2 : bit absolute ADCON0.4; - ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_CHS0 : bit absolute ADCON0.2; - ADCON0_GO_nDONE : bit absolute ADCON0.1; - ADCON0_ADON : bit absolute ADCON0.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISA_TRISA5 : bit absolute TRISA.5; - TRISA_TRISA4 : bit absolute TRISA.4; - TRISA_TRISA2 : bit absolute TRISA.3; - TRISA_TRISA1 : bit absolute TRISA.2; - TRISA_TRISA0 : bit absolute TRISA.1; - TRISB : byte absolute $0086; - TRISB_TRISB7 : bit absolute TRISB.4; - TRISB_TRISB6 : bit absolute TRISB.3; - TRISB_TRISB5 : bit absolute TRISB.2; - TRISB_TRISB4 : bit absolute TRISB.1; - TRISC : byte absolute $0087; - TRISC_TRISC7 : bit absolute TRISC.7; - TRISC_TRISC6 : bit absolute TRISC.6; - TRISC_TRISC5 : bit absolute TRISC.5; - TRISC_TRISC4 : bit absolute TRISC.4; - TRISC_TRISC3 : bit absolute TRISC.3; - TRISC_TRISC2 : bit absolute TRISC.2; - TRISC_TRISC1 : bit absolute TRISC.1; - TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_TMR1GIE : bit absolute PIE1.7; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_RCIE : bit absolute PIE1.5; - PIE1_TXIE : bit absolute PIE1.4; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TMR2IE : bit absolute PIE1.1; - PIE1_TMR1IE : bit absolute PIE1.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; - T1GCON_TMR1GE : bit absolute T1GCON.7; - T1GCON_T1GPOL : bit absolute T1GCON.6; - T1GCON_T1GTM : bit absolute T1GCON.5; - T1GCON_T1GSPM : bit absolute T1GCON.4; - T1GCON_T1GGO_DONE : bit absolute T1GCON.3; - T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; - OSCCON : byte absolute $0090; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; - OSCCON_ICSL : bit absolute OSCCON.3; - OSCCON_ICSS : bit absolute OSCCON.2; - OSCTUNE : byte absolute $0091; - OSCTUNE_TUN5 : bit absolute OSCTUNE.5; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPADD_ADD7 : bit absolute SSPADD.7; - SSPADD_ADD6 : bit absolute SSPADD.6; - SSPADD_ADD5 : bit absolute SSPADD.5; - SSPADD_ADD4 : bit absolute SSPADD.4; - SSPADD_ADD3 : bit absolute SSPADD.3; - SSPADD_ADD2 : bit absolute SSPADD.2; - SSPADD_ADD1 : bit absolute SSPADD.1; - SSPADD_ADD0 : bit absolute SSPADD.0; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_D_nA : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_R_nW : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - WPUA : byte absolute $0095; - WPUA_WPUA5 : bit absolute WPUA.7; - WPUA_WPUA4 : bit absolute WPUA.6; - WPUA_WPUA3 : bit absolute WPUA.5; - WPUA_WPUA2 : bit absolute WPUA.4; - WPUA_WPUA1 : bit absolute WPUA.3; - WPUA_WPUA0 : bit absolute WPUA.2; - IOCA : byte absolute $0096; - IOCA_IOCA5 : bit absolute IOCA.7; - IOCA_IOCA4 : bit absolute IOCA.6; - IOCA_IOCA3 : bit absolute IOCA.5; - IOCA_IOCA2 : bit absolute IOCA.4; - IOCA_IOCA1 : bit absolute IOCA.3; - IOCA_IOCA0 : bit absolute IOCA.2; - TXSTA : byte absolute $0098; - TXSTA_CSRC : bit absolute TXSTA.7; - TXSTA_TX9 : bit absolute TXSTA.6; - TXSTA_TXEN : bit absolute TXSTA.5; - TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; - SPBRG : byte absolute $0099; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.7; - FVRCON_FVREN : bit absolute FVRCON.6; - FVRCON_TSEN : bit absolute FVRCON.5; - FVRCON_TSRNG : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; - ADCON1_ADCS2 : bit absolute ADCON1.4; - ADCON1_ADCS1 : bit absolute ADCON1.3; - ADCON1_ADCS0 : bit absolute ADCON1.2; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - IOCB : byte absolute $0116; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - ANSELA : byte absolute $0185; - ANSELA_ANSA5 : bit absolute ANSELA.5; - ANSELA_ANSA4 : bit absolute ANSELA.4; - ANSELA_ANSA2 : bit absolute ANSELA.3; - ANSELA_ANSA1 : bit absolute ANSELA.2; - ANSELA_ANSA0 : bit absolute ANSELA.1; - ANSELB : byte absolute $0186; - ANSELB_ANSB5 : bit absolute ANSELB.5; - ANSELB_ANSB4 : bit absolute ANSELB.4; - ANSELC : byte absolute $0187; - ANSELC_ANSC7 : bit absolute ANSELC.7; - ANSELC_ANSC6 : bit absolute ANSELC.6; - ANSELC_ANSC3 : bit absolute ANSELC.5; - ANSELC_ANSC2 : bit absolute ANSELC.4; - ANSELC_ANSC1 : bit absolute ANSELC.3; - ANSELC_ANSC0 : bit absolute ANSELC.2; - PMCON1 : byte absolute $018c; - PMCON1_CFGS : bit absolute PMCON1.6; - PMCON1_LWLO : bit absolute PMCON1.5; - PMCON1_FREE : bit absolute PMCON1.4; - PMCON1_WREN : bit absolute PMCON1.3; - PMCON1_WR : bit absolute PMCON1.2; - PMCON1_RD : bit absolute PMCON1.1; - PMCON2 : byte absolute $018d; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-01A:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-096:SFR'} // PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUA, IOCA - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09D-09D:SFR'} // FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB, ANSELC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, PMCON1, PMCON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:07'} // PMADRH - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '187:00'} // ANSELC - {$SET_UNIMP_BITS '18C:01'} // PMCON1 - {$SET_UNIMP_BITS '18D:00'} // PMCON2 - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : RA5/T1CKI/CLKIN - // Pin 3 : RA4/AN3/T1G/CLKOUT - // Pin 4 : RA3/MCLR/Vpp - // Pin 5 : RC5/CCP1 - // Pin 6 : RC4 - // Pin 7 : RC3/AN7 - // Pin 8 : RC6/AN8/SS - // Pin 9 : RC7/AN9/SDO - // Pin 10 : RB7/TX/CK - // Pin 11 : RB6/SCK/SCL - // Pin 12 : RB5/AN11/RX/DT - // Pin 13 : RB4/AN10/SDI/SDA - // Pin 14 : RC2/AN6 - // Pin 15 : RC1/AN5 - // Pin 16 : RC0/AN4 - // Pin 17 : RA2/AN2/T0CKI/INT - // Pin 18 : RA1/AN1/ICSPCLK/ICDCLK - // Pin 19 : RA0/AN0/ICSPDAT/ICDDAT - // Pin 20 : Vss - - - // -- RAM to PIN mapping -- - - {$MAP_RAM_TO_PIN '005:1-19,2-18,3-17,4-4,5-3,6-2'} // PORTA - {$MAP_RAM_TO_PIN '006:1-13,2-12,3-11,4-10'} // PORTB - {$MAP_RAM_TO_PIN '007:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC - - - // -- Bits Configuration -- - - // DEBUG : Debugger Mode - {$define _DEBUG_ON = $337A} // Background debugger is enabled - {$define _DEBUG_OFF = $337B} // Background debugger is disabled - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_OFF = $3379} // INTOSC Frequency is 500 kHz - {$define _PLLEN_ON = $337B} // INTOSC Frequency is 16 MHz (32x) - - // BOREN : Brown-out Reset Enable bits - {$define _BOREN_OFF = $3373} // Brown-out Reset disabled (Preconditioned State) - {$define _BOREN_NSLEEP = $337B} // Brown-out Reset enabled during operation and disabled in Sleep - {$define _BOREN_ON = $337F} // Brown-out Reset enabled - - // CP : Flash Program Memory Code Protection bit - {$define _CP_ON = $336B} // 0000h to 0FFFh code protection on - {$define _CP_OFF = $337B} // Code protection off - - // MCLRE : RA3/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $337B} // RA3/MCLR/VPP pin function is MCLR; Weak pull-up enabled. - {$define _MCLRE_OFF = $335B} // RA3/MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up disabled - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_ON = $333B} // PWRT enabled - {$define _PWRTE_OFF = $337B} // PWRT disabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_OFF = $337B} // WDT disabled - {$define _WDTE_ON = $33FB} // WDT enabled - - // FOSC : Oscillator Selection bits - {$define _FOSC_ECCLK = $337B} // EC oscillator: CLKO function on RA4/CLKO pin, CLKI on RA5/CLKI - {$define _FOSC_ECIO = $327B} // EC oscillator: I/O function on RA4/CLKO pin, CLKI on RA5/CLKI - {$define _FOSC_INTOSCCLK = $317B} // INTOSC oscillator: CLKO function on RA4/CLKO pin, I/O function on RA5/CLKI - {$define _FOSC_INTOSCIO = $307B} // INTOSCIO oscillator: I/O function on RA4/CLKO pin, I/O function on RA5/CLKI - - // VCAPEN : - {$define _VCAPEN_OFF = $0013} // All VCAP pin functions are disabled. - - // WRTEN : Flash memory self-write protection bits - {$define _WRTEN_OFF = $0017} // Write protection off - {$define _WRTEN_BOOT = $0015} // 0h to 1FFh of flash memory write protected, 200h to FFFh may be modified - {$define _WRTEN_HALF = $0013} // 0h to 7FFh of flash memory write protected, 800h to FFFh may be modified - {$define _WRTEN_FULL = $0011} // 0h to FFFh of flash memory write protected, no address may be modified - -implementation -end. diff --git a/PIC16F753.pas b/PIC16F753.pas deleted file mode 100644 index ffd57f05..00000000 --- a/PIC16F753.pas +++ /dev/null @@ -1,616 +0,0 @@ -unit PIC16F753; - -// Define hardware -{$SET PIC_MODEL = 'PIC16F753'} -{$SET PIC_MAXFREQ = 20000000} -{$SET PIC_NPINS = 14} -{$SET PIC_NUMBANKS = 4} -{$SET PIC_NUMPAGES = 1} -{$SET PIC_MAXFLASH = 2048} - -interface -var - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PORTC : byte absolute $0007; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - IOCAF : byte absolute $0008; - IOCAF_IOCAF5 : bit absolute IOCAF.5; - IOCAF_IOCAF4 : bit absolute IOCAF.4; - IOCAF_IOCAF3 : bit absolute IOCAF.3; - IOCAF_IOCAF2 : bit absolute IOCAF.2; - IOCAF_IOCAF1 : bit absolute IOCAF.1; - IOCAF_IOCAF0 : bit absolute IOCAF.0; - IOCCF : byte absolute $0009; - IOCCF_IOCCF5 : bit absolute IOCCF.5; - IOCCF_IOCCF4 : bit absolute IOCCF.4; - IOCCF_IOCCF3 : bit absolute IOCCF.3; - IOCCF_IOCCF2 : bit absolute IOCCF.2; - IOCCF_IOCCF1 : bit absolute IOCCF.1; - IOCCF_IOCCF0 : bit absolute IOCCF.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_IOCIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_IOCIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_TMR1GIF : bit absolute PIR1.6; - PIR1_ADIF : bit absolute PIR1.5; - PIR1_HLTMR2IF : bit absolute PIR1.4; - PIR1_HLTMR1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - PIR2 : byte absolute $000d; - PIR2_C2IF : bit absolute PIR2.4; - PIR2_C1IF : bit absolute PIR2.3; - PIR2_COG1IF : bit absolute PIR2.2; - PIR2_CCP1IF : bit absolute PIR2.1; - TMR1L : byte absolute $000f; - TMR1H : byte absolute $0010; - T1CON : byte absolute $0011; - T1CON_TMR1CS1 : bit absolute T1CON.7; - T1CON_TMR1CS0 : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; - T1GCON : byte absolute $0012; - T1GCON_TMR1GE : bit absolute T1GCON.7; - T1GCON_T1GPOL : bit absolute T1GCON.6; - T1GCON_T1GTM : bit absolute T1GCON.5; - T1GCON_T1GSPM : bit absolute T1GCON.4; - T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; - T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; - CCPR1L : byte absolute $0013; - CCPR1H : byte absolute $0014; - CCP1CON : byte absolute $0015; - CCP1CON_DC1B1 : bit absolute CCP1CON.5; - CCP1CON_DC1B0 : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRESL : byte absolute $001c; - ADRESH : byte absolute $001d; - ADCON0 : byte absolute $001e; - ADCON0_ADFM : bit absolute ADCON0.7; - ADCON0_CHS3 : bit absolute ADCON0.4; - ADCON0_CHS2 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; - ADCON1 : byte absolute $001f; - ADCON1_ADCS2 : bit absolute ADCON1.6; - ADCON1_ADCS1 : bit absolute ADCON1.5; - ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADPREF1 : bit absolute ADCON1.3; - OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISA_TRISA5 : bit absolute TRISA.5; - TRISA_TRISA4 : bit absolute TRISA.4; - TRISA_TRISA3 : bit absolute TRISA.3; - TRISA_TRISA2 : bit absolute TRISA.2; - TRISA_TRISA1 : bit absolute TRISA.1; - TRISA_TRISA0 : bit absolute TRISA.0; - TRISC : byte absolute $0087; - TRISC_TRISC5 : bit absolute TRISC.5; - TRISC_TRISC4 : bit absolute TRISC.4; - TRISC_TRISC3 : bit absolute TRISC.3; - TRISC_TRISC2 : bit absolute TRISC.2; - TRISC_TRISC1 : bit absolute TRISC.1; - TRISC_TRISC0 : bit absolute TRISC.0; - IOCAP : byte absolute $0088; - IOCAP_IOCAP5 : bit absolute IOCAP.5; - IOCAP_IOCAP4 : bit absolute IOCAP.4; - IOCAP_IOCAP3 : bit absolute IOCAP.3; - IOCAP_IOCAP2 : bit absolute IOCAP.2; - IOCAP_IOCAP1 : bit absolute IOCAP.1; - IOCAP_IOCAP0 : bit absolute IOCAP.0; - IOCCP : byte absolute $0089; - IOCCP_IOCCP5 : bit absolute IOCCP.5; - IOCCP_IOCCP4 : bit absolute IOCCP.4; - IOCCP_IOCCP3 : bit absolute IOCCP.3; - IOCCP_IOCCP2 : bit absolute IOCCP.2; - IOCCP_IOCCP1 : bit absolute IOCCP.1; - IOCCP_IOCCP0 : bit absolute IOCCP.0; - PIE1 : byte absolute $008c; - PIE1_TMR1GIE : bit absolute PIE1.6; - PIE1_ADIE : bit absolute PIE1.5; - PIE1_HLTMR2IE : bit absolute PIE1.4; - PIE1_HLTMR1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PIE2 : byte absolute $008d; - PIE2_C2IE : bit absolute PIE2.4; - PIE2_C1IE : bit absolute PIE2.3; - PIE2_COG1IE : bit absolute PIE2.2; - PIE2_CCP1IE : bit absolute PIE2.1; - OSCCON : byte absolute $008f; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; - OSCCON_HTS : bit absolute OSCCON.2; - OSCCON_LTS : bit absolute OSCCON.1; - FVR1CON0 : byte absolute $0090; - FVR1CON0_FVREN : bit absolute FVR1CON0.7; - FVR1CON0_FVRRDY : bit absolute FVR1CON0.6; - FVR1CON0_FVROE : bit absolute FVR1CON0.5; - FVR1CON0_FVRBUSS1 : bit absolute FVR1CON0.4; - FVR1CON0_FVRBUSS0 : bit absolute FVR1CON0.3; - FVR1CON0_FVRBUFEN : bit absolute FVR1CON0.2; - DAC1CON0 : byte absolute $0091; - DAC1CON0_DACEN : bit absolute DAC1CON0.6; - DAC1CON0_DACFM : bit absolute DAC1CON0.5; - DAC1CON0_DACOE : bit absolute DAC1CON0.4; - DAC1CON0_DACPSS1 : bit absolute DAC1CON0.3; - DAC1CON0_DACPSS0 : bit absolute DAC1CON0.2; - DAC1REFL : byte absolute $0092; - DAC1REFH : byte absolute $0093; - OPA1CON : byte absolute $0096; - OPA1CON_OPAEN : bit absolute OPA1CON.7; - OPA1CON_OPAUGM : bit absolute OPA1CON.6; - OPA1CON_OPA1NCH1 : bit absolute OPA1CON.3; - OPA1CON_OPA1NCH0 : bit absolute OPA1CON.2; - OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; - OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; - CM2CON0 : byte absolute $009b; - CM2CON0_C2ON : bit absolute CM2CON0.7; - CM2CON0_C2OUT : bit absolute CM2CON0.6; - CM2CON0_C2OE : bit absolute CM2CON0.5; - CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2ZLF : bit absolute CM2CON0.3; - CM2CON0_C2SP : bit absolute CM2CON0.2; - CM2CON0_C2HYS : bit absolute CM2CON0.1; - CM2CON0_C2SYNC : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $009c; - CM2CON1_C2INTP : bit absolute CM2CON1.7; - CM2CON1_C2INTN : bit absolute CM2CON1.6; - CM2CON1_C2PCH2 : bit absolute CM2CON1.5; - CM2CON1_C2PCH1 : bit absolute CM2CON1.4; - CM2CON1_C2PCH0 : bit absolute CM2CON1.3; - CM2CON1_C2NCH2 : bit absolute CM2CON1.2; - CM2CON1_C2NCH1 : bit absolute CM2CON1.1; - CM2CON1_C2NCH0 : bit absolute CM2CON1.0; - CM1CON0 : byte absolute $009d; - CM1CON0_C1ON : bit absolute CM1CON0.7; - CM1CON0_C1OUT : bit absolute CM1CON0.6; - CM1CON0_C1OE : bit absolute CM1CON0.5; - CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1ZLF : bit absolute CM1CON0.3; - CM1CON0_C1SP : bit absolute CM1CON0.2; - CM1CON0_C1HYS : bit absolute CM1CON0.1; - CM1CON0_C1SYNC : bit absolute CM1CON0.0; - CM1CON1 : byte absolute $009e; - CM1CON1_C1INTP : bit absolute CM1CON1.7; - CM1CON1_C1INTN : bit absolute CM1CON1.6; - CM1CON1_C1PCH2 : bit absolute CM1CON1.5; - CM1CON1_C1PCH1 : bit absolute CM1CON1.4; - CM1CON1_C1PCH0 : bit absolute CM1CON1.3; - CM1CON1_C1NCH2 : bit absolute CM1CON1.2; - CM1CON1_C1NCH1 : bit absolute CM1CON1.1; - CM1CON1_C1NCH0 : bit absolute CM1CON1.0; - CMOUT : byte absolute $009f; - CMOUT_MCOUT2 : bit absolute CMOUT.1; - CMOUT_MCOUT1 : bit absolute CMOUT.0; - LATA : byte absolute $0105; - LATA_LATA5 : bit absolute LATA.5; - LATA_LATA4 : bit absolute LATA.4; - LATA_LATA2 : bit absolute LATA.3; - LATA_LATA1 : bit absolute LATA.2; - LATA_LATA0 : bit absolute LATA.1; - LATC : byte absolute $0107; - LATC_LATC5 : bit absolute LATC.5; - LATC_LATC4 : bit absolute LATC.4; - LATC_LATC3 : bit absolute LATC.3; - LATC_LATC2 : bit absolute LATC.2; - LATC_LATC1 : bit absolute LATC.1; - LATC_LATC0 : bit absolute LATC.0; - IOCAN : byte absolute $0108; - IOCAN_IOCAN5 : bit absolute IOCAN.5; - IOCAN_IOCAN4 : bit absolute IOCAN.4; - IOCAN_IOCAN3 : bit absolute IOCAN.3; - IOCAN_IOCAN2 : bit absolute IOCAN.2; - IOCAN_IOCAN1 : bit absolute IOCAN.1; - IOCAN_IOCAN0 : bit absolute IOCAN.0; - IOCCN : byte absolute $0109; - IOCCN_IOCCN5 : bit absolute IOCCN.5; - IOCCN_IOCCN4 : bit absolute IOCCN.4; - IOCCN_IOCCN3 : bit absolute IOCCN.3; - IOCCN_IOCCN2 : bit absolute IOCCN.2; - IOCCN_IOCCN1 : bit absolute IOCCN.1; - IOCCN_IOCCN0 : bit absolute IOCCN.0; - WPUA : byte absolute $010c; - WPUA_WPUA5 : bit absolute WPUA.5; - WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA3 : bit absolute WPUA.3; - WPUA_WPUA2 : bit absolute WPUA.2; - WPUA_WPUA1 : bit absolute WPUA.1; - WPUA_WPUA0 : bit absolute WPUA.0; - WPUC : byte absolute $010d; - WPUC_WPUC5 : bit absolute WPUC.5; - WPUC_WPUC4 : bit absolute WPUC.4; - WPUC_WPUC3 : bit absolute WPUC.3; - WPUC_WPUC2 : bit absolute WPUC.2; - WPUC_WPUC1 : bit absolute WPUC.1; - WPUC_WPUC0 : bit absolute WPUC.0; - SLRCONC : byte absolute $010e; - SLRCONC_SLRC5 : bit absolute SLRCONC.2; - SLRCONC_SLRC4 : bit absolute SLRCONC.1; - PCON : byte absolute $010f; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - TMR2 : byte absolute $0110; - PR2 : byte absolute $0111; - T2CON : byte absolute $0112; - T2CON_T2OUTPS3 : bit absolute T2CON.6; - T2CON_T2OUTPS2 : bit absolute T2CON.5; - T2CON_T2OUTPS1 : bit absolute T2CON.4; - T2CON_T2OUTPS0 : bit absolute T2CON.3; - T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; - HLTMR1 : byte absolute $0113; - HLTPR1 : byte absolute $0114; - HLT1CON0 : byte absolute $0115; - HLT1CON0_H1OUTPS3 : bit absolute HLT1CON0.6; - HLT1CON0_H1OUTPS2 : bit absolute HLT1CON0.5; - HLT1CON0_H1OUTPS1 : bit absolute HLT1CON0.4; - HLT1CON0_H1OUTPS0 : bit absolute HLT1CON0.3; - HLT1CON0_H1ON : bit absolute HLT1CON0.2; - HLT1CON0_H1CKPS0 : bit absolute HLT1CON0.1; - HLT1CON1 : byte absolute $0116; - HLT1CON1_H1FES : bit absolute HLT1CON1.7; - HLT1CON1_H1RES : bit absolute HLT1CON1.6; - HLT1CON1_H1ERS2 : bit absolute HLT1CON1.4; - HLT1CON1_H1ERS1 : bit absolute HLT1CON1.3; - HLT1CON1_H1FEREN : bit absolute HLT1CON1.2; - HLT1CON1_H1REREN : bit absolute HLT1CON1.1; - HLTMR2 : byte absolute $0117; - HLTPR2 : byte absolute $0118; - HLT2CON0 : byte absolute $0119; - HLT2CON0_H2OUTPS3 : bit absolute HLT2CON0.6; - HLT2CON0_H2OUTPS2 : bit absolute HLT2CON0.5; - HLT2CON0_H2OUTPS1 : bit absolute HLT2CON0.4; - HLT2CON0_H2OUTPS0 : bit absolute HLT2CON0.3; - HLT2CON0_H2ON : bit absolute HLT2CON0.2; - HLT2CON0_H2CKPS0 : bit absolute HLT2CON0.1; - HLT2CON1 : byte absolute $011a; - HLT2CON1_H2FES : bit absolute HLT2CON1.7; - HLT2CON1_H2RES : bit absolute HLT2CON1.6; - HLT2CON1_H2ERS2 : bit absolute HLT2CON1.4; - HLT2CON1_H2ERS1 : bit absolute HLT2CON1.3; - HLT2CON1_H2FEREN : bit absolute HLT2CON1.2; - HLT2CON1_H2REREN : bit absolute HLT2CON1.1; - SLPC1CON0 : byte absolute $011e; - SLPC1CON0_SC1EN : bit absolute SLPC1CON0.6; - SLPC1CON0_SC1MRPE : bit absolute SLPC1CON0.5; - SLPC1CON0_SC1POL : bit absolute SLPC1CON0.4; - SLPC1CON0_SCS1TSS1 : bit absolute SLPC1CON0.3; - SLPC1CON0_SCS1TSS0 : bit absolute SLPC1CON0.2; - SLPC1CON0_SC1INS : bit absolute SLPC1CON0.1; - SLPC1CON1 : byte absolute $011f; - SLPC1CON1_SC1RNG : bit absolute SLPC1CON1.4; - SLPC1CON1_SC1ISET2 : bit absolute SLPC1CON1.3; - SLPC1CON1_SC1ISET1 : bit absolute SLPC1CON1.2; - SLPC1CON1_SC1ISET0 : bit absolute SLPC1CON1.1; - ANSELA : byte absolute $0185; - ANSELA_ANSA4 : bit absolute ANSELA.4; - ANSELA_ANSA2 : bit absolute ANSELA.3; - ANSELA_ANSA1 : bit absolute ANSELA.2; - ANSELA_ANSA0 : bit absolute ANSELA.1; - ANSELC : byte absolute $0187; - ANSELC_ANSC3 : bit absolute ANSELC.3; - ANSELC_ANSC2 : bit absolute ANSELC.2; - ANSELC_ANSC1 : bit absolute ANSELC.1; - ANSELC_ANSC0 : bit absolute ANSELC.0; - APFCON : byte absolute $0188; - APFCON_T1GSEL : bit absolute APFCON.1; - OSCTUNE : byte absolute $0189; - OSCTUNE_TUN4 : bit absolute OSCTUNE.4; - OSCTUNE_TUN3 : bit absolute OSCTUNE.3; - OSCTUNE_TUN2 : bit absolute OSCTUNE.2; - OSCTUNE_TUN1 : bit absolute OSCTUNE.1; - OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PMCON1 : byte absolute $018c; - PMCON1_WREN : bit absolute PMCON1.3; - PMCON1_WR : bit absolute PMCON1.2; - PMCON1_RD : bit absolute PMCON1.1; - PMCON2 : byte absolute $018d; - PMADRL : byte absolute $018e; - PMADRH : byte absolute $018f; - PMDATL : byte absolute $0190; - PMDATH : byte absolute $0191; - COG1PHR : byte absolute $0192; - COG1PHR_G1PHR3 : bit absolute COG1PHR.3; - COG1PHR_G1PHR2 : bit absolute COG1PHR.2; - COG1PHR_G1PHR1 : bit absolute COG1PHR.1; - COG1PHR_G1PHR0 : bit absolute COG1PHR.0; - COG1PHF : byte absolute $0193; - COG1PHF_G1PHF3 : bit absolute COG1PHF.4; - COG1PHF_G1PHF2 : bit absolute COG1PHF.3; - COG1PHF_G1PHF1 : bit absolute COG1PHF.2; - COG1PHF_G1PHF0 : bit absolute COG1PHF.1; - COG1BKR : byte absolute $0194; - COG1BKR_G1BKR3 : bit absolute COG1BKR.4; - COG1BKR_G1BKR2 : bit absolute COG1BKR.3; - COG1BKR_G1BKR1 : bit absolute COG1BKR.2; - COG1BKR_G1BKR0 : bit absolute COG1BKR.1; - COG1BKF : byte absolute $0195; - COG1BKF_G1BKF3 : bit absolute COG1BKF.3; - COG1BKF_G1BKF2 : bit absolute COG1BKF.2; - COG1BKF_G1BKF1 : bit absolute COG1BKF.1; - COG1BKF_G1BKF0 : bit absolute COG1BKF.0; - COG1DBR : byte absolute $0196; - COG1DBR_G1DBR3 : bit absolute COG1DBR.4; - COG1DBR_G1DBR2 : bit absolute COG1DBR.3; - COG1DBR_G1DBR1 : bit absolute COG1DBR.2; - COG1DBR_G1DBR0 : bit absolute COG1DBR.1; - COG1DBF : byte absolute $0197; - COG1DBF_G1DBF3 : bit absolute COG1DBF.3; - COG1DBF_G1DBF2 : bit absolute COG1DBF.2; - COG1DBF_G1DBF1 : bit absolute COG1DBF.1; - COG1DBF_G1DBF0 : bit absolute COG1DBF.0; - COG1CON0 : byte absolute $0198; - COG1CON0_G1EN : bit absolute COG1CON0.7; - COG1CON0_G1OE1 : bit absolute COG1CON0.6; - COG1CON0_G1OE0 : bit absolute COG1CON0.5; - COG1CON0_G1POL1 : bit absolute COG1CON0.4; - COG1CON0_G1POL0 : bit absolute COG1CON0.3; - COG1CON0_G1LD : bit absolute COG1CON0.2; - COG1CON0_G1MD : bit absolute COG1CON0.1; - COG1CON1 : byte absolute $0199; - COG1CON1_G1RDBTS : bit absolute COG1CON1.7; - COG1CON1_G1FDBTS : bit absolute COG1CON1.6; - COG1CON1_G1CS1 : bit absolute COG1CON1.1; - COG1CON1_G1CS0 : bit absolute COG1CON1.0; - COG1RIS : byte absolute $019a; - COG1RIS_G1RIHLT2 : bit absolute COG1RIS.7; - COG1RIS_G1R1HLT1 : bit absolute COG1RIS.6; - COG1RIS_G1RIT2M : bit absolute COG1RIS.5; - COG1RIS_G1RIFLT : bit absolute COG1RIS.4; - COG1RIS_C1RICCP1 : bit absolute COG1RIS.3; - COG1RIS_G1RIC2 : bit absolute COG1RIS.2; - COG1RIS_G1RIC1 : bit absolute COG1RIS.1; - COG1RSIM : byte absolute $019b; - COG1RSIM_G1RMHLT2 : bit absolute COG1RSIM.7; - COG1RSIM_G1RMHLT1 : bit absolute COG1RSIM.6; - COG1RSIM_G1RTM2M : bit absolute COG1RSIM.5; - COG1RSIM_G1RMFLT : bit absolute COG1RSIM.4; - COG1RSIM_G1RMCCP1 : bit absolute COG1RSIM.3; - COG1RSIM_G1RMC2 : bit absolute COG1RSIM.2; - COG1RSIM_G1RMC1 : bit absolute COG1RSIM.1; - COG1FIS : byte absolute $019c; - COG1FIS_G1FIHLT2 : bit absolute COG1FIS.7; - COG1FIS_G1FIHLT1 : bit absolute COG1FIS.6; - COG1FIS_G1FIT2M : bit absolute COG1FIS.5; - COG1FIS_G1FIFLT : bit absolute COG1FIS.4; - COG1FIS_G1FICCP1 : bit absolute COG1FIS.3; - COG1FIS_G1FIC2 : bit absolute COG1FIS.2; - COG1FIS_G1FIC1 : bit absolute COG1FIS.1; - COG1FSIM : byte absolute $019d; - COG1FSIM_G1FMHLT2 : bit absolute COG1FSIM.7; - COG1FSIM_G1FMHLT1 : bit absolute COG1FSIM.6; - COG1FSIM_G1FMT2M : bit absolute COG1FSIM.5; - COG1FSIM_G1FMFLT : bit absolute COG1FSIM.4; - COG1FSIM_G1FMCCP1 : bit absolute COG1FSIM.3; - COG1FSIM_G1FMC2 : bit absolute COG1FSIM.2; - COG1FSIM_G1FMC1 : bit absolute COG1FSIM.1; - COG1ASD0 : byte absolute $019e; - COG1ASD0_G1ASDE : bit absolute COG1ASD0.7; - COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; - COG1ASD0_G1ASD1L1 : bit absolute COG1ASD0.5; - COG1ASD0_G1ASD1L0 : bit absolute COG1ASD0.4; - COG1ASD0_G1ASD0L1 : bit absolute COG1ASD0.3; - COG1ASD0_G1ASD0L0 : bit absolute COG1ASD0.2; - COG1ASD1 : byte absolute $019f; - COG1ASD1_G1ASDSHLT2 : bit absolute COG1ASD1.5; - COG1ASD1_G1ASDSHLT1 : bit absolute COG1ASD1.4; - COG1ASD1_G1ASDSC2 : bit absolute COG1ASD1.3; - COG1ASD1_G1ASDSC1 : bit absolute COG1ASD1.2; - COG1ASD1_G1ASDSFLT : bit absolute COG1ASD1.1; - - - // -- Define RAM state values -- - - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-00D:SFR'} // PORTC, IOCAF, IOCCF, PCLATH, INTCON, PIR1, PIR2 - {$SET_STATE_RAM '00F-015:SFR'} // TMR1L, TMR1H, T1CON, T1GCON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01C-01F:SFR'} // ADRESL, ADRESH, ADCON0, ADCON1 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-08D:SFR'} // TRISC, IOCAP, IOCCP, PCLATH, INTCON, PIE1, PIE2 - {$SET_STATE_RAM '08F-093:SFR'} // OSCCON, FVR1CON0, DAC1CON0, DAC1REFL, DAC1REFH - {$SET_STATE_RAM '096-096:SFR'} // OPA1CON - {$SET_STATE_RAM '09B-09F:SFR'} // CM2CON0, CM2CON1, CM1CON0, CM1CON1, CMOUT - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, LATA - {$SET_STATE_RAM '107-11A:SFR'} // LATC, IOCAN, IOCCN, PCLATH, INTCON, WPUA, WPUC, SLRCONC, PCON, TMR2, PR2, T2CON, HLTMR1, HLTPR1, HLT1CON0, HLT1CON1, HLTMR2, HLTPR2, HLT2CON0, HLT2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // SLPC1CON0, SLPC1CON1 - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA - {$SET_STATE_RAM '187-19F:SFR'} // ANSELC, APFCON, OSCTUNE, PCLATH, INTCON, PMCON1, PMCON2, PMADRL, PMADRH, PMDATL, PMDATH, COG1PHR, COG1PHF, COG1BKR, COG1BKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '008:3F'} // IOCAF - {$SET_UNIMP_BITS '009:3F'} // IOCCF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:CF'} // PIR1 - {$SET_UNIMP_BITS '00D:35'} // PIR2 - {$SET_UNIMP_BITS '011:F0'} // T1CON - {$SET_UNIMP_BITS '012:03'} // T1GCON - {$SET_UNIMP_BITS '015:3F'} // CCP1CON - {$SET_UNIMP_BITS '01E:BF'} // ADCON0 - {$SET_UNIMP_BITS '01F:71'} // ADCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '088:3F'} // IOCAP - {$SET_UNIMP_BITS '089:3F'} // IOCCP - {$SET_UNIMP_BITS '08C:CF'} // PIE1 - {$SET_UNIMP_BITS '08D:35'} // PIE2 - {$SET_UNIMP_BITS '08F:36'} // OSCCON - {$SET_UNIMP_BITS '090:F9'} // FVR1CON0 - {$SET_UNIMP_BITS '091:EC'} // DAC1CON0 - {$SET_UNIMP_BITS '096:9F'} // OPA1CON - {$SET_UNIMP_BITS '09F:03'} // CMOUT - {$SET_UNIMP_BITS '105:37'} // LATA - {$SET_UNIMP_BITS '107:3F'} // LATC - {$SET_UNIMP_BITS '108:3F'} // IOCAN - {$SET_UNIMP_BITS '109:3F'} // IOCCN - {$SET_UNIMP_BITS '10C:3F'} // WPUA - {$SET_UNIMP_BITS '10D:3F'} // WPUC - {$SET_UNIMP_BITS '10E:30'} // SLRCONC - {$SET_UNIMP_BITS '10F:03'} // PCON - {$SET_UNIMP_BITS '111:00'} // PR2 - {$SET_UNIMP_BITS '112:7B'} // T2CON - {$SET_UNIMP_BITS '114:00'} // HLTPR1 - {$SET_UNIMP_BITS '115:7B'} // HLT1CON0 - {$SET_UNIMP_BITS '116:DF'} // HLT1CON1 - {$SET_UNIMP_BITS '119:7F'} // HLT2CON0 - {$SET_UNIMP_BITS '11A:DF'} // HLT2CON1 - {$SET_UNIMP_BITS '11E:BD'} // SLPC1CON0 - {$SET_UNIMP_BITS '11F:1F'} // SLPC1CON1 - {$SET_UNIMP_BITS '185:17'} // ANSELA - {$SET_UNIMP_BITS '187:0F'} // ANSELC - {$SET_UNIMP_BITS '188:10'} // APFCON - {$SET_UNIMP_BITS '189:1F'} // OSCTUNE - {$SET_UNIMP_BITS '18C:07'} // PMCON1 - {$SET_UNIMP_BITS '18F:07'} // PMADRH - {$SET_UNIMP_BITS '191:3F'} // PMDATH - {$SET_UNIMP_BITS '192:0F'} // COG1PHR - {$SET_UNIMP_BITS '193:0F'} // COG1PHF - {$SET_UNIMP_BITS '194:0F'} // COG1BKR - {$SET_UNIMP_BITS '195:0F'} // COG1BKF - {$SET_UNIMP_BITS '196:0F'} // COG1DBR - {$SET_UNIMP_BITS '197:0F'} // COG1DBF - {$SET_UNIMP_BITS '198:FD'} // COG1CON0 - {$SET_UNIMP_BITS '199:C3'} // COG1CON1 - {$SET_UNIMP_BITS '19A:7F'} // COG1RIS - {$SET_UNIMP_BITS '19B:7F'} // COG1RSIM - {$SET_UNIMP_BITS '19C:7F'} // COG1FIS - {$SET_UNIMP_BITS '19D:7F'} // COG1FSIM - {$SET_UNIMP_BITS '19E:FC'} // COG1ASD0 - {$SET_UNIMP_BITS '19F:1F'} // COG1ASD1 - - - // -- PIN mapping -- - - // Pin 1 : Vdd - // Pin 2 : RA5/T1CKI/CLKIN - // Pin 3 : RA4/T1G/AN3/CLKOUT - // Pin 4 : RA3/T1G/Vpp/MCLR - // Pin 5 : RC5/COG1OUT0/CCP1 - // Pin 6 : RC4/COG1OUT1/C2OUT - // Pin 7 : RC3/AN7/C1IN3-/C2IN3- - // Pin 8 : RC2/SLPCIN/AN6/OPA1OUT/C1IN2-/C2IN2- - // Pin 9 : RC1/OPA1IN-/AN5/C1IN1-/C2IN1- - // Pin 10 : RC0/OPA1IN+/AN4/C2IN0+ - // Pin 11 : RA2/INT/C1OUT/T0CKI/AN2/COG1FLT - // Pin 12 : RA1/C1IN0-/C2IN0-/AN1/VREF+/FVRIN/ICSPCLK - // Pin 13 : RA0/C1IN0+/AN0/DACOUT/FVROUT/ICSPDAT - // Pin 14 : Vss - - - // -- RAM to PIN mapping -- - - {$MAP_RAM_TO_PIN '005:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA - {$MAP_RAM_TO_PIN '007:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC - - - // -- Bits Configuration -- - - // DEBUG : Debug Mode Enable bit - {$define _DEBUG_OFF = $3F79} // Debug mode disabled - {$define _DEBUG_ON = $3F78} // Debug mode enabled - - // CLKOUTEN : Clock Out Enable bit - {$define _CLKOUTEN_OFF = $3F7B} // CLKOUT function disabled. CLKOUT pin acts as I/O - {$define _CLKOUTEN_ON = $3F79} // CLKOUT function enabled. CLKOUT pin is CLKOUT - - // WRT : Flash Program Memory Self Write Enable bit - {$define _WRT_OFF = $3F7D} // Flash self-write protection off - {$define _WRT_FOURTH = $3F79} // 000h to 0FFh self-write protected - {$define _WRT_HALF = $3F75} // 000h to 1FFh self-write protected - {$define _WRT_ALL = $3F71} // 000h to 3FFh self-write protected - - // BOREN : Brown-out Reset Enable bits - {$define _BOREN_EN = $3F79} // BOR enabled - {$define _BOREN_SLEEP_DIS = $3F69} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_DIS = $3F49} // BOR disabled - - // CP : Code Protection bit - {$define _CP_OFF = $3F79} // Program memory code protection is disabled - {$define _CP_ON = $3F39} // Program memory code protection is enabled - - // MCLRE : MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FF9} // MCLR pin is MCLR function with internal weak pullup - {$define _MCLRE_OFF = $3F79} // MCLR pin is alternate function - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F79} // Power-up Timer disabled - {$define _PWRTE_ON = $3E79} // Power-up Timer enabled - - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F79} // Watchdog Timer enabled - {$define _WDTE_OFF = $3D79} // Watchdog Timer disabled - - // FOSC0 : FOSC: Oscillator Selection bit - {$define _FOSC0_EC = $3F79} // EC oscillator mode. CLKIN function on RA5/CLKIN - {$define _FOSC0_INT = $3B79} // Internal oscillator mode. I/O function on RA5/CLKIN - -implementation -end. diff --git a/PicPas-Mac.dmg b/PicPas-Mac.dmg index 9db81dea..35ca165b 100644 Binary files a/PicPas-Mac.dmg and b/PicPas-Mac.dmg differ diff --git a/PicPas-linux b/PicPas-linux index 3a8009ad..2ed8637f 100644 Binary files a/PicPas-linux and b/PicPas-linux differ diff --git a/PicPas-linux.xml b/PicPas-linux.xml index 984b81dc..fcbf8fad 100644 --- a/PicPas-linux.xml +++ b/PicPas-linux.xml @@ -1,20 +1,21 @@ - - + - + + + + + - + - - @@ -44,8 +45,11 @@ - diff --git a/PicPas-win32.exe b/PicPas-win32.exe deleted file mode 100644 index a0ee3294..00000000 Binary files a/PicPas-win32.exe and /dev/null differ diff --git a/PicPas-win32.xml b/PicPas-win32.xml deleted file mode 100644 index 98313f2f..00000000 --- a/PicPas-win32.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PicPas-win64.exe b/PicPas-win64.exe new file mode 100644 index 00000000..80702742 Binary files /dev/null and b/PicPas-win64.exe differ diff --git a/PicPas-win64.xml b/PicPas-win64.xml new file mode 100644 index 00000000..2321753f --- /dev/null +++ b/PicPas-win64.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index c20770aa..9d1dc0be 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=7LKYWG9LXNQ9C&lc=ES&item_name=Tito%20Hinostroza&item_number=2153&no_note=0&cn=Dar%20instrucciones%20especiales%20al%20vendedor%3a&no_shipping=2¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted) -PicPas 0.8.4 +PicPas 0.9.0 ============ -Multi-platform Pascal cross-compiler for Microchip PIC16F microcontrollers. +Multi-platform Pascal cross-compiler for Microchip 8 bits PIC microcontrollers. -![Tito's Terminal](http://blog.pucp.edu.pe/blog/tito/wp-content/uploads/sites/610/2017/04/PicPas.png "PicPas IDE") +![PicPas IDE](http://blog.pucp.edu.pe/blog/tito/wp-content/uploads/sites/610/2017/04/PicPas.png "PicPas IDE") -PicPas is a Pascal compiler, written in Lazarus, which generates executable code for midrange PIC microcontrollers (the 16F series). +PicPas is a Pascal compiler and IDE, written in Lazarus, which generates executable code for Baseline and Mid-range PIC microcontrollers. No additional libraries or software required to compile. PicPas generates the *.hex file directly. @@ -17,15 +17,15 @@ PicPas works with a simplified version of the Pascal language, that has been ada Currently, it only supports basic types. -It includes a very complete IDE to facilitate the development. +It includes a complete IDE/debugger/simulator to facilitate the development. -The compiler includes optimization options so the code obtained is fairly compact, as that could generate any commercial compiler. +The PicpPas compiler includes advanced optimization options so the code obtained is generally more compact than the obtained with other compilers. ## Installation PicPas doesn't need installation, and have not dependencies, except the commons of the operative system, where it's runnig. -To run, it's only needed to download the folder from GitHub. There is a compiled Windows-32 version (PicPas-win32.exe) and a Ubuntu version (PicPas-linux). +To run, it's only needed to download the folder from GitHub. There is compiled binaries for Windows-64 version (PicPas-win64.exe), Ubuntu version (PicPas-linux) and a Mac version (PicPas-Mac.dmg). If it's required other platform, it need to be compiled from the source code. @@ -38,11 +38,9 @@ As an example the following code, is to blink a LED on port B: ``` {Sample program to blink a Led on PORTB.7} program BlinkLed; -{$PROCESSOR PIC16F84A} +uses PIC16F84A; {$FREQUENCY 8MHZ} var - PORTB : BYTE absolute $06; - TRISB : BYTE absolute $86; pin: bit absolute PORTB.7; begin TRISB := 0; //all outputs @@ -53,7 +51,57 @@ begin end. ``` -PicPas has not special libraries yet, so the special register names, must be defined in the program, or a unit containing this definitions can be created. +The processor target is defined including the correspondent unit in the USES section. + +The CPU clock is defined using the directive {$FREQUENCY } and must be after the USES section. + +## Devices supported + +Almost all the Mid-range and Baseline PIC devices are supported: + +### BASELINE DEVICES: + +PIC10F200 PIC10F200 PIC10F202 PIC10F204 PIC10F206 PIC10F220 PIC10F222 + +PIC12F508 PIC12F509 PIC12F510 PIC12F519 + +PIC16F505 PIC16F506 PIC16F526 PIC16F527 PIC16F54 PIC16F57 PIC16F59 + +### MID-RANGE DEVICES: + +PIC10F320 PIC10F322 + +PIC12F609 PIC12F615 PIC12F617 PIC12F629 PIC12F635 PIC12F675 PIC12F683 +PIC12F752 + +PIC16F73 PIC16F74 PIC16F76 PIC16F77 PIC16F83 PIC16F84 PIC16F87 PIC16F88 + +PIC16F610 PIC16F616 PIC16F627 PIC16F627A PIC16F628 PIC16F628A PIC16F630 +PIC16F631 PIC16F636 PIC16F639 PIC16F648A PIC16F676 PIC16F677 PIC16F684 +PIC16F685 PIC16F687 PIC16F688 PIC16F689 PIC16F690 + +PIC16F707 PIC16F716 PIC16F720 PIC16F721 PIC16F722 PIC16F722A PIC16F723 +PIC16F723A PIC16F724 PIC16F726 PIC16F727 PIC16F737 PIC16F747 PIC16F753 +PIC16F767 PIC16F777 PIC16F785 + +PIC16F818 PIC16F819 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 +PIC16F874A PIC16F876 PIC16F877 PIC16F882 PIC16F883 PIC16F884 PIC16F886 +PIC16F887 + +PIC16F913 PIC16F914 PIC16F916 PIC16F917 PIC16F946 + +Support are implemented using units. So if we need compile to the PIC16f628A, we write: + +``` +program anything; +uses PIC16F628A; +begin + ... +end. +``` + +There is not yet support for Enhanced Mid-range, or the PIC18 High-preformance families of PIC. + ## IDE @@ -75,16 +123,18 @@ Some features of the IDE are: • Code tools for completion and navigation. -• Check syntax in ¡¡¡REAL TIME!!!. +• Check syntax in REAL TIME!!!. • Several setting options. -• Translated to english/spanish and german. +• Translated to english, french, spanish and german. ![Tito's Terminal](http://blog.pucp.edu.pe/blog/tito/wp-content/uploads/sites/610/2017/06/PicPas-0.7_en.png "PicPas with dark skin") ![Tito's Terminal](http://blog.pucp.edu.pe/blog/tito/wp-content/uploads/sites/610/2017/11/PicPas-Linux.jpg "PicPas for Ubuntu") +![Tito's Terminal](http://blog.pucp.edu.pe/blog/tito/wp-content/uploads/sites/610/2018/05/PicPasMac.jpg "PicPas for Mac") + ## Debugger/Simulator @@ -487,6 +537,56 @@ Subtrac : p1 - 5 ## Directives +Directives are special instructions inserted in the source code that are interpreted and executed by the compiler when compiling the source code (in compilation time). + +### Directive Programming Language + +Directives have their own programmig language. It's a simple and interpreted language (with instructions, variables, operators and conditional structures) what is different from Pascal. + +Some features of this programming language are: + +* It's case insensitive, like Pascal is. +* Instructions are contained in one single line and are delimited by {$ … } +* It's not a typed language. Variables can change their type and value in execution and different type variables can be assigned. +* Variables don't need to be defined before using. +* There are only two types for variables: strings and numbers. + +### Variables + +Variables are assigned with the instruction $SET: + +``` +{$SET x = 1} +{$SET y = 1 + x} +{$SET x = 'I'm now a string'} +``` + +$SET, is not a declaration, but an assignment. First time a variable is assigned, it's created. + +Content of a variable, can be shown using instructions like $MSGBOX oo $INFO: + +{$MSGBOX 'x is:' + x} + +### System Variables + +There are some system variables, accessible from the directives language. They are: + +{$MSGBOX PIC_MODEL} -> Shows the PIC model defined. + +{$MSGBOX PIC_FREQUEN} -> Shows the Clock frequency. + +{$MSGBOX PIC_MAXFREQ} -> Shows the Max Clock frequency for the device. + +{$MSGBOX PIC_NUMBANKS} -> Shows the RAM banks number for the device. + +{$MSGBOX SYN_MODE} -> Shows the syntax Mode of the compiler. + +{$MSGBOX CURRBANK} -> Shows the current RAM bank. + +(*) To see the complete list, check the User Manual. + +### List of Directives + The next directives are supported by PicPas: #### $PROCESSOR @@ -497,40 +597,14 @@ Specify the target device model of the microcontroller. Example: {$PROCESSOR PIC16F628A} ``` -The devices supported by now are: - - PIC12F629 - PIC12F675 - PIC12F629A - PIC12F675A - PIC16C63 - PIC16CR63 - PIC16C65 - PIC16C65A - PIC16CR65 - PIC16F72 - PIC16F83 - PIC16CR83 - PIC16F84 - PIC16CR84 - PIC16F84A - PIC16F870 - PIC16F871 - PIC16F872 - PIC16F873 - PIC16F873A - PIC16F874 - PIC16F874A - PIC16F876 - PIC16F876A - PIC16F877 - PIC16F877A - PIC16F887 - PIC16F627A - PIC16F628A - PIC16F648A - - New devices can be configured, using directives. +The devices supported using $PROCESSOR directive are: + +Baseline: PIC10F200 PIC10F202 PIC10F204 PIC10F206 + +Mid-Range: PIC16C63 PIC16CR63 PIC16C65 PIC16C65A PIC16CR65 PIC16F72 PIC16F83 PIC16CR83 PIC16F84 PIC16CR84 PIC16F84A PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F873A PIC16F874 PIC16F874A PIC16F876 PIC16F876A PIC16F877 PIC16F877A PIC16F887 PIC16F627A PIC16F628A PIC16F648A + +This directive is a short form to define a device, however it's preferred to define devices using directives, like $SET_STATE_RAM, $SET_MAPPED_RAM, $CLEAR_STATE_RAM. + #### $FREQUENCY @@ -618,6 +692,10 @@ Defines the name of the output binary file *.hex. When relative path is used, the file will be created in the same folder the Pascal program is. +If it's not defined the name of the *.hex file, it will be used the name of the program/unit compiled. So if the program is called "myprogram" (and the file is "myprogram.pas"), then the *.hex file will be "myprogram.hex". + +Directive {$OUTPUTHEX}, can be placed in any part of the source code and can be used several times. If so, the output file will be the defined by the last directive. + #### $DEFINE Define symbols or macros @@ -674,10 +752,29 @@ Variables supports expresions: Unlike macros, variables values are solved when assigned. Macros values, are solved when macro is referenced. -#### $IFDEF, $IFNDEF, $ELSE, $ENDIF +#### $IFDEF, $ELSE, $ENDIF This directives let us to define conditional compilation blocks: +Directive $IFDEF check the existence of some macro or variable and according to that, compile or not some blocks of code. + +It has two forms: + +``` +{$IFDEF } +... +{$ENDIF} +``` + +``` +{$IFDEF } +... +{$ELSE} +... +{$ENDIF} +``` +The next code is an example of use: + ``` {$DEFINE MyPinOut=PORTB.0} uses PIC16F84A; @@ -691,6 +788,10 @@ begin end. ``` +#### $IFNDEF + +This directive is the opposite version of $IFDEF. + ``` {$DEFINE MyPinOut=PORTB.0} uses PIC16F84A; @@ -703,22 +804,248 @@ begin end. ``` -#### $IF, $IFNOT +#### $IF This directives let us to define conditional compilation blocks, using expressions: +Directive $IF evaluates an expression, and according to the result, compile or omit some blocks of code. + +The common syntax is: + ``` -{$IF valor>255} +{$IF } +... +{$ENDIF} +``` + +A long way can be used too: + +``` +{$IF } +... +{$ELSE} +... +{$ENDIF} +``` + +The following code shows an example of use: + +``` +{$IF value>255} var x: word; {$ELSE} var x: byte; {$ENDIF} ``` -#### $SET_STATE_RAM, $SET_MAPPED_RAM, $CLEAR_STATE_RAM +As there is not a boolean type, a boolean expression returns the number 1 when the expression is TRUE and 0 when the expression is FALSE. -These directives let us to define the RAM memory hardware state. In conjunction with system variables, they can define custom microcontroller hardware: +On the other side, instruction {$IF} will consider as TRUE, any number different from 0, or any string not empty. +#### $IFNOT + +It's the opposite version of $IF. + +``` +{$IFNOT value>255} +var x: byte; +{$ELSE} +var x: word; +{$ENDIF} +``` + +#### $SET_STATE_RAM + +Set the state of the RAM memory for the current device. + +The state of a byte of RAM can have 3 values: + +* SFR: Special Function Register, like STATUS or TRISB. +* GPR: General Purpose Register. Used as free memory for the user. +* NIM: Not implemented cell. + +$SET_STATE_RAM, let us to define the state of the RAM using a range of addresses. + +The syntax of $SET_STATE_RAM is: + +``` +{$SET_STATE_RAM } +``` + +COmmands are separaed by commas. One command have teh syntax: + +-: + +One valid example, for this directive, would be: + +``` +{$SET_STATE_RAM '000-00B:SFR'}; +``` + +That indicates the bytes in RAM from $000 to $00B are SFR. + +Addresses are expressed always in hexadecimal. + +Other example are: + +``` +//Multiple commands in one directive +{$SET_STATE_RAM '000-00B:SFR, 00C-04F:GPR'} +//Set state for all banks +{$SET_STATE_RAM '000-00C:SFR:ALL'} +//Set state for all banks and map them to bank 0 +{$SET_STATE_RAM '000-00C:SFR:ALLMAPPED'} +``` + +#### $SET_MAPPED_RAM + +Define mapped regions of the RAM memory, for the current device. + +RAM memory can be implemented as independent or mapped RAM. Mapped RAM usually points to other RAM bank. One register can be mapped in several banks. That's the case of registers like STATUS or INTCON, mapped in all the banks of the RAM. + +$SET_MAPPED_RAM, can map ranges of RAM in register GPR and SFR. It has not sense to map unimplemented RAM. + +The syntax for $SET_MAPPED_RAM is: + +``` +{$SET_MAPPED_RAM } +``` + +Commands are separated by commas. One command have the form: + +``` +Start address>-: +``` + +Target bank can be: + +bnk0, bnk1, bnk2 or bnk3 for the Mid-Range PIC core devices (14 bits instruction). +bnk0, bnk1, bnk2, bnk3, bnk4, bnk5, bnk6 or bnk7 for the Baseline PIC core devices (12 bits). + +A valid example, for a Mid-Range PIC would be: + +{$SET_MAPPED_RAM ' 080-080:bnk0'}; + +This instruction defines the RAM address $080 as a register mapped at the bank 0, corresponding to the address 0x00. + +Addresses are expresed always as a 3 digit hexadecimal number. + +#### $CLEAR_STATE_RAM + +USed to define the initial state of RAM memory. + +$CLEAR_STATE_RAM, set the state of all the RAM as unimplemented, clearing all previous setting. + +It's used before of starting to define the RAM for a device, using the directives $SET_STATE_RAM and $SET_MAPPED_RAM. + + +#### $RESET_PINS + +Clear all the configuration for the pines defined in the microcontroller. + +``` +{$RESET_PINS} +``` + +This directive is generally used before of defining the microcontollers pins with the directive {$SET_PIN_NAME} + + +#### $SET_PIN_NAME + +Define the name for a specified pin of the microcontroller. + +The syntax is: + +``` +{$SET_PIN_NAME :} +``` + +One example would be: + +``` +{$SET_PIN_NAME '2:VDD'} +``` + +This definition would make the label "VDD" will appear in the pin 2 of the graphic representation of the PIC, when using the debugger., + +#### $MAP_RAM_TO_PIN + +Assign some bits of the RAM, to physical pins of a microcontroller. This is used to map the registers GPIO, PORTA, PORTB, …, to pins of the device. + +This assignment is needed to a have a better visual effect in the simulation of the PIC, when using the debugger. This way we will see the pin highlighted when it has a high level (bit set to 1). + +The syntax of $MAP_RAM_TO_PIN is: + +``` +{$MAP_RAM_TO_PIN
:} +``` + +Associations are separated by commas. One association have the form: + +``` +- +``` + +One valid example would be: + +``` +{$MAP_RAM_TO_PIN '005:0-17,1-18,2-1,3-2,4-3'}; +``` + +This instruction indicates the bits 0, 1, 2, 3 and 4, of the address $05, are mapped to the pins 17, 18, 1, 2 y 3 respectively. + +Values for number of bit and pins are in decimal. + +#### $SET_UNIMP_BITS + +Defines bits not implemented in some specific positions of the RAM. + +This setting is used to model the RAM in a accurate way (to the bit level) in order to have a better and realistic simulation of the device. + +The syntax of $SET_UNIMP_BITS is: + +``` +{$SET_UNIMP_BITS } +``` + +The commands are separated by commas. One command have the form: + +``` +
: +``` + +The address and the mask are expressed in hexadecimal using 3 and 2 digits respectively. + +One valid example would be: + +``` +{$SET_UNIMP_BITS '005:1F'}; +``` + +And indicates the bits 5, 6 and 7, of the position $005 (PORTA) are not implemented in the hardware and will be read always as 0. + +#### $SET_UNIMP_BITS1 + +Defines bits not implemented in some specific positions of the RAM. + +This instruction works in the same way of $SET_UNIMP_BITS, but the unimplemented bits will be read always as 1, instead of 0. + +One valid example would be: + +{$SET_UNIMP_BITS1 '004:E0'}; + +And indicates the bits 5, 6 and 7, of the position $004 are not implemented in the hardware and will be read always as 1. + +(*) For more information about directives, check the User Manual. + +### Defining custom devices + +PicPas have complete support to define the hardware of microcontrollers, using directives. + +Practically all devices from Baseline and Mid-Range families can be defined in this way. + +Following, there is an example of defining a microcontoller similar to the PIC16F84: + ``` //Define hardware {$SET PIC_MODEL='MY_PIC'} @@ -735,29 +1062,13 @@ These directives let us to define the RAM memory hardware state. In conjunction //Define mapped RAM {$SET_MAPPED_RAM '080-080:bnk0, 082-084:bnk0, 08A-08B:bnk0'} {$SET_MAPPED_RAM '08C-0CF:bnk0'} +//Define unimplemented bits in RAM +{$SET_UNIMP_BITS '003:3F,083:3F,005:1F,085:1F,00A:1F,08A:1F'} ``` -(*) For more information, check the User Manual. - -#### SYSTEM VARIABLES - -There are some system variables, accessible from the directives language. They are: +To see more examples of definig devices, check the folders /devices10 and /devices16. -{$MSGBOX PIC_MODEL} -> Shows the PIC model defined. - -{$MSGBOX PIC_FREQUEN} -> Shows the Clock frequency. - -{$MSGBOX PIC_MAXFREQ} -> Shows the Max Clock frequency for the device. - -{$MSGBOX PIC_NUMBANKS} -> Shows the RAM banks number for the device. - -{$MSGBOX SYN_MODE} -> Shows the syntax Mode of the compiler. - -{$MSGBOX CURRBANK} -> Shows the current RAM bank. - -(*) To see the complete list, check the User Manual. - -## Limitations +## PicPas Limitations • Only basic types are implemented: bit, byte, char, boolean, word an dword(limited support). @@ -793,7 +1104,7 @@ All of them, must be availables on the GitHub. Check the versions used. These libraries don't include package. They are only files in folders that need to be included when compiling PicPas. -PicPas has been compiled, using the version 1.6.2 of Lazarus. Tested in Windows and Ubuntu. +PicPas has been compiled, using the version 1.8.0 of Lazarus. Tested in Windows, Ubuntu and Mac. To have more information about the compiler, check the Technical Documentation (Only in spanish by now). diff --git a/Source/CodeTools.pas b/Source/CodeTools.pas index 7cf36fae..337496f6 100644 --- a/Source/CodeTools.pas +++ b/Source/CodeTools.pas @@ -5,16 +5,14 @@ interface uses Classes, SysUtils, LCLType, LCLProc, SynEdit, SynEditHighlighter, LazUTF8, MisUtils, SynFacilCompletion, SynFacilHighlighter, SynFacilBasic, XpresBas, - XpresElementsPIC, FrameEditView, FrameSyntaxTree, Parser, - Globales; + XpresElementsPIC, FrameEditView, CompBase, Globales; type { TCodeTool } TCodeTool = class private //Referencias importantes fraEdit : TfraEditView; - cxp : TCompiler; - fraSynTree: TfraSyntaxTree; + cxp : TCompilerBase; opEve0: TFaOpenEvent; //Para pasar parámetro a cxpTreeElemsFindElement´() public procedure ReadCurIdentif(out tok: string; out tokType: integer; out @@ -24,6 +22,7 @@ TCodeTool = class private //Completado de código procedure cxpTreeElemsFindElement(elem: TxpElement); procedure AddListUnits(OpEve: TFaOpenEvent); + procedure CopyListItems(OpEve, OpEveSrc: TFaOpenEvent); procedure FieldsComplet(ident: string; opEve: TFaOpenEvent; tokPos: TSrcPos); procedure Fill_IFtemplate(opEve: TFaOpenEvent); procedure Fill_THENtemplate(opEve: TFaOpenEvent); @@ -39,8 +38,8 @@ TCodeTool = class public procedure SetCompletion(ed: TSynEditor); public //Inicialización - constructor Create(fraEdit0: TfraEditView; cxp0: TCompiler; - fraSynTree0: TfraSyntaxTree); + procedure SetCompiler(cxp0: TCompilerBase); + constructor Create(fraEdit0: TfraEditView); end; implementation @@ -183,7 +182,8 @@ procedure TCodeTool.AddListUnits(OpEve: TFaOpenEvent); SearchRec: TSearchRec; begin if OpEve=nil then exit; - directorio := rutUnits; + //Directorio /units + directorio := patUnits; if FindFirst(directorio + '\*.pas', faDirectory, SearchRec) = 0 then begin repeat nomArc := SysToUTF8(SearchRec.Name); @@ -197,6 +197,30 @@ procedure TCodeTool.AddListUnits(OpEve: TFaOpenEvent); until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; + //Directorio /devices + directorio := cxp.devicesPath; + if FindFirst(directorio + '\*.pas', faDirectory, SearchRec) = 0 then begin + repeat + nomArc := SysToUTF8(SearchRec.Name); + if SearchRec.Attr and faDirectory = faDirectory then begin + //directorio + end else begin //archivo + //Argega nombre de archivo + nomArc := copy(nomArc, 1, length(nomArc)-4); + opEve.AddItem(nomArc, -1); + end; + until FindNext(SearchRec) <> 0; + FindClose(SearchRec); + end; + +end; +procedure TCodeTool.CopyListItems(OpEve, OpEveSrc: TFaOpenEvent); +var + it : TFaCompletItem; +begin + for it in OpEveSrc.Items do begin + opEve.AddItem(it.Caption, -1); + end; end; procedure TCodeTool.FieldsComplet(ident: string; opEve: TFaOpenEvent; tokPos: TSrcPos); @@ -223,7 +247,7 @@ procedure TCodeTool.FieldsComplet(ident: string; opEve: TFaOpenEvent; if ele.idClass = eltVar then begin //Es una variable, vemos el tipo xVar := TxpEleVar(ele); - if xVar.typ = typByte then begin + if xVar.typ = cxp.typByte then begin opEve.AddItem('bit0', 11); opEve.AddItem('bit1', 11); opEve.AddItem('bit2', 11); @@ -233,11 +257,11 @@ procedure TCodeTool.FieldsComplet(ident: string; opEve: TFaOpenEvent; opEve.AddItem('bit6', 11); opEve.AddItem('bit7', 11); end; - if xVar.typ = typWord then begin + if xVar.typ = cxp.typWord then begin opEve.AddItem('high', 11); opEve.AddItem('low' , 11); end; - if xVar.typ = typDWord then begin + if xVar.typ = cxp.typDWord then begin opEve.AddItem('Low', 11); opEve.AddItem('High', 11); opEve.AddItem('Extra', 11); @@ -302,7 +326,7 @@ procedure TCodeTool.Fill_SpecialIdentif(opEve: TFaOpenEvent; hl: TSynFacilComple end; procedure TCodeTool.GeneralIdentifierCompletion(opEve: TFaOpenEvent; curEnv: TFaCursorEnviron; out Cancel: boolean); -{La idea de este métod es implementar el completado de un identifcador, en cualquier +{La idea de este método es implementar el completado de un identifcador, en cualquier parte en que se encuentre el cursor. Pero actualmente solo se aplica para cualquier bloque que no sea el bloque principal (Cuerpo del programa principal o cuerpo de procedimientos). EL completado del blooue @@ -347,12 +371,15 @@ procedure TCodeTool.GeneralIdentifierCompletion(opEve: TFaOpenEvent; ele := cxp.TreeElems.GetElementAt(curPos); if ele = nil then begin //No identifica la posición actual - exit; + Cancel := false; //Deja que siga el filtrado, porque hay items agregados + exit; //Sale porque no se reconcoe al elemento sintáctico actual end; cxp.TreeElems.curNode := ele; //Se posiciona en ese nodo //Realiza la búsqueda con FindFirst, usando evento OnFindElement opEve0 := opEve; //Para que el evento identifique al opEve + //Configura evento oara que agregue elemento encontrado a opEve0. cxp.TreeElems.OnFindElement := @cxpTreeElemsFindElement; + //Hace la búsqueda a todos los elementos accesibles desde la posición actual. cxp.TreeElems.FindFirst('#'); //Nunca lo va a encontrar pero va a explorar todo el árbol cxp.TreeElems.OnFindElement := nil; @@ -393,39 +420,48 @@ procedure TCodeTool.OpenAfterDot2(opEve: TFaOpenEvent; end; procedure TCodeTool.SetCompletion(ed: TSynEditor); var - opEve: TFaOpenEvent; + opEve1, opEve3, opEve2, opEve: TFaOpenEvent; begin //Llena eventos de apertura para la sección de unidades //Configura eventos de apertura para nombres de unidades. - opEve := ed.hl.FindOpenEvent('unit1'); - opEve.ClearItems; - AddListUnits(opEve); //Configura unidades disponibles + opEve1 := ed.hl.FindOpenEvent('unit1'); + if OpEve1=nil then exit; + opEve1.ClearItems; + AddListUnits(opEve1); //Configura unidades disponibles - opEve := ed.hl.FindOpenEvent('unit2'); - opEve.ClearItems; - AddListUnits(opEve); //Configura unidades disponibles + opEve2 := ed.hl.FindOpenEvent('unit2'); + if OpEve2=nil then exit; + opEve2.ClearItems; + CopyListItems(opEve2, opEve1); //Copia lista de ítems - opEve := ed.hl.FindOpenEvent('unit3'); - opEve.ClearItems; - AddListUnits(opEve); //Configura unidades disponibles + opEve3 := ed.hl.FindOpenEvent('unit3'); + if OpEve3=nil then exit; + opEve3.ClearItems; + CopyListItems(opEve3, opEve1); //Copia lista de ítems //Configura eventos, para "después del punto." opEve := ed.hl.FindOpenEvent('AfterDot1'); + if OpEve=nil then exit; opEve.OnLoadItems := @OpenAfterDot1; opEve := ed.hl.FindOpenEvent('AfterDot2'); opEve.OnLoadItems := @OpenAfterDot2; //Configura completado dinámico, en cualquier punto del programa opEve := ed.hl.FindOpenEvent('BE4'); + if OpEve=nil then exit; opEve.OnLoadItems := @GeneralIdentifierCompletion; end; -constructor TCodeTool.Create(fraEdit0: TfraEditView; cxp0 : TCompiler; - fraSynTree0: TfraSyntaxTree); + +procedure TCodeTool.SetCompiler(cxp0: TCompilerBase); +begin + cxp := cxp0; + //Habría que cambiar algunas configuraciones de acuerdo al compilador usado +end; + +constructor TCodeTool.Create(fraEdit0: TfraEditView); begin - fraEdit := fraEdit0; - cxp := cxp0; - fraSynTree := fraSynTree0; + fraEdit := fraEdit0; end; end. diff --git a/Source/CompBase.pas b/Source/CompBase.pas new file mode 100644 index 00000000..ac096cd1 --- /dev/null +++ b/Source/CompBase.pas @@ -0,0 +1,2027 @@ +{Parser + +Esta sería la versión de XpresParser (definida en el framework t-Xpres), orientada +a trabajar con microcontroladores PIC. +La idea es tener aquí todas las rutinas que en lo posible sean independientes del +lenguaje y del modelo de PIC. +Para mayor información sobre el uso del framework Xpres, consultar la documentación +técnica. +} +//{$Define LogExpres} +unit CompBase; +interface +uses + Classes, SysUtils, Types, Forms, LCLType, lclProc, SynFacilHighlighter, + SynEditHighlighter, XpresBas, XpresTypesPIC, XpresElementsPIC, CompOperands, + MisUtils, FormConfig, PicCore, Globales; +const + TIT_BODY_ELE = 'Body'; +type +//Tipo de expresión, de acuerdo a la posición en que aparece +TPosExpres = (pexINDEP, //Expresión independiente + pexASIG, //Expresión de asignación + pexPROC, //Expresión de procedimiento + pexSTRUC, //Expresión de estructura + pexPARAM //Expresión de parámetro de función + ); +TOperType = (operUnary, //Operación Unaria + operBinary //Operación Binaria + ); +{ TCompilerBase } +{Clase base para crear a los objetos compiladores. +Esta clase debe ser el ancestro común de todos los compialdores a usar en PicPas. +Contiene métodos abstractos que deben ser impleemntados en las clases descendeintes.} +TCompilerBase = class(TCompOperands) +protected //Variables de expresión. + {Estas variables, se inician al inicio de cada expresión y su valor es válido + hasta el final de la expresión.} + CurrBank : Byte; //Banco RAM actual + //Variables de estado de las expresiones booleanas + InvertedFromC: boolean; {Indica que el resultado de una expresión Booleana o Bit, se + ha obtenido, en la última subexpresion, copaindo el bit C al + bit Z, con inversión lógica. Se usa para opciones de + optimziación de código.} +protected //Elements creation + procedure ClearSystemTypes; + function CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint + ): TxpEleType; + function FindSysEleType(TypName: string): TxpEleType; + function CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; + function CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; + function CreateEleType(const typName: string; const srcPos: TSrcPos; + catType: TxpCatType): TxpEleType; + function CreateEleTypeArray(const typName: string; const srcPos: TSrcPos; + itmType: TxpEleType; nItems: integer ): TxpEleType; + function CreateEleTypePtr(const typName: string; const srcPos: TSrcPos; + ptrType: TxpEleType): TxpEleType; + function CreateEleTypeObject(const typName: string; const srcPos: TSrcPos): TxpEleType; + function CreateFunction(funName: string; typ: TxpEleType; + procParam: TxpProcParam; procCall: TxpProcCall): TxpEleFun; + function CreateSysFunction(funName: string; procParam: TxpProcParam; + procCall: TxpProcCall): TxpEleFun; + function AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleVar; + function AddConstant(conName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleCon; + procedure CreateFunctionParams(var funPars: TxpParFuncArray); + function AddFunctionUNI(funName: string; eleTyp: TxpEleType; const srcPos: TSrcPos; + const pars: TxpParFuncArray; Interrup: boolean): TxpEleFun; + function AddFunctionDEC(funName: string; eleTyp: TxpEleType; + const srcPos: TSrcPos; const pars: TxpParFuncArray; Interrup: boolean + ): TxpEleFunDec; + function AddFunctionIMP(funName: string; eleTyp: TxpEleType; + const srcPos: TSrcPos; functDeclar: TxpEleFunDec): TxpEleFun; + +protected + ExprLevel : Integer; //Nivel de anidamiento de la rutina de evaluación de expresiones + RTstate : TxpEleType; {Estado de los RT. Si es NIL, indica que los RT, no tienen + ningún dato cargado, sino indican el tipo cargado en los RT.} + function CaptureDelExpres: boolean; + procedure ProcComments; + procedure ProcCommentsNoExec; + procedure TipDefecNumber(var Op: TOperand; toknum: string); virtual; abstract; + procedure TipDefecString(var Op: TOperand; tokcad: string); virtual; abstract; + procedure TipDefecBoolean(var Op: TOperand; tokcad: string); virtual; abstract; + function EOExpres: boolean; + function EOBlock: boolean; + + procedure CaptureParamsFinal(var funPars: TxpParFuncArray); + function CaptureTok(tok: string): boolean; + function CaptureStr(str: string): boolean; + procedure CaptureParams(out funPars: TxpParFuncArray); + + //Manejo del cuerpo del programa + function CreateBody: TxpEleBody; + //Manejo de Unidades + function CreateUnit(uniName: string): TxpEleUnit; +public //Containers + TreeElems : TXpTreeElements; //Árbol de sintaxis del lenguaje + TreeDirec : TXpTreeElements; //Árbol de sinatxis para directivas + listFunSys : TxpEleFuns; //lista de funciones del sistema + listTypSys : TxpEleTypes; //lista de tipos del sistema + + usedFuncs : TxpEleFuns; //Store only used functions + unusedFuncs: TxpEleFuns; //Store only unused functions + interruptFunct: TxpEleFun; //Store ths only Interrupt function + procedure UpdateFunLstCalled; + procedure SeparateUsedFunctions; +protected //Compiler event + {This is the way the Parser can communicate with the Code Generator, considering this + unit is independent of Code Generation.} + OnExprStart: procedure of object; {Se genera al iniciar la + evaluación de una expresión.} + OnExprEnd : procedure(posExpres: TPosExpres) of object; {Se genera al terminar de + evaluar una expresión.} + OnReqStopCodeGen: procedure of object; //Required stop the Code Generation + OnReqStartCodeGen: procedure of object; //Required start the Code Generation +protected //Calls to Assembler Module (ParserAsm.pas) + callProcASMlime : procedure(const AsmLin: string) of object; +protected //Call to Directive Module (ParserDirec.pas) + callProcDIRline : procedure(const AsmLin: string; out ctxChanged: boolean) of object; +protected //Calls to Code Generator (GenCodeBas) + callCurrFlash : function(): integer of object; + callResetFlashAndRAM: procedure of object; + callCreateVarInRAM: procedure(xVar: TxpEleVar; shared: boolean = false) of object; + callSetSharedUnused: procedure of object; + callSetSharedUsed: procedure of object; + + callReturnAttribIn : function(typ: TxpEleType; const Op: TOperand; offs: integer): boolean of object; + callDeviceError : function(): string of object; + callClearDeviceError : procedure of object; + + callCompileProcBody: procedure(fun: TxpEleFun) of object; + callFunctParam : procedure(fun: TxpEleFunBase) of object; + callFunctCall : procedure(fun: TxpEleFunBase; out AddrUndef: boolean) of object; + callStartCodeSub: procedure(fun: TxpEleFun) of object; + callEndCodeSub : procedure() of object; + + callCompileIF : procedure of object; + callCompileWHILE : procedure of object; + callCompileREPEAT: procedure of object; + callCompileFOR : procedure of object; +protected //Calls to Code Generator + {These are routines that must be implemented in Code-generator.} + callDefineArray : procedure(etyp: TxpEleType) of object; + callDefinePointer : procedure(etyp: TxpEleType) of object; + //Validate phisycal address + callValidRAMaddr : procedure(addr: integer) of object; + callStartProgram: procedure of object; + callEndProgram : procedure of object; +protected //ROP and expressions + procedure LoadToRT(Op: TOperand; modReturn: boolean = false); + procedure Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); + procedure OperPre(var Op1: TOperand; opr: TxpOperator); + procedure OperPost(var Op1: TOperand; opr: TxpOperator); + //Expresions manage + procedure GetOperandIdent(out Op: TOperand; ToSet: boolean); + procedure GetOperand(out Op: Toperand; ToSet: boolean); virtual; + function GetOperator(const Op: Toperand): TxpOperator; + function GetExpression(const prec: Integer): TOperand; + procedure GetExpressionE(posExpres: TPosExpres); +public //Tipos de datos a implementar + {No es obligatorio implementar todos los tipos de datos, para todos los compiladoreslo } + typBit : TxpEleType; + typBool : TxpEleType; + typByte : TxpEleType; + typChar : TxpEleType; + typWord : TxpEleType; + typDWord: TxpEleType; + typString: TxpEleType; +public + ID : integer; //Identificador para el compilador. + Compiling: boolean; //Bandera para el compilado + FirstPass: boolean; //Indica que está en la primera pasada. + xLex : TSynFacilSyn; //Resaltador - lexer + CompiledUnit: boolean; //Flag to identify a Unit + //Variables públicas del compilador + ejecProg : boolean; //Indica que se está ejecutando un programa o compilando + DetEjec : boolean; //Para detener la ejecución (en intérpretes) + + procedure Compile(NombArc: string; Link: boolean); virtual; abstract; +public //Compiling Options + incDetComm : boolean; //Incluir Comentarios detallados. + ConfigWord : integer; //Bits de configuración + mode : (modPascal, modPicPas); + SetProIniBnk: boolean; //Incluir instrucciones de cambio de banco al inicio de procedimientos + OptBnkAftPro: boolean; //Incluir instrucciones de cambio de banco al final de procedimientos + OptBnkAftIF : boolean; //Optimizar instrucciones de cambio de banco al final de IF + OptReuProVar: boolean; //Optimiza reutilizando variables locales de procedimientos + OptRetProc : boolean; //Optimiza el último exit de los procedimeintos. +protected + mainFile : string; //Archivo inicial que se compila + hexFile : string; //Nombre de archivo de salida + function ExpandRelPathTo(BaseFile, FileName: string): string; +public //Información y acceso a memoria + function hexFilePath: string; + function mainFilePath: string; + function CompilerName: string; virtual; abstract; //Name of the compiler + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); virtual; abstract; + function RAMusedStr: string; virtual; abstract; + function FLASHusedStr: string; virtual; abstract; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); virtual; abstract; + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); virtual; abstract; + procedure GenerateListReport(lins: TStrings); virtual; abstract; +public //Acceso a campos del objeto PIC + function PICName: string; virtual; abstract; + function PICNameShort: string; virtual; abstract; + function PICnBanks: byte; virtual; abstract; //Number of RAM banks + function PICCurBank: byte; virtual; abstract; //Current RAM bank + function PICBank(i: byte): TPICRAMBank; virtual; abstract; //Return a RAM bank + function PICnPages: byte; virtual; abstract; //Number of FLASH pages + function PICPage(i: byte): TPICFlashPage; virtual; abstract; //Return a FLASH page + function RAMmax: integer; virtual; abstract; +protected //Container lists of registers + listRegAux : TPicRegister_list; //lista de registros de trabajo y auxiliares + listRegStk : TPicRegister_list; //lista de registros de pila + listRegAuxBit: TPicRegisterBit_list; //lista de registros de trabajo y auxiliares + listRegStkBit: TPicRegisterBit_list; + stackTop : integer; //índice al límite superior de la pila + stackTopBit: integer; //índice al límite superior de la pila +public + picCore : TPicCore; //Objeto PIC Core + devicesPath: string; //Ruta de las unidades de dispositivos + property ProplistRegAux: TPicRegister_list read listRegAux; + property ProplistRegAuxBit: TPicRegisterBit_list read listRegAuxBit; +protected + procedure getListOfIdent(out itemList: TStringDynArray; out + srcPosArray: TSrcPosArray); + procedure IdentifyField(xOperand: TOperand; ToSet: boolean); + procedure LogExpLevel(txt: string); + function IsTheSameBitVar(var1, var2: TxpEleVar): boolean; inline; + function AddCallerTo(elem: TxpElement): TxpEleCaller; + function AddCallerTo(elem: TxpElement; callerElem: TxpElement): TxpEleCaller; + function AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; +protected + procedure RefreshAllElementLists; + procedure RemoveUnusedFunc; + procedure RemoveUnusedVars; + procedure RemoveUnusedCons; + procedure RemoveUnusedTypes; + procedure UpdateCallersToUnits; +public //Inicialización + constructor Create; virtual; + destructor Destroy; override; +end; + +procedure SetLanguage; + +implementation +uses Graphics; +var + ER_NOT_IMPLEM_ , ER_IDEN_EXPECT, ER_DUPLIC_IDEN , ER_UNDEF_TYPE_, ER_IDE_TYP_EXP, + ER_SEMIC_EXPEC , ER_STR_EXPECTED, ER_TYP_PARM_ER_, ER_UNKNOWN_IDE_, + ER_IN_EXPRESSI , ER_OPERAN_EXPEC, ER_ILLEG_OPERA_, ER_UND_OPER_TY_, + ER_CAN_AP_OPER_, ER_IN_CHARACTER, ER_INV_COD_CHAR, ER_ONLY_ONE_REG, + ER_RA_HAV_USED + : string; + +procedure SetLanguage; +begin + {$I ..\language\tra_CompBase.pas} +end; +{TCompilerBase} +function TCompilerBase.EOExpres: boolean; inline; +//Indica si se ha llegado al final de una expresión. +begin + Result := cIn.tok = ';'; //en este caso de ejemplo, usamos punto y coma + {En la práctica, puede ser conveniente definir un tipo de token como "tkExpDelim", para + mejorar el tiempo de respuesta del procesamiento, de modo que la condición sería: + Result := cIn.tokType = tkExpDelim; + } +end; +function TCompilerBase.EOBlock: boolean; inline; +//Indica si se ha llegado el final de un bloque +begin + Result := cIn.tokType = tnBlkDelim; + {No está implementado aquí, pero en la práctica puede ser conveniente definir un tipo de token + como "tnBlkDelim", para mejorar el tiempo de respuesta del procesamiento, de modo que la + condición sería: + Result := cIn.tokType = tnBlkDelim;} +end; +function TCompilerBase.CaptureDelExpres: boolean; +//Verifica si sigue un delimitador de expresión. Si encuentra devuelve false. +begin + cIn.SkipWhites; + if EOExpres then begin //encontró + cIn.Next; //pasa al siguiente + exit(true); + end else begin //es un error + GenError('";" expected.'); + exit(false); //sale con error + end; + +end; +procedure TCompilerBase.ProcComments; +{Procesa comentarios, directivas y bloques ASM. Los bloques ASM, se processan también +como comentarios o directivas, para poder ubicarlos dentro de instrucciones, y poder +darle mayor poder, en el futuro. +Notar que este procedimiento puede detectar varios errores en el mismo bloque, y que +pasa al siguiente token, aún cuando detecta errores. Esto permite seguir proesando +el texto, después de que ya se han generado errores dentro de este blqoue. Así, no +sería necesario verificar error después de esta rutina, y se podrían detectar errores +adicionales en el código fuente.} +var + ctxChanged: Boolean; //Manejamos variables locales para permitir recursividad +begin + cIn.SkipWhites; + while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin + if cIn.tokType = tnAsm then begin + //Es una línea ASM + callProcASMlime(cIn.tok); //procesa línea + if HayError then begin + cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros + cIn.SkipWhites; + continue; + end; + end else begin + //Es una directiva + callProcDIRline(cIn.tok, ctxChanged); //procesa línea + if HayError then begin + cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros + cIn.SkipWhites; + continue; + end; + if ctxChanged then begin + {Hubo cambio de contexto. Procesamos nuevamente, porque ahora estamos ya en + otro contexto y se supone que esta llamada a ProcComments(), se hace precisamente + para saltar blancos, comentarios, directivas, o bloques ASM.} +// cIn.SkipWhites; {En el nuevo contexto puede haber nuevos comentarios.} + ProcComments; {En el nuevo contexto puede haber nuevos comentarios o bloques Asm.} + exit; + end; + end; + //Pasa a siguiente + cIn.Next; + cIn.SkipWhites; //limpia blancos + end; +end; +procedure TCompilerBase.ProcCommentsNoExec; +{Similar a ProcComments(), pero no ejecuta directivas o bloques ASM.} +begin + cIn.SkipWhites; + while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin + //Pasa a siguiente + cIn.Next; + cIn.SkipWhites; //limpia blancos + end; +end; +//Manejo de tipos +procedure TCompilerBase.ClearSystemTypes; //Limpia los tipos del sistema +begin + listTypSys.Clear; +end; +function TCompilerBase.CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint): TxpEleType; +{Crea un elemento tipo, del sistema. Devuelve referencia al tipo creado.} +var + eType: TxpEleType; +begin + //Verifica nombre + if FindSysEleType(nom0) <> nil then begin + GenError('Duplicated identifier: "%s"', [nom0]); + exit(nil); //Devuelve tipo nulo + end; + //Crea elemento de tipo + eType := TxpEleType.Create; + eType.name := nom0; + eType.grp := cat0; + eType.size := siz0; + eType.catType := tctAtomic; + listTypSys.Add(eType); + //Devuelve referencia al tipo + Result:=eType; +end; +function TCompilerBase.FindSysEleType(TypName: string): TxpEleType; +{Busca un elemento de tipo por su nombre. Si no encuentra, devuelve NIL.} +var + etyp: TxpEleType; +begin + typName := upcase(typName); + for etyp in listTypSys do begin + if UpCase(etyp.name) = typName then exit(etyp); //devuelve referencia + end; + exit(nil); +end; +function TCompilerBase.CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; +{Rutina para crear una constante. Devuelve referencia a la constante creada.} +var + conx : TxpEleCon; +begin + //registra variable en la tabla + conx := TxpEleCon.Create; + conx.name:=consName; + conx.typ := eletyp; //fija referencia a tipo + Result := conx; +end; +//Manejo de variables +function TCompilerBase.CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; +{Rutina para crear una variable. Devuelve referencia a la variable creada.} +var + xVar: TxpEleVar; +begin + xVar := TxpEleVar.Create; + xVar.name := varName; + xVar.typ := eleTyp; + xVar.adicPar.hasAdic := decNone; + xVar.adicPar.hasInit := false; + Result := xVar; +end; +//Manejo de tipos +function TCompilerBase.CreateEleType(const typName: string; const srcPos: TSrcPos; + catType: TxpCatType): TxpEleType; +var + xTyp: TxpEleType; +begin + xTyp := TxpEleType.Create; + xTyp.name := typName; + xTyp.srcDec := srcPos; + xTyp.catType := catType; + Result := xTyp; +end; + +function TCompilerBase.CreateEleTypeArray(const typName: string; + const srcPos: TSrcPos; itmType: TxpEleType; nItems: integer): TxpEleType; +var + xtyp: TxpEleType; +begin + xtyp := CreateEleType(typName, srcPos, tctArray); + xtyp.itmType := itmType; //Item type + xtyp.nItems := nItems; //number of items + callDefineArray(xtyp); //Define operations to array + exit(xtyp); +end; +function TCompilerBase.CreateEleTypePtr(const typName: string; + const srcPos: TSrcPos; ptrType: TxpEleType): TxpEleType; +var + xtyp: TxpEleType; +begin + xtyp := CreateEleType(typName, srcPos, tctPointer); + xtyp.ptrType := ptrType; //Item type + callDefinePointer(xtyp); //Define operations to array + exit(xtyp); +end; +function TCompilerBase.CreateEleTypeObject(const typName: string; + const srcPos: TSrcPos): TxpEleType; +begin + Result := CreateEleType(typName, srcPos, tctObject); + +end; + +//Manejo de funciones +function TCompilerBase.CreateFunction(funName: string; typ: TxpEleType; + procParam: TxpProcParam; procCall: TxpProcCall): TxpEleFun; +{Crea una nueva función y devuelve la referecnia a la función.} +var + fun : TxpEleFun; +begin + fun := TxpEleFun.Create; + fun.name:= funName; + fun.typ := typ; + fun.procParam := procParam; + fun.procCall:= procCall; + fun.ClearParams; + Result := fun; +end; +function TCompilerBase.CreateSysFunction(funName: string; + procParam: TxpProcParam; procCall: TxpProcCall): TxpEleFun; +{Crea una función del sistema. A diferencia de las funciones definidas por el usuario, +una función del sistema se crea, sin crear espacios de nombre. La idea es poder +crearlas rápidamente. "procParam", solo es necesario, cuando la función del sistema +debe devolver valores (No es procedimiento).} +var + fun : TxpEleFun; +begin + fun := TxpEleFun.Create; //Se crea como una función normal + fun.name:= funName; + fun.typ := typNull; + fun.procParam := procParam; + fun.procCall:= procCall; + fun.ClearParams; + listFunSys.Add(fun); //Las funciones de sistema son accesibles siempre + Result := fun; +end; +function TCompilerBase.AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleVar; +{Crea un elemento variable y lo agrega en el nodo actual del árbol de sintaxis. +Si no hay errores, devuelve la referencia a la variable. En caso contrario, +devuelve NIL. +Notar que este método, no asigna RAM a la variable. En una creación completa de +variables, se debería llamar a CreateVarInRAM(), después de agregar la variable.} +var + xvar: TxpEleVar; +begin + xvar := CreateVar(varName, eleTyp); + xvar.srcDec := srcPos; //Actualiza posición + //Verifica si hay conflicto. Solo es necesario buscar en el nodo actual. + if xvar.ExistsIn(TreeElems.curNode.elements) then begin + GenErrorPos(ER_DUPLIC_IDEN, [xvar.name], xvar.srcDec); + xvar.Destroy; //Hay una variable creada + exit(nil); + end; + TreeElems.AddElement(xvar); + Result := xvar; +end; +function TCompilerBase.AddConstant(conName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleCon; +{Crea un elemento constante y lo agrega en el nodo actual del árbol de sintaxis. +Si no hay errores, devuelve la referencia a la variable. En caso contrario, +devuelve NIL. } +var + xcons: TxpEleCon; +begin + xcons := CreateCons(conName, eleTyp); + xcons.srcDec := srcPos; + if xcons.ExistsIn(TreeElems.curNode.elements) then begin + GenErrorPos(ER_DUPLIC_IDEN, [xcons.name], xcons.srcDec); + xcons.Destroy; //hay una constante creada + exit; + end; + TreeElems.AddElement(xcons); + Result := xcons; +end; +//function TCompilerBase.AddType(typName: string; srcPos: TSrcPos; +// catType: TxpCatType): TxpEleType; +//{Crea un elemento tipo y lo agrega en el nodo actual del árbol de sintaxis. +//Si no hay errores, devuelve la referencia al tipo. En caso contrario, devuelve NIL. +//} +//var +// xtyp: TxpEleType; +//begin +// //Inicia parámetros adicionales de declaración +// xtyp := CreateEleType(typName, srcPos, catType); +// Result := xtyp; +// if not TreeElems.AddElement(xtyp) then begin +// GenErrorPos(ER_DUPLIC_IDEN, [xtyp.name], xtyp.srcDec); +// xtyp.Destroy; //Hay una variable creada +// exit(nil); +// end; +//end; +procedure TCompilerBase.CreateFunctionParams(var funPars: TxpParFuncArray); +{Crea los parámetros de una función como variables globales, a partir de un arreglo +TxpParFunc. } +var + i: Integer; + par: TxpParFunc; + xvar: TxpEleVar; + regWused: boolean = false; +begin + for i := 0 to high(funPars) do begin + par := funPars[i]; + xvar := AddVariable({fun.name + '_' + }par.name, par.typ, par.srcPos); + if HayError then exit; + xvar.IsParameter := true; //Marca bandera + xvar.adicPar := par.adicVar; //Copy aditional settings + case par.adicVar.hasAdic of + decRegis: begin + //Parameters REGISTER use: A or H,A register. Only can be used once. + if regWused then begin + GenErrorPos(ER_RA_HAV_USED, [], par.srcPos); + exit; + end; + regWused := true; //Activa bandera + end; +// decRegisA: begin +// //Parameter REGISTER A +// if regWused then begin +// GenErrorPos(ER_RA_HAV_USED, [], par.srcPos); +// exit; +// end; +// regWused := true; //Activa bandera +// end; + end; + //Actualiza referencia a la variable que almacena el parámetro. + funPars[i].pvar := xvar; + end; +end; +function TCompilerBase.AddFunctionUNI(funName: string; eleTyp: TxpEleType; + const srcPos: TSrcPos; const pars: TxpParFuncArray; Interrup: boolean + ): TxpEleFun; +{Create a new function, in normal mode (In the Main program or a like a private function +in Implementation section) and add it to the Syntax Tree in the current node.} +var + xfun: TxpEleFun; +begin + xfun := CreateFunction(funName, eleTyp, callFunctParam, callFunctCall); + xfun.srcDec := srcPos; //Toma ubicación en el código + xfun.declar := nil; //This is declaration + xfun.pars := pars; //Copy parameters + xfun.IsInterrupt := Interrup; + //La validación de duplicidad no se puede hacer hasta tener los parámetros. + TreeElems.AddElementAndOpen(xfun); //Se abre un nuevo espacio de nombres + Result := xfun; + //Crea parámetros en el nuevo espacio de nombres de la función + CreateFunctionParams(xfun.pars); +end; + +function TCompilerBase.AddFunctionDEC(funName: string; eleTyp: TxpEleType; + const srcPos: TSrcPos; const pars: TxpParFuncArray; Interrup: boolean): TxpEleFunDec; +{Create a new function, in DECLARATION mode (Forward or Interface) and add it +to the Syntax Tree in the current node. No new node is opened.} +var + xfundec: TxpEleFunDec; +begin + xfundec := TxpEleFunDec.Create; + xfundec.name:= funName; + xfundec.typ := eletyp; + xfundec.procCall := callFunctCall; + xfundec.procParam := callFunctParam; +// xfun.ClearParams; + + xfundec.srcDec := srcPos; //Toma ubicación en el código + xfundec.implem := nil; //Not yet implemented + xfundec.pars := pars; //Copy parameters + xfundec.IsInterrupt := Interrup; + TreeElems.AddElement(xfundec); //Doesn't open the element + Result := xfundec; + //Note that variables for parameters are not created here. +end; +function TCompilerBase.AddFunctionIMP(funName: string; eleTyp: TxpEleType; + const srcPos: TSrcPos; functDeclar: TxpEleFunDec): TxpEleFun; +{Create a new function, in IMPLEMENTATION mode (Forward or Interface) and add it +to the Syntax Tree in the current node. } +var + xfun: TxpEleFun; + tmp: TxpListCallers; +begin + xfun := CreateFunction(funName, eleTyp, callFunctParam, callFunctCall); + xfun.srcDec := srcPos; //Take position in code. + functDeclar.implem := xfun; //Complete reference + xfun.declar := functDeclar; //Reference to declaration + xfun.pars := functDeclar.pars; //Copy from declaration + xfun.IsInterrupt := functDeclar.IsInterrupt; //Copy from declaration + //La validación de duplicidad no se puede hacer hasta tener los parámetros. + TreeElems.AddElementAndOpen(xfun); //Se abre un nuevo espacio de nombres + Result := xfun; + //Crea parámetros en el nuevo espacio de nombres de la función + CreateFunctionParams(xfun.pars); + //Pass calls list form declaration to implementation. + tmp := functDeclar.lstCallers; + functDeclar.lstCallers := xfun.lstCallers; + xfun.lstCallers := tmp; + //New calls will be added to implementation since now. +end; + +function TCompilerBase.CaptureTok(tok: string): boolean; +{Toma el token indicado del contexto de entrada. Si no lo encuentra, genera error y +devuelve FALSE.} + procedure GenErrorInLastLine(var p: TSrcPos); + {Genera error posicionando el punto del error, en una línea anterior, que no esté + vacía.} + var + lin: String; + begin + if p.row>1 then begin + //Hay línea anterior + repeat + p.row := p.row - 1; + lin := cIn.curCon.curLines[p.row - 1]; + until (p.row<=1) or (trim(lin)<>''); + //Encontró línea anterior no nula o llegó a la primera línea. +// xlex.ExploreLine(Point(length(lin), p.row), toks, CurTok ); + p.col := length(lin); //mueve al final (antes del EOL) + GenErrorPos('"%s" expected.', [tok], p); //Genera error + end else begin + //No hay línea anterior + p.col := 1; //mueve al inicio + GenErrorPos('"%s" expected.', [tok], p); //Genera error + end; + end; + +var + x: integer; + lin: String; + p: TSrcPos; +begin + //Debe haber parámetros + if cIn.tok<>tok then begin + //No se encontró el token. Muestra mensaje de error. + {Pero el error, debe estar antes, así que hacemos la magia de explorar hacia atrás, + hasta encontrar el token involucrado.} + p := cIn.ReadSrcPos; //posición actual + x := p.col; //lee posición actual + if x>1 then begin + //Hay algo antes del token + lin := cIn.curCon.CurLine; + repeat + dec(x); + until (x<=1) or (lin[x] <> ' '); + if x<=1 then begin + //Está lleno de espacios, hasta el inicio. + //Es muy probable que el error esté en la línea anterior. + GenErrorInLastLine(p); + end else begin + //Encontró, en la misma línea un caracter diferente de espacio + GenErrorPos('"%s" expected.', [tok], p); //Genera error ahí mismo + end; + end else begin + //Está al inicio de la línea. El error debe estar antes + GenErrorInLastLine(p); + end; + exit(false); + end; + cin.Next; + exit(true); +end; +function TCompilerBase.CaptureStr(str: string): boolean; +//Similar a CaptureTok(), pero para cadenas. Se debe dar el texto en minúscula. +begin + //Debe haber parámetros + if cIn.tokL<>str then begin + GenError('"%s" expected.', [str]); + exit(false); + end; + cin.Next; + exit(true); +end; +procedure TCompilerBase.CaptureParams(out funPars: TxpParFuncArray); +{Lee los parámetros (tipo) con la que una función es llamada. EL resultado lo +devuelve en "funPars". Solo actualiza el campo de tipo de "funPars". +Notar la similitud de este procedimiento con la rutina implementada en ReadProcHeader() +en la unidad "Compiler_PIC16". } +const + BLOCK_SIZE = 10; //Tamaño de bloque. +var + curSize, n: Integer; +begin + //func0.ClearParams; + if EOBlock or EOExpres then begin + //no tiene parámetros + end else begin + //Debe haber parámetros + if cIn.tok <> '(' then begin + //Si no sigue '(', significa que no hay parámetros. + exit; + end; + cIn.Next; //Toma paréntesis + //Debe haber parámetros. Prepara espacio para leer. + curSize := BLOCK_SIZE; //Tamaño inicial de bloque + setlength(funPars, curSize); //Tamaño inicial + n := 0; + repeat + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + //Guarda tipo de parámetro + funPars[n].typ := res.Typ; + //Prepara siguiente lectura + inc(n); + if n >= curSize then begin + curSize += BLOCK_SIZE; //Incrementa tamaño en bloque + setlength(funPars, curSize); //hace espacio en bloque + end; + //Busca delimitador + if cIn.tok = ',' then begin + cIn.Next; //toma separador + cIn.SkipWhites; + end else begin + //No sigue separador de parámetros, + //debe terminar la lista de parámetros + //¿Verificar EOBlock or EOExpres ? + break; + end; + until false; + //busca paréntesis final + if not CaptureTok(')') then exit; + //Asigna tamaño final + setlength(funPars, n); + end; +end; +procedure TCompilerBase.CaptureParamsFinal(var funPars: TxpParFuncArray); +{Captura los parámetros asignándolos a las variables de la función que representan a los +parámetros. No hace falta verificar, no debería dar error, porque ya se verificó con +CaptureParams. } +var + i: Integer; + par: TxpParFunc; + Op1, Op2: TOperand; + op: TxpOperator; +begin + if EOBlock or EOExpres then exit; //sin parámetros + CaptureTok('('); //No debe dar error porque ya se verificó + for i := 0 to high(funPars) do begin + par := funPars[i]; + {Ya sirvió "RTstate", ahora lo limpiamos, no vaya a pasar que las rutinas de + asignación, piensen que los RT están ocupados, cuando la verdad es que han sido + liberados, precisamente para ellas.} + RTstate := nil; + //Evalúa parámetro + Inc(ExprLevel); //cuenta el anidamiento + Op2 := GetExpression(0); //llama como sub-expresión + Dec(ExprLevel); + if HayError then exit; //aborta + if cIn.tok = ',' then begin + cIn.Next; + cIn.SkipWhites; + end; + //Genera código para la asignación + if par.adicVar.hasAdic = decRegis then begin + {Cuando es parámetro registro, no se asigna, se deja en el registro(s) de + trabajo.} + LoadToRT(Op2); + end else if par.adicVar.hasAdic in [decNone, decAbsol] then begin + //Cretae operand-variable to generate assignment code. + Op1.SetAsVariab(par.pvar); //Apunta a la variable + AddCallerTo(par.pvar); //Agrega la llamada + op := Op1.Typ.operAsign; + Oper(Op1, op, Op2); //Codifica la asignación + end else begin + GenError('Not implemented.'); + exit; + end; + end; + if not CaptureTok(')') then exit; +end; +function TCompilerBase.CreateBody: TxpEleBody; +var + body: TxpEleBody; +begin + body := TxpEleBody.Create; + body.name := TIT_BODY_ELE; + Result := body; +end; +function TCompilerBase.CreateUnit(uniName: string): TxpEleUnit; +var + uni: TxpEleUnit; +begin + uni := TxpEleUnit.Create; + uni.name := uniName; + Result := uni; +end; + +procedure TCompilerBase.UpdateFunLstCalled; +{Actualiza la lista lstCalled de las funciones, para saber, a qué fúnciones llama + cada función.} +var + fun : TxpEleFun; + itCall : TxpEleCaller; + whoCalls: TxpEleBody; + n: Integer; +begin + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then continue; //No usada + //Procesa las llamadas hechas desde otras funciones, para llenar + //su lista "lstCalled", y así saber a quienes llama + for itCall in fun.lstCallers do begin + //Agrega la referencia de la llamada a la función + if itCall.caller.idClass <> eltBody then begin + //Según diseño, itCall.caller debe ser TxpEleBody + GenError('Design error.'); + exit; + end; + whoCalls := TxpEleBody(itCall.caller); + //Se agregan todas las llamadas (así sean al mismo porcedimiento) pero luego + //AddCalled(), los filtra. + whoCalls.Parent.AddCalled(fun); //Agrega al procediminto + end; + end; + {Actualizar la lista fun.lstCalledAll con la totalidad de llamadas a todas + las funciones, sean de forma directa o indirectamente.} + for fun in TreeElems.AllFuncs do begin + n := fun.UpdateCalledAll; + if n<0 then begin + GenErrorPos('Recursive call or circular recursion in %s', [fun.name], fun.srcDec); + end; + end; + if HayError then exit; + //Actualiza el programa principal + TreeElems.main.UpdateCalledAll; //No debería dar error de recursividad, porque ya se verificaron las funciones + if TreeElems.main.maxNesting>128 then begin + {Stack is 256 bytes size, and it could contain 128 max. JSR calls, without + considering stack instructions.} + GenError('Not enough stack.'); + end; +end; +procedure TCompilerBase.SeparateUsedFunctions; +{Fill the list usedFuncs with all used functions, including Interrupt function. +Set interruptFunct to point to the interrupt function (Only one). +Must be called after call to RemoveUnusedFunc().} +var + fun : TxpEleFun; +begin + usedFuncs.Clear; + unusedFuncs.Clear; + interruptFunct := nil; + for fun in TreeElems.AllFuncs do begin + if fun.nCalled>0 then usedFuncs.Add(fun) else unusedFuncs.Add(fun); + if fun.IsInterrupt then interruptFunct := fun; + end; +end; + +procedure TCompilerBase.getListOfIdent(out itemList: TStringDynArray; out + srcPosArray: TSrcPosArray); +{Lee una lista de identificadores separados por comas, hasta encontra un caracter distinto +de coma. Si el primer elemento no es un identificador o si después de la coma no sigue un +identificador, genera error. +También devuelve una lista de las posiciones de los identificadores, en el código fuente.} +const + BLOCK_SIZE = 10; //Tamaño de bloque de memoria inicial +var + item: String; + n, curSize: Integer; +begin + //Se empieza con un tamaño inicial para evitar muchas llamadas a setlength() + curSize := BLOCK_SIZE; //Tamaño inicial de bloque + setlength(itemList , curSize); //Tamaño inicial + setlength(srcPosArray, curSize); //Tamaño inicial + n := 0; + repeat + ProcComments; + //ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador + item := cIn.tok; + itemList[n] := item; //agrega nombre + srcPosArray[n] := cIn.ReadSrcPos; //agrega ubicación de declaración + cIn.Next; //Toma identificador despues, de guardar ubicación + ProcComments; + if cIn.tok <> ',' then break; //sale + cIn.Next; //Toma la coma + //Hay otro ítem, verifica límite de arreglo + inc(n); + if n >= curSize then begin + curSize += BLOCK_SIZE; //Incrementa tamaño en bloque + setlength(itemList , curSize); //hace espacio + setlength(srcPosArray, curSize); //hace espacio + end; + until false; + //Define el tamaño final. + setlength(itemList , n+1); + setlength(srcPosArray, n+1); +end; +procedure TCompilerBase.IdentifyField(xOperand: TOperand; ToSet: boolean); +{Identifica el campo de una variable. Si encuentra algún problema genera error. +Notar que el parámetro es por valor, es decir, se crea una copia, por seguridad. +Puede generar código de evaluación. Devuelve el resultado en "res". } + function CallProc(const field: TTypField): boolean; inline; + {Call the Getter or Setter, of the field acordding to "ToSet". If gives error + return FALSE} + begin + if ToSet then begin + //Mode Setter + if field.procSet= nil then begin + GenError('Cannot assign to this operand.'); + exit(false); + end; + field.procSet(@xOperand) + end else begin + //Mode Setter + if field.procGet= nil then begin + GenError('Cannot read this operand.'); + exit(false); + end; + field.procGet(@xOperand); //Devuelve resultado en "res" + end; + exit(true); + end; +var + field: TTypField; + identif: String; + att: TTypAttrib; +begin + if cIn.tok = '[' then begin + //Caso especial de llamada a Item(). + for field in xOperand.Typ.fields do begin + if LowerCase(field.Name) = 'item' then begin + //Find de method + if not CallProc(field) then exit; + if cIn.tok = '.' then begin + //Aún hay más campos, seguimos procesando + //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado + IdentifyField(res, ToSet); + end; + exit; + end; + end; + //setitem() not found + GenError('Cannot access to index in: %s', [xOperand.txt]); + exit; + end; + cIn.Next; //Toma el "." + if (cIn.tokType<>tnIdentif) and (cIn.tokType<>tnNumber) then begin + GenError('Identifier expected.'); + cIn.Next; //Pasa siempre + exit; + end; + //Hay un identificador + identif := cIn.tokL; + //Test with methods + for field in xOperand.Typ.fields do begin + if LowerCase(field.Name) = identif then begin + //Find de method + if not CallProc(field) then exit; + if cIn.tok = '.' then begin + //Aún hay más campos, seguimos procesando + //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado + IdentifyField(res, ToSet); + end; + exit; + end; + end; + //Test with attributes + for att in xOperand.Typ.attribs do begin + if LowerCase(att.Name) = identif then begin + //Attribute found + if not callReturnAttribIn(att.typ, xOperand, att.offs) then exit; + cIn.Next; //Take tonen + if cIn.tok = '.' then begin + //Aún hay más campos, seguimos procesando + //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado + IdentifyField(res, ToSet); + end; + exit; + end; + end; + //No found + GenError(ER_UNKNOWN_IDE_, [identif]); +end; +//Manejo de expresiones +procedure TCompilerBase.GetOperandIdent(out Op: TOperand; ToSet: boolean); +{Read an operand spcified by one identifier. Return in "Op". This routine was part of +GetOperand(), but it was splitted because: +* This is a big code and could grow more. +* It's used separately too. } +var + ele : TxpElement; + xvar : TxpEleVar; + xcon : TxpEleCon; + posCall : TSrcPos; + posPar : TPosCont; + RTstate0: TxpEleType; + xfun : TxpEleFunBase; + Found , AddrUndef: Boolean; + pars: TxpParFuncArray; +begin +//cIn.ShowCurContInformat; +//debugln(' ++CurNode:' + TreeElems.curNode.Path); + ele := TreeElems.FindFirst(cIn.tok); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenError(ER_UNKNOWN_IDE_, [cIn.tok]); + exit; + end; +//debugln(' --Element ' + cIn.tok + ':' + ele.Path); + if ele.idClass = eltVar then begin + //Es una variable + xvar := TxpEleVar(ele); //Referencia con tipo + //Lleva la cuenta de la llamada. + {Notar que se agrega la referencia a la variable, pero que finalmente el operando + puede apuntar a otra variable, si es que se tiene la forma: . } + AddCallerTo(xvar); + cIn.Next; //Pasa al siguiente + case xvar.adicPar.hasAdic of + decRegis: begin //Is a REGISTER variable + Op.SetAsExpres(xvar.typ); + Op.DefineRegister; + end; + decNone, decAbsol: begin + //Es una variable común + Op.SetAsVariab(xvar); //Guarda referencia a la variable (y actualiza el tipo). + {$IFDEF LogExpres} Op.txt:= xvar.name; {$ENDIF} //toma el texto + //Verifica si tiene referencia a campos con "." + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op, ToSet); + Op := res; //notar que se usa "res". + if HayError then exit; + {Como este operando es de tipo .... , actualizamos el campo + "rVarBase", y se hace al final porque los métodos Op.SetAsXXXX() } + Op.rVarBase := xvar; //Fija referencia a la variable base + end; + end else + GenError('Not implemented.'); + exit; + end; + end else if ele.idClass = eltCons then begin //es constante + //es una constante + xcon := TxpEleCon(ele); + AddCallerTo(xcon);//lleva la cuenta + cIn.Next; //Pasa al siguiente + Op.SetAsConst(xcon.typ); //fija como constante + Op.GetConsValFrom(xcon); //lee valor + {$IFDEF LogExpres} Op.txt:= xcon.name; {$ENDIF} //toma el texto + //Verifica si tiene referencia a campos con "." + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op, ToSet); + Op := res; //notar que se usa "res". + if HayError then exit;; + end; + end else if ele.idClass in [eltFunc, eltFuncDec] then begin //es función + {Se sabe que es función, pero no se tiene la función exacta porque puede haber + versiones, sobrecargadas de la misma función.} + posCall := cIn.ReadSrcPos; //guarda la posición de llamada. + cIn.Next; //Toma identificador + cIn.SkipWhites; //Quita posibles blancos + posPar := cIn.PosAct; //Guarda porque va a pasar otra vez por aquí + OnReqStopCodeGen(); //Para que no se genere el código(Por ejemplo cuando se leen parámetros de tipo expresión.) + RTstate0 := RTstate; //Guarda porque se va a alterar con CaptureParams(). + CaptureParams(pars); //Primero lee parámetros en "pars". + if HayError then begin + exit; + end; + //Aquí se identifica la función exacta, que coincida con sus parámetros + xfun := TxpEleFunBase(ele); //The ancestor of eltFunc and eltFuncDec + //Primero vemos si la primera función encontrada, coincide: + if xfun.SameParamsType(pars) then begin + //Coincide + Found := true; + end else begin + //No es, es una pena. Ahora tenemos que seguir buscando en el árbol de sintaxis. + repeat + //Usar FindNextFunc, es la forma es eficiente, porque retoma la búsqueda anterior. + xfun := TreeElems.FindNextFuncName; + until (xfun = nil) or xfun.SameParamsType(pars); + Found := (xfun <> nil); + end; + if Found then begin + //Ya se identificó a la función que cuadra con los parámetros + {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto + {Ahora que ya sabe cúal es la función referenciada, captura de nuevo los + parámetros, pero asignándola al parámetro que corresponde.} + cIn.PosAct := posPar; + OnReqStartCodeGen(); //Reactiva la generación de código + RTstate := RTstate0; + xfun.procParam(xfun); //Antes de leer los parámetros + if high(pars)+1>0 then begin + CaptureParamsFinal(xfun.pars); //evalúa y asigna + end; + //Se hace después de leer parámetros. + AddCallerTo(xfun, posCall); {Corrige posición de llamada, sino estaría apuntando + al final de los parámetros} + xfun.procCall(xfun, AddrUndef); //codifica el "JSR" + if AddrUndef then begin + //"xfun" doesn't have been implemented. +// GenError('Cannot get address of %s', [xfun.name]); +// exit; + end; + RTstate := xfun.typ; //para indicar que los RT están ocupados + Op.SetAsExpres(xfun.typ); + exit; + end else begin + //Encontró la función, pero no coincidió con los parámetros + GenError(ER_TYP_PARM_ER_, [ele.name + '()']); + exit; + end; + end else begin + GenError(ER_NOT_IMPLEM_, [ele.name]); + exit; + end; +end; +procedure TCompilerBase.GetOperand(out Op: Toperand; ToSet: boolean); +{Parte de la funcion analizadora de expresiones que genera codigo para leer un operando. +Debe devolver el tipo del operando y también el valor. En algunos casos, puede modificar +"res".} +var + xfun : TxpEleFun; + tmp, oprTxt, typName, str: String; + Op1 : TOperand; + posAct: TPosCont; + opr : TxpOperator; + cod , ascCode: Longint; + ReadType, endWithComma, AddrUndef: Boolean; + itType: TxpEleType; + xtyp : TxpEleType; + srcpos: TSrcPos; + nElem: Integer; +begin + //cIn.SkipWhites; + ProcComments; + Op.Inverted := false; //inicia campo + if cIn.tokType = tnNumber then begin //constantes numéricas + {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto + TipDefecNumber(Op, cIn.tok); //encuentra tipo de número, tamaño y valor + if HayError then exit; //verifica + cIn.Next; //Pasa al siguiente + end else if cIn.tokType = tnChar then begin //constante caracter + {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto + if not TryStrToInt(copy(cIn.tok, 2), cod) then begin + GenError(ER_IN_CHARACTER); //tal vez, sea muy grande + exit; + end; + if (cod<0) or (cod>255) then begin + GenError(ER_INV_COD_CHAR); + exit; + end; + Op.SetAsConst(typChar); + Op.valInt := cod; + cIn.Next; //Pasa al siguiente + end else if cIn.tokType = tnString then begin //constante cadena + nElem := length(cIn.tok) - 2; //Don't consider quotes + str := copy(cIn.tok, 2, nElem); + cIn.Next; //Pasa al siguiente + if cIn.tokType = tnChar then begin //like #255 + //Concat the next char to simulate concat, considering there is not a + //string type. + ascCode := StrToInt(Copy(cIn.tok,2,3)); + str += chr(ascCode and $FF); + cIn.Next; //Pasa al siguiente + end; + {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto + if length(str) = 1 then begin + //De un caracter. Se asume de tipo Char + Op.SetAsConst(typChar); + Op.valInt := ord(str[1]); + end else begin + //Will be considered as array of char + if not TreeElems.ExistsArrayType(typChar, nElem, xtyp) then begin + //There is not a similar type. We create a new type. + typName := GenArrayTypeName('char', nElem); //Op.nItems won't work + xtyp := CreateEleTypeArray(typName, srcPos, typChar, nElem); + end; + Op.SetAsConst(xtyp); + Op.StringToArrayOfChar( str ); + //Op.SetAsConst(typString); + //Op.valStr := copy(cIn.tok, 2, length(cIn.tok)-2); + end; + end else if (cIn.tokType = tnSysFunct) or //función del sistema + (cIn.tokL = 'bit') or //"bit" es de tipo "tnType" + (cIn.tokL = 'boolean') or //"boolean" es de tipo "tnType" + (cIn.tokL = 'byte') or //"byte" es de tipo "tnType" + (cIn.tokL = 'word') or //"word" es de tipo "tnType" + (cIn.tokL = 'dword') then begin //"dword" es de tipo "tnType" + {Se sabe que es función, pero no se tiene la función exacta porque puede haber + versiones, sobrecargadas de la misma función.} + tmp := UpCase(cIn.tok); //guarda nombre de función + cIn.Next; //Toma identificador + //Busca la función + for xfun in listFunSys do begin + if (xfun.uname = tmp) then begin + {Encontró. Llama a la función de procesamiento, quien se encargará de + extraer los parámetros y analizar la sintaxis.} + if xfun.compile<>nil then begin + {LLeva la cuenta de llamadas, solo cuando hay subrutinas. Para funciones + INLINE, no vale la pena, gastar recursos.} + AddCallerTo(xfun); + end; + xfun.procCall(xfun, AddrUndef); //Para que devuelva el tipo y codifique el _CALL o lo implemente + //Puede devolver typNull, si no es una función. + Op := res; //copia tipo, almacenamiento y otros campos relevantes + {$IFDEF LogExpres} Op.txt:= tmp; {$ENDIF} //toma el texto + exit; + end; + end; + GenError(ER_NOT_IMPLEM_); + end else if cIn.tokType = tnIdentif then begin //puede ser variable, constante, función + GetOperandIdent(Op, ToSet); + //Puede salir con error. + end else if cIn.tokType = tnBoolean then begin //true o false + {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto + TipDefecBoolean(Op, cIn.tok); //encuentra tipo y valor + if HayError then exit; //verifica + cIn.Next; //Pasa al siguiente + end else if cIn.tok = '(' then begin //"(" + cIn.Next; + Inc(ExprLevel); //cuenta el anidamiento + Op := GetExpression(0); + Dec(ExprLevel); + if HayError then exit; + If cIn.tok = ')' Then begin + cIn.Next; //lo toma + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op, ToSet); + Op := res; //notar que se usa "res". + if HayError then exit;; + end; + end Else begin + GenError(ER_IN_EXPRESSI); + Exit; //error + end; + end else if cIn.tok = '[' then begin //Constant array + //Here we only know the operand is an array + srcpos := cIn.ReadSrcPos; + cIn.Next; + ProcComments; + //Start reading the items + ReadType := true; //Set flag to read the item type + Op.InitItems; //Prepare filling constant items + while not cIn.Eof and (cIn.tok <> ']') do begin + //Must be an item + Op1 := GetExpression(0); //read item + if HayError then exit; + if Op1.Sto <> stConst then begin + GenError('Expected constant item'); + exit; + end; + if ReadType then begin + //First item + itType := Op1.Typ; //Now We have the type of the item + ReadType := false; //Already read + end; + //Asure all items have the same type + if Op1.Typ <> itType then begin + GenError('Expected item of type: %s', [itType.name]); + exit; + end; + //Add the item to the operand + Op.AddConsItem(Op1.Value); + //Verify delimiter + endWithComma := false; + if cIn.tok = ',' then begin + cIn.Next; + ProcComments; + endWithComma := true; + end; + end; + if endWithComma then begin + GenError('Expected item.'); + exit; + end; + if cIn.tok = ']' then begin + //Raise the end of array. Now we can create new type. + Op.CloseItems; //Resize + //Now we can know the type of the item and of the array + cIn.Next; //Take ']'. + nElem := Op.Value.nItems; + if nElem = 0 then itType := typNull; //Something like [] + if not TreeElems.ExistsArrayType(itType, nElem, xtyp) then begin + //The type doesn't exist. We need to create. + typName := GenArrayTypeName(itType.name, nElem); //Op.nItems won't work + xtyp := CreateEleTypeArray(typName, srcPos, itType, nElem); + //Add to the syntax tree + xtyp.location := curLocation; //Ubicación del tipo (Interface/Implementation/...) + if TreeElems.curNode.idClass = eltBody then begin + //When the array is declared in some code-section. + TreeElems.AddElementParent(xtyp, true); //Add at the beginning + end else begin + //In declaration section. + TreeElems.AddElement(xtyp); + end; + end; + //Finally we set the operand type. + Op.SetAsConst(xtyp); + end else if cIn.Eof then begin + GenError('Unexpected end of file'); + exit; + end else begin //Only happen when break loop + exit; + end; + end else if cIn.tokType = tnOperator then begin + {Si sigue un operador puede ser un operador Unario. + El problema que tenemos, es que no sabemos de antemano el tipo, para saber si el + operador aplica a ese tipo como operador Unario Pre. Así que asumiremos que es así, + sino retrocedemos.} + posAct := cIn.PosAct; //Esto puede ser pesado en términos de CPU + oprTxt := cIn.tok; //guarda el operador + cIn.Next; //pasa al siguiente + GetOperand(Op1, ToSet); //Takes the operand. + if HayError then exit; + //Ahora ya tenemos el tipo. Hay que ver si corresponde el operador + opr := Op1.Typ.FindUnaryPreOperator(oprTxt); + if opr = nullOper then begin + {Este tipo no permite este operador Unario (a lo mejor ni es unario)} + cIn.PosAct := posAct; + GenError(ER_CAN_AP_OPER_, [oprTxt, Op1.Typ.name]); + exit; + end; + //Sí corresponde. Así que apliquémoslo + OperPre(Op1, opr); + Op := res; + end else begin + //No se reconoce el operador + GenError(ER_OPERAN_EXPEC); + end; +end; +procedure TCompilerBase.LogExpLevel(txt: string); +{Genera una cadena de registro , considerando el valor de "ExprLevel"} +begin + debugln(space(3*ExprLevel)+ txt ); +end; +function TCompilerBase.IsTheSameBitVar(var1, var2: TxpEleVar): boolean; inline; +{Indica si dos variables bit son la misma, es decir que apuntan, a la misma dirección +física} +begin + Result := (var1.addr0 = var2.addr0) and (var1.bit0 = var2.bit0); +end; +function TCompilerBase.AddCallerTo(elem: TxpElement): TxpEleCaller; +{Agregar una llamada a un elemento de la sintaxis. +Para el elemento llamador, se usa el nodo actual, que debería ser la función/cuerpo +desde donde se hace la llamada. +Devuelve la referencia al elemento llamador, cuando es efectiva la agregación, de otra +forma devuelve NIL.} +var + fc: TxpEleCaller; +begin + if not FirstPass then begin + //Solo se agregan llamadas en la primera pasada + Result := nil; + exit; + end; + fc := TxpEleCaller.Create; + //Carga información del estado actual del parser + fc.caller := TreeElems.curNode; + fc.curBnk := CurrBank; + fc.curPos := cIn.ReadSrcPos; + elem.lstCallers.Add(fc); + Result := fc; +end; +function TCompilerBase.AddCallerTo(elem: TxpElement; callerElem: TxpElement): TxpEleCaller; +{El elemento llamador es "callerElem". Agrega información sobre el elemento "llamador", es decir, el elemento que hace +referencia a este elemento.} +begin + Result := AddCallerTo(elem); + if Result = nil then exit; + Result.caller := callerElem; +end; +function TCompilerBase.AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; +{Versión de AddCallerTo() que agrega además la posición de la llamada, en lugar de usar +la posición actual.} +begin + Result := AddCallerTo(elem); + if Result = nil then exit; + Result.curPos := curPos; //Corrige posición de llamada +end; +procedure TCompilerBase.Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); +{Ejecuta una operación con dos operandos y un operador. "opr" es el operador de Op1. +El resultado debe devolverse en "res". En el caso de intérpretes, importa el +resultado de la Operación. +En el caso de compiladores, lo más importante es el tipo del resultado, pero puede +usarse también "res" para cálculo de expresiones constantes. +} +var + Operation: TxpOperation; + tmp: String; +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+', Op2='+Op2.txt+' --'); + {$ENDIF} + //Busca si hay una operación definida para: -opr- +//debugln('Op1: cat=%s, typ=%s',[Op1.StoOpStr, Op1.Typ.name]); +//debugln('Op2: cat=%s, typ=%s',[Op2.StoOpStr, Op2.Typ.name]); + Operation := opr.FindOperation(Op2.Typ); + if Operation = nil then begin + tmp := '(' + Op1.Typ.name + ') '+ opr.txt; + tmp := tmp + ' ('+Op2.Typ.name+')'; + GenError('Illegal Operation: %s', + [tmp]); + exit; + end; + {Llama al evento asociado con p1 y p2 como operandos. } + p1 := @Op1; p2 := @Op2; { Se usan punteros por velocidad. De otra forma habría que + copiar todo el objeto.} + {Ejecuta la operación. + Los parámetros de entrada se dejan en p1 y p2. El resultado debe dejarse en "res"} + Operation.proc(Operation, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+Op1.catOpChr + ' ' + opr.txt + ' ' + Op2.catOpChr+') -> ' + + res.catOpChr); + res.txt := Op1.txt + ' ' + opr.txt + ' ' + Op2.txt; //texto de la expresión + {$ENDIF} +End; +procedure TCompilerBase.OperPre(var Op1: TOperand; opr: TxpOperator); +{Ejecuta una operación con un operando y un operador unario de tipo Pre. "opr" es el +operador de Op1. +El resultado debe devolverse en "res".} +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+' --'); + {$ENDIF} + if opr.OperationPre = nil then begin + GenError('Illegal Operation: %s', + [opr.txt + '('+Op1.Typ.name+')']); + exit; + end; + {Llama al evento asociado con p1 como operando. } + p1 := @Op1; {Solo hay un parámetro} + {Ejecuta la operación. El resultado debe dejarse en "res"} + opr.OperationPre(opr, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+ opr.txt + ' ' + Op1.catOpChr+ ') -> ' + res.catOpChr); + res.txt := opr.txt + Op1.txt; + {$ENDIF} +end; +procedure TCompilerBase.OperPost(var Op1: TOperand; opr: TxpOperator); +{Ejecuta una operación con un operando y un operador unario de tipo Post. "opr" es el +operador de Op1. +El resultado debe devolverse en "res".} +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+' --'); + {$ENDIF} + if opr.OperationPost = nil then begin + GenError('Illegal Operation: %s', + ['('+Op1.Typ.name+')' + opr.txt]); + exit; + end; + {Llama al evento asociado con p1 como operando. } + p1 := @Op1; {Solo hay un parámetro} + {Ejecuta la operación. El resultado debe dejarse en "res"} + opr.OperationPost(opr, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+Op1.catOpChr+ ' ' +opr.txt +') -> ' + res.catOpChr); + res.txt := Op1.txt + opr.txt; //indica que es expresión + {$ENDIF} +end; +function TCompilerBase.GetOperator(const Op: Toperand): TxpOperator; +{Busca la referencia a un operador de "Op", leyendo del contexto de entrada +Si no encuentra un operador en el contexto, devuelve NIL, pero no lo toma. +Si el operador encontrado no se aplica al operando, devuelve nullOper.} +begin + if cIn.tokType <> tnOperator then exit(nil); + //Hay un operador + Result := Op.Typ.FindBinaryOperator(cIn.tok); + if Result = nullOper then begin + //No lo encontró, puede ser oeprador unario + Result := Op.Typ.FindUnaryPostOperator(cIn.tok); + end; + cIn.Next; //toma el token +end; +function TCompilerBase.GetExpression(const prec: Integer): TOperand; //inline; +{Expression analyzer. This is probably, the most important function of the compiler + It process an expression in the current input context, and call events in order to + the expression be compiled (or interpreted if we implement an interpreter). + Returns an operand containing information about the result of the expression. + Expression evaluation stops when no more operators founds or found an operator + with precedence smaller than parameter "prec".} +var + Op1, Op2 : TOperand; //Operandos + opr1: TxpOperator; //Operadores + p: TPosCont; +begin + //----------------coger primer operando------------------ + GetOperand(Op1, false); + if HayError then exit; + //Verifica si termina la expresion + cIn.SkipWhites; + p := cIn.PosAct; //por si necesita volver + opr1 := GetOperator(Op1); + if opr1 = nil then begin //no sigue operador + //Expresión de un solo operando. Lo carga por si se necesita + //Oper(Op1); + Result:=Op1; + exit; //termina ejecucion + end; + //------- sigue un operador --------- + //verifica si el operador aplica al operando + if opr1 = nullOper then begin + GenError(ER_UND_OPER_TY_, [opr1.txt, Op1.Typ.name]); + exit; + end; + //inicia secuencia de lectura: + while opr1<>nil do begin + //¿Delimitada por precedencia? + If opr1.prec<= prec Then begin //es menor que la que sigue, expres. + Result := Op1; //solo devuelve el único operando que leyó + cIn.PosAct := p; //vuelve + exit; + End; + if opr1.OperationPost<>nil then begin //Verifica si es operación Unaria + OperPost(Op1, opr1); + if HayError then exit; + Op1 := res; + cIn.SkipWhites; + //Verificación + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op1, False); + if HayError then exit;; + Op1 := res; //notar que se usa "res". + cIn.SkipWhites; + end; + p := cIn.PosAct; //actualiza por si necesita volver + //Verifica operador + opr1 := GetOperator(Op1); + continue; + end; + //--------------------coger segundo operando-------------------- +// Op2 := GetOperandPrec(Opr1.prec); //toma operando con precedencia + Op2 := GetExpression(Opr1.prec); //toma operando con precedencia + if HayError then exit; + //prepara siguiente operación + Oper(Op1, opr1, Op2); //evalua resultado en "res" + Op1 := res; + if HayError then exit; + cIn.SkipWhites; + opr1 := GetOperator(Op1); {lo toma ahora con el tipo de la evaluación Op1 (opr1) Op2 + porque puede que Op1 (opr1) Op2, haya cambiado de tipo} + end; //hasta que ya no siga un operador + Result := Op1; //aquí debe haber quedado el resultado +end; +procedure TCompilerBase.GetExpressionE(posExpres: TPosExpres); +{Used to compile complete expressions. It means expressions that can be considered as +complete Pascal instructions, like: + x := 1; //Assigment + proc1(1,2,3); //Call to procedure/fucntion + p^ := 1 + x; //Assigment + obj.field := funct1(); //Assigment +To process subexpresions (ROB o ROU) or function parameters, it must be used +GetExpression(). +No result are returned, because for definition, instructions doesn't return values. +} +var + Op1, Op2: TOperand; + opr1: TxpOperator; +begin + Inc(ExprLevel); //Count the nesting + {$IFDEF LogExpres} LogExpLevel('>Inic.expr'); {$ENDIF} + OnExprStart; //Call event + try + {First we stop code generation, because we don't know if the instruction is a getter: + proc() + or a setter: + a := b; + } + //First operand compiled always as setter, because it's supposed to be + //de first part of an assigment. + GetOperand(Op1, true); //Compile as setter. + if HayError then exit; + ProcComments; + opr1 := GetOperator(Op1); //We can validate assigment + if opr1 = nil then begin + //Not following an operator. We assume instruction ends; + if (Op1.Sto = stConst) {and (Op1.Typ<>typNull)} then begin + //Instruction alone is not valid + GenError('Constants are not allowed here.'); + end; + end else begin + //We have an operator. + case opr1.txt of + ':=', '+=', '-=' : begin end; //Expected + else + GenError('Expected ":=", "+=" or "-=".'); + exit; + end; + Op2 := GetExpression(Opr1.prec); //Value to assign + if HayError then exit; + //Call de operation + Oper(Op1, opr1, Op2); //Compile operation + //Can generate error + end; + finally + OnExprEnd(posExpres); //Call end event + {$IFDEF LogExpres} LogExpLevel('>Fin.expr'); {$ENDIF} + Dec(ExprLevel); + {$IFDEF LogExpres} + if ExprLevel = 0 then debugln(''); + {$ENDIF} + end; +end; +procedure TCompilerBase.LoadToRT(Op: TOperand; modReturn: boolean = false); +{Carga un operando a los Registros de Trabajo (RT). +El parámetrto "modReturn", indica que se quiere generar un RETURN, dejando en ls RT +el valor de la expresión.} +begin + if Op.Typ.OnLoadToRT=nil then begin + //No implementado + GenError('Not implemented.'); + end else begin + Op.Typ.OnLoadToRT(@Op, modReturn); + end; +end; + +function TCompilerBase.ExpandRelPathTo(BaseFile, FileName: string): string; +{Convierte una ruta relativa (FileName), a una absoluta, usnado como base la ruta de +otro archivo (BaseFile)} +var + BasePath: RawByteString; +begin + if pos(DirectorySeparator, FileName)=0 then begin + //Ruta relativa. Se completa + BasePath := ExtractFileDir(BaseFile); + if BasePath = '' then begin + //No hay de donde completar, usa la ruta actual + Result := ExpandFileName(FileName); + end else begin + Result := ExtractFileDir(BaseFile) + DirectorySeparator + FileName; + end; + end else begin + //Tiene "DirectorySeparator", se asume que es ruta absoluta, y no se cambia. + Result := FileName; + end; +end; + +function TCompilerBase.hexFilePath: string; +begin + Result := ExpandRelPathTo(mainFile, hexfile); //Convierte a ruta absoluta +end; +function TCompilerBase.mainFilePath: string; +begin + Result := mainFile; +end; +procedure TCompilerBase.RefreshAllElementLists; +begin + //TreeElems.RefreshAllFuncs; + //TreeElems.RefreshAllCons; + TreeElems.RefreshAllUnits; //Caso especial + //TreeElems.RefreshAllVars; + //TreeElems.RefreshAllTypes; +end; +procedure TCompilerBase.RemoveUnusedFunc; +{Explora las funciones, para quitarle las referencias de funciones no usadas. +Para que esta función trabaje bien, debe haberse llamado a RefreshAllElementLists(). } + function RemoveUnusedFuncReferences: integer; + {Explora las funciones, para quitarle las referencias de funciones no usadas. + Devuelve la cantidad de funciones no usadas. + Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllFuncs". } + var + fun, fun2: TxpEleFun; + begin + Result := 0; + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + inc(Result); //Lleva la cuenta + //Si no se usa la función, tampoco sus elementos locales + fun.SetElementsUnused; + //También se quita las llamadas que hace a otras funciones + for fun2 in TreeElems.AllFuncs do begin + fun2.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando %d llamadas desde: %s', [n, fun.name]); + end; + //Incluyendo a funciones del sistema + for fun2 in listFunSys do begin + fun2.RemoveCallsFrom(fun.BodyNode); + end; + end; + end; + end; +var + noUsed, noUsedPrev: Integer; +begin + //Explora las funciones, para identifcar a las no usadas + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedFuncReferences; + until noUsed = noUsedPrev; +end; +procedure TCompilerBase.RemoveUnusedVars; +{Explora las variables de todo el programa, para detectar las que no son usadas +(quitando las referencias que se hacen a ellas)). +Para que esta función trabaje bien, debe haberse llamado a RefreshAllElementLists() +y a RemoveUnusedFunc(). } + function RemoveUnusedVarReferences: integer; + {Explora las variables de todo el programa, de modo que a cada una: + * Le quita las referencias hechas por variables no usadas. + Devuelve la cantidad de variables no usadas. + Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllVars" y + "TreeElems.AllFuncs", e inclusive "TreeElems.AllVars" debe estar ya filtrada + con las funciones no usadas. } + var + xvar, xvar2: TxpEleVar; + fun: TxpEleFun; + begin + Result := 0; + {Quita, a las variables, las referencias de variables no usadas. + Una referencia de una variable a otra se da, por ejemplo, en el caso: + VAR + STATUS_IRP: bit absolute STATUS.7; + En este caso, la variable STATUS_IRP, hace referencia a STATUS. + Si STATUS_IRP no se usa, esta referencia debe quitarse. + } + for xvar in TreeElems.AllVars do begin + if xvar.nCalled = 0 then begin + //Esta es una variable no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a otras variables + for xvar2 in TreeElems.AllVars do begin + xvar2.RemoveCallsFrom(xvar); +// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); + end; + end; + end; + //Ahora quita las referencias de funciones no usadas + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + //Esta es una función no usada + inc(Result); //Lleva la cuenta + for xvar2 in TreeElems.AllVars do begin + xvar2.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); + end; + end; + end; + end; +var + noUsed, noUsedPrev: Integer; +begin + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedVarReferences; + until noUsed = noUsedPrev; //Ya no se eliminan más variables +end; +procedure TCompilerBase.RemoveUnusedCons; +{Explora las constantes de todo el programa, para detectar las que no son usadas +(quitando las referencias que se hacen a ellas)). +Para que esta función trabaje bien, debe haberse llamado a RefreshAllElementLists() +y a RemoveUnusedFunc(). } + function RemoveUnusedConsReferences: integer; + {Explora las constantes de todo el programa, de modo que a cada una: + * Le quita las referencias hechas por constantes no usadas. + Devuelve la cantidad de constantes no usadas.} + var + cons, cons2: TxpEleCon; + xvar: TxpEleVar; + fun: TxpEleFun; + begin + Result := 0; + {Quita, a las constantes, las referencias de constantes no usadas. + Una referencia de una constante a otra se da, por ejemplo, en el caso: + CONST + CONST_2 = CONST_1 + 1; + En este caso, la constante CONST_2, hace referencia a CONST_1. + Si CONST_2 no se usa, esta referencia debe quitarse. + } + for cons in TreeElems.AllCons do begin + if cons.nCalled = 0 then begin + //Esta es una constante no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a otras constantes + for cons2 in TreeElems.AllCons do begin + cons2.RemoveCallsFrom(cons); +// debugln('Eliminando llamada a %s desde: %s', [cons2.name, cons.name]); + end; + end; + end; + {Si se incluye la posibilidad de definir variables a partir de constantes, + como en: + VAR mi_var: byte absolute CONST_DIR; + Entonces es necesario este código:} + for xvar in TreeElems.AllVars do begin + if xvar.nCalled = 0 then begin + //Esta es una variable no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a constantes + for cons2 in TreeElems.AllCons do begin + cons2.RemoveCallsFrom(xvar); +// debugln('Eliminando llamada a %s desde: %s', [cons2.name, xvar.name]); + end; + end; + end; + //Ahora quita las referencias de funciones no usadas + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + //Esta es una función no usada + inc(Result); //Lleva la cuenta + for cons2 in TreeElems.AllCons do begin + cons2.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando llamada a %s desde: %s', [cons2.name, cons.name]); + end; + end; + end; + end; +var + noUsed, noUsedPrev: Integer; +begin + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedConsReferences; + until noUsed = noUsedPrev; //Ya no se eliminan más constantes +end; +procedure TCompilerBase.RemoveUnusedTypes; +{Explora los tipos (definidos por el usuario) de todo el programa, para detectar +los que no son usados (quitando las referencias que se hacen a ellos)). +Para que esta función trabaje bien, debe haberse llamado a RefreshAllElementLists() +y a RemoveUnusedFunc(). } + function RemoveUnusedTypReferences: integer; + {Explora los tipos de todo el programa, de modo que a cada uno: + * Le quita las referencias hechas por constantes, variables, tipos y funciones no usadas. + Devuelve la cantidad de tipos no usados. + ////////// POR REVISAR ///////////} + var + cons: TxpEleCon; + xvar: TxpEleVar; + xtyp, xtyp2: TxpEleType; + fun : TxpEleFun; + begin + Result := 0; + {Quita, a los tipos, las referencias de constantes no usadas (de ese tipo).} + for cons in TreeElems.AllCons do begin + if cons.nCalled = 0 then begin + //Esta es una constante no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a otras constantes + for xtyp in TreeElems.AllTypes do begin + xtyp.RemoveCallsFrom(cons); +// debugln('Eliminando llamada a %s desde: %s', [xtyp.name, cons.name]); + end; + end; + end; + {Quita, a los tipos, las referencias de variables no usadas (de ese tipo).} + for xvar in TreeElems.AllVars do begin + if xvar.nCalled = 0 then begin + //Esta es una variable no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a constantes + for xtyp in TreeElems.AllTypes do begin + xtyp.RemoveCallsFrom(xvar); +// debugln('Eliminando llamada a %s desde: %s', [xtyp.name, xvar.name]); + end; + end; + end; + {Quita, a los tipos, las referencias de otros tipos no usadas. + Como en los tipos que se crean a partir de otros tipos} + for xtyp2 in TreeElems.AllTypes do begin + if xtyp2.nCalled = 0 then begin + //Esta es una variable no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que podría estar haciendo a constantes + for xtyp in TreeElems.AllTypes do begin + xtyp.RemoveCallsFrom(xtyp2); +// debugln('Eliminando llamada a %s desde: %s', [xtyp.name, xtyp2.name]); + end; + end; + end; + //Ahora quita las referencias de funciones no usadas (de ese tipo) + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + //Esta es una función no usada + inc(Result); //Lleva la cuenta + for xtyp in TreeElems.AllTypes do begin + xtyp.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando llamada a %s desde: %s', [xtyp.name, cons.name]); + end; + end; + end; + end; +var + noUsed, noUsedPrev: Integer; +begin + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedTypReferences; + until noUsed = noUsedPrev; //Ya no se eliminan más constantes +end; +procedure TCompilerBase.UpdateCallersToUnits; +{Explora recursivamente el arbol de sintaxis para encontrar( y agregar) las +llamadas que se hacen a una unidad desde el programa o unidad que la incluye. +El objetivo final es determinar los accesos a las unidades.} + procedure ScanUnits(nod: TxpElement); + var + ele, eleInter , eleUnit: TxpElement; + uni : TxpEleUnit; + cal , c: TxpEleCaller; + begin +//debugln('+Scanning in:'+nod.name); + if nod.elements<>nil then begin + for ele in nod.elements do begin + //Solo se explora a las unidades + if ele.idClass = eltUnit then begin +//debugln(' Unit:'+ele.name); + //"ele" es una unidad de "nod". Verifica si es usada + uni := TxpEleUnit(ele); //Accede a la unidad. + uni.ReadInterfaceElements; //Accede a sus campos + {Buscamos por los elementos de la interfaz de la unidad para ver si son + usados} + for eleInter in uni.InterfaceElements do begin +//debugln(' Interface Elem:'+eleInter.name); + //Explora por los llamadores de este elemento. + for cal in eleInter.lstCallers do begin + eleUnit := cal.CallerUnit; //Unidad o programa + if eleUnit = nod then begin + {Este llamador está contenido en "nod". Lo ponemos como llamador de + la unidad.} + c := AddCallerTo(uni); + c.caller := cal.caller; + c.curPos := cal.curPos; +// debugln(' Added caller to %s from %s (%d,%d)', +// [uni.name, c.curPos.fil, c.curPos.row, c.curPos.col]); + end; + end; + end; + //Ahora busca recursivamente, por si la unidad incluyea a otras unidades + ScanUnits(ele); //recursivo + end; + end; + end; + end; +begin + ScanUnits(TreeElems.main); +end; +//Inicialización +constructor TCompilerBase.Create; +begin + ClearError; //inicia motor de errores + //Crea arbol de elementos y listas + TreeElems := TXpTreeElements.Create; + TreeDirec := TXpTreeElements.Create; + listFunSys := TxpEleFuns.Create(true); + listTypSys := TxpEleTypes.Create(true); + //inicia la sintaxis + xLex := TSynFacilSyn.Create(nil); //crea lexer + + cIn := TContexts.Create(xLex); //Crea lista de Contextos + ejecProg := false; + //Actualiza las referencias a los tipos de tokens existentes en SynFacilSyn + tnEol := xLex.tnEol; + tnSymbol := xLex.tnSymbol; + tnSpace := xLex.tnSpace; + tnIdentif := xLex.tnIdentif; + tnNumber := xLex.tnNumber; + tnKeyword := xLex.tnKeyword; + tnString := xLex.tnString; + tnComment := xLex.tnComment; + //Atributos + tkEol := xLex.tkEol; + tkSymbol := xLex.tkSymbol; + tkSpace := xLex.tkSpace; + tkIdentif := xLex.tkIdentif; + tkNumber := xLex.tkNumber; + tkKeyword := xLex.tkKeyword; + tkString := xLex.tkString; + tkComment := xLex.tkComment; + //Crea nuevos tipos necesarios para el Analizador Sintáctico + tnOperator := xLex.NewTokType('Operator', tkOperator); //necesario para analizar expresiones + tnBoolean := xLex.NewTokType('Boolean', tkBoolean); //constantes booleanas + tnSysFunct := xLex.NewTokType('SysFunct', tkSysFunct); //funciones del sistema + tnType := xLex.NewTokType('Types', tkType); //tipos de datos + //Containers for functions + usedFuncs := TxpEleFuns.Create(false); //Only references + unusedFuncs:= TxpEleFuns.Create(false); +end; +destructor TCompilerBase.Destroy; +begin + unusedFuncs.Destroy; + usedFuncs.Destroy; + cIn.Destroy; //Limpia lista de Contextos + xLex.Free; + listTypSys.Destroy; + listFunSys.Destroy; + TreeDirec.Destroy; + TreeElems.Destroy; + inherited Destroy; +end; + +end. diff --git a/Source/CompMain.pas b/Source/CompMain.pas new file mode 100644 index 00000000..bb0740d2 --- /dev/null +++ b/Source/CompMain.pas @@ -0,0 +1,1968 @@ +unit CompMain; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, Types, CompBase, XpresElementsPIC, Globales, CompOperands, + XpresTypesPIC, XpresBas; +type + + { TCompMain } + TCompMain = class(TCompilerBase) + protected + function StartOfSection: boolean; + procedure CompileLastEnd; + procedure AssignRAMtoVar(xvar: TxpEleVar; shared: boolean = false); + procedure CreateLocalVarsAndPars; + protected //Métodos OVERRIDE (Podrían ponerse como estáticas en CompBase) + procedure TipDefecNumber(var Op: TOperand; toknum: string); override; + procedure TipDefecString(var Op: TOperand; tokcad: string); override; + procedure TipDefecBoolean(var Op: TOperand; tokcad: string); override; + protected + procedure GetAdicVarDeclar(xType: TxpEleType; out aditVar: TAdicVarDec); + procedure ReadProcHeader(out procName: String; out retType: TxpEleType; out + srcPos: TSrcPos; out pars: TxpParFuncArray; out IsInterrupt, + IsForward: Boolean); + procedure CompileVarDeclar(IsInterface: boolean = false); + procedure CompileGlobalConstDeclar; + procedure CompileTypeDeclar(elemLocat: TxpEleLocation; typName: string = '' + ); + function GetTypeDeclar(out decStyle: TTypDeclarStyle; out + TypeCreated: boolean): TxpEleType; + function GetTypeDeclarSimple(): TxpEleType; + + function VerifyEND: boolean; + function GetExpressionBool: boolean; + procedure Tree_AddElement(elem: TxpElement); + function OpenContextFrom(filePath: string): boolean; + function CompileStructBody(GenCode: boolean): boolean; + function CompileConditionalBody(out FinalBank: byte): boolean; + function CompileNoConditionBody(GenCode: boolean): boolean; + procedure CompileInstruction; + procedure CompileInstructionDummy; + procedure CompileCurBlock; + procedure CompileCurBlockDummy; + function IsUnit: boolean; + procedure CompileProcDeclar; + procedure CompileProgram; + procedure CompileUsesDeclaration; + procedure CompileUnit(uni: TxpElement); + public + OnAfterCompile: procedure of object; //Al finalizar la compilación. + {Indica que TCompiler, va a acceder a un archivo, peor está pregunatndo para ver + si se tiene un Stringlist, con los datos ya caragdos del archivo, para evitar + tener que abrir nuevamente al archivo.} + OnRequireFileString: procedure(FilePath: string; var strList: TStrings) of object; + protected + procedure array_high(const OpPtr: pointer); + procedure array_length(const OpPtr: pointer); + procedure array_low(const OpPtr: pointer); + end; + +procedure SetLanguage; + +implementation +var + ER_INV_MEMADDR, ER_EXP_VAR_IDE, ER_NUM_ADD_EXP, ER_CON_EXP_EXP, + ER_EQU_EXPECTD, ER_IDEN_EXPECT, ER_NOT_IMPLEM_, ER_SEM_COM_EXP, + ER_INV_ARR_SIZ, ER_ARR_SIZ_BIG, ER_IDE_TYP_EXP, ER_IDE_CON_EXP, + ER_EQU_COM_EXP, ER_DUPLIC_IDEN, ER_NOTYPDEF_NU, ER_EOF_END_EXP, + ER_ELS_UNEXPEC, ER_END_EXPECTE, ER_NOT_AFT_END, ER_ONLY_ONE_REG, + ER_BOOL_EXPECT, ER_INST_NEV_EXE, ER_UNKN_STRUCT, ER_ERR_IN_NUMB, + ER_UNDEF_TYPE_, ER_DUPLIC_FUNC_, ER_FIL_NOFOUND, ER_PROG_NAM_EX + : string; + +procedure SetLanguage; +begin + {$I ..\language\tra_CompMain.pas} +end; +function TCompMain.StartOfSection: boolean; +begin + Result := (cIn.tokL ='var') or (cIn.tokL ='const') or + (cIn.tokL ='type') or (cIn.tokL ='procedure') or (cIn.tokL ='inline'); +end; +procedure TCompMain.CompileLastEnd; +{Compila la parte de final de un programa o una unidad} +begin + if cIn.Eof then begin + GenError(ER_EOF_END_EXP); + exit; //sale + end; + if cIn.tokL <> 'end' then begin //verifica si termina el programa + if cIn.tokL = 'else' then begin + //Precisa un poco más en el error + GenError(ER_ELS_UNEXPEC); + exit; //sale + end else begin + GenError(ER_END_EXPECTE); + exit; //sale + end; + end; + cIn.Next; //coge "end" + //Debería seguir el punto + if not CaptureTok('.') then exit; + //no debe haber más instrucciones + ProcComments; + if not cIn.Eof then begin + GenError(ER_NOT_AFT_END); + exit; //sale + end; +end; + +procedure TCompMain.TipDefecNumber(var Op: TOperand; toknum: string); +{Procesa constantes numéricas, ubicándolas en el tipo de dato apropiado (byte, word, ... ) + Si no logra ubicar el tipo de número, o no puede leer su valor, generará un error.} +var + n: int64; //para almacenar a los enteros +// f: extended; //para almacenar a reales +begin + if pos('.',toknum) <> 0 then begin //es flotante + GenError('Unvalid float number.'); //No hay soporte aún para flotantes +// try +// f := StrToFloat(toknum); //carga con la mayor precisión posible +// except +// Op.typ := nil; +// GenError('Unvalid float number.'); +// exit; +// end; +// //busca el tipo numérico más pequeño que pueda albergar a este número +// Op.size := 4; //se asume que con 4 bytes bastará +// {Aquí se puede decidir el tamaño de acuerdo a la cantidad de decimales indicados} +// +// Op.valFloat := f; //debe devolver un extended +// menor := 1000; +// for i:=0 to typs.Count-1 do begin +// { TODO : Se debería tener una lista adicional TFloatTypes, para acelerar la +// búsqueda} +// if (typs[i].cat = t_float) and (typs[i].size>=Op.size) then begin +// //guarda el menor +// if typs[i].size < menor then begin +// imen := i; //guarda referencia +// menor := typs[i].size; +// end; +// end; +// end; +// if menor = 1000 then //no hubo tipo +// Op.typ := nil +// else //encontró +// Op.typ:=typs[imen]; +// + end else begin //es entero + //Intenta convertir la cadena. Notar que se reconocen los formatos $FF y %0101 + if not TryStrToInt64(toknum, n) then begin + //Si el lexer ha hecho bien su trabajo, esto solo debe pasar, cuando el + //número tiene mucHos dígitos. + GenError('Error in number.'); + exit; + end; + Op.valInt := n; //copia valor de constante entera + {Asigna un tipo, de acuerdo al rango. Notar que el tipo más pequeño, usado + es el byte, y no el bit.} + if (n>=0) and (n<=255) then begin + Op.SetAsConst(typByte); + end else if (n>= 0) and (n<=$FFFF) then begin + Op.SetAsConst(typWord); + end else if (n>= 0) and (n<=$FFFFFFFF) then begin + Op.SetAsConst(typDWord); + end else begin //no encontró + GenError(ER_NOTYPDEF_NU); + Op.SetAsNull; + end; + end; +end; +procedure TCompMain.TipDefecString(var Op: TOperand; tokcad: string); +//Devuelve el tipo de cadena encontrado en un token +//var +// i: Integer; +begin +{ Op.catTyp := t_string; //es cadena + Op.size:=length(tokcad); + //toma el texto + Op.valStr := copy(cIn.tok,2, length(cIn.tok)-2); //quita comillas + //////////// Verifica si hay tipos string definidos //////////// + if length(Op.valStr)=1 then begin + Op.typ := tipChr; + end else + Op.typ :=nil; //no hay otro tipo} +end; +procedure TCompMain.TipDefecBoolean(var Op: TOperand; tokcad: string); +//Devuelve el tipo de cadena encontrado en un token +begin + //convierte valor constante + Op.SetAsConst(typBool); + Op.valBool:= (tokcad[1] in ['t','T']); +end; + +procedure TCompMain.GetAdicVarDeclar(xType: TxpEleType; out aditVar: TAdicVarDec); +{Verify aditional settings for var declarations, after the type definition. These settings +can be: + ABSOLUTE + REGISTER + +All aditional settings are returned in "aditVar". +IMPORTANT: "xType" can change when is an unspecified size array ( like []byte ) and an +initialization is provided. No new type elements are created or destroyed. + . } + function ReadAddres(tok: string): word; + {Lee una dirección de RAM a partir de una cadena numérica. + Puede generar error.} + var + n: LongInt; + begin + //COnvierte cadena (soporta binario y hexadecimal) + if not TryStrToInt(tok, n) then begin + //Podría fallar si es un número muy grande + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + callValidRAMaddr(n); //Validate address + if HayError then exit(0); + Result := n; + end; + function ReadAddresBit(tok: string): byte; + {Lee la parte del bit de una dirección de RAM a partir de una cadena numérica. + Puede generar error.} + var + n: Longint; + begin + if not TryStrToInt(tok, n) then begin + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + if (n<0) or (n>7) then begin + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + Result := n; //no debe fallar + end; +var + xvar: TxpEleVar; + n: integer; + Op, OpInit: TOperand; + IsBit: boolean; +begin + aditVar.srcDec := cIn.PosAct; //Posición de inicio de posibles parámetros adic. + aditVar.hasAdic := decNone; //Bandera + aditVar.hasInit := false; + aditVar.absVar := nil; //Por defecto + if (cIn.tokL = 'absolute') or (cIn.tok = '@') then begin + //// Hay especificación de dirección absoluta //// + aditVar.hasAdic := decAbsol; //marca bandera + cIn.Next; + ProcComments; + if cIn.tokType = tnNumber then begin + if (cIn.tok[1]<>'$') and ((pos('e', cIn.tok)<>0) or (pos('E', cIn.tok)<>0)) then begin + //La notación exponencial, no es válida. + GenError(ER_INV_MEMADDR); + exit; + end; + n := pos('.', cIn.tok); //no debe fallar + if n=0 then begin + //Número entero sin parte decimal + aditVar.absAddr := ReadAddres(cIn.tok); + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + //Puede que siga la parte de bit + if cIn.tok = '.' then begin + cIn.Next; + IsBit := true; //Tiene parte de bit + aditVar.absBit := ReadAddresBit(cIn.tok); //Parte decimal + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + end else begin + IsBit := false; //No tiene parte de bit + end; + end else begin + //Puede ser el formato ., en un solo token, que es válido. + IsBit := true; //Se deduce que tiene punto decimal + //Ya sabemos que tiene que ser decimal, con punto + aditVar.absAddr := ReadAddres(copy(cIn.tok, 1, n-1)); + //Puede haber error + aditVar.absBit := ReadAddresBit(copy(cIn.tok, n+1, 100)); //Parte decimal + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + end; + end else if cIn.tokType = tnIdentif then begin + //Puede ser variable + GetOperandIdent(Op, true); // + if HayError then exit; + if Op.Sto <> stVariab then begin + GenError(ER_EXP_VAR_IDE); + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + exit; + end; + //Mapeado a variable. Notar que puede ser una variable temporal, si se usa: .0 + xvar := Op.rVar; + if Op.rVarBase=nil then begin + aditVar.absVar := Op.rVar; //Guarda referencia + end else begin + {Es un caso como ".0", conviene devolver la referencia a , + en lugar de a la variable ".0", considerando que: + * GetOperandIdent() usa , para registrar la llamada. + * Esta referencia se usará luego para ver variables no usadas en + TCompiler.CompileLinkProgram().} + aditVar.absVar := Op.rVarBase; //Guarda referencia + end; + //Ya tiene la variable en "xvar". + if xvar.typ.IsBitSize then begin //boolean o bit + IsBit := true; //Es una dirección de bit + aditVar.absAddr := xvar.addr; //debe ser absoluta + aditVar.absBit := xvar.adrBit.bit; + end else begin + //Es cualquier otra variable, que no sea bit. Se intentará + IsBit := false; //Es una dirección normal (byte) + aditVar.absAddr := xvar.addr; //debe ser absoluta + end; + if aditVar.absAddr = ADRR_ERROR then begin + //No se puede obtener la dirección. + GenError('Cannot locate variable at: %s', [xvar.name]); + // GenError('Internal Error: TxpEleVar.AbsAddr.'); + exit; + end; + end else begin //error + GenError(ER_NUM_ADD_EXP); + cIn.Next; //pasa siempre + exit; + end; + end else if cIn.tokL = 'register' then begin + // Es de tipo registro + aditVar.hasAdic := decRegis; //marca bandera + cIn.Next; + ProcComments; + end; + //Verifica compatibilidad de tamaños +// if aditVar.hasAdic in [decRegisW] then begin +// //Solo pueden ser de tamaño byte +// if not xType.IsByteSize then begin +// GenError('Only byte-size types can be a specific register.'); +// exit; +// end; +// end; + //Puede seguir una sección de inicialización: var: char = 'A'; + ProcComments; + if cIn.tok = '=' then begin + aditVar.hasInit := true; + cIn.Next; //lo toma + ProcComments; + //Aquí debe seguir el valor inicial + OpInit := GetExpression(0); + if HayError then exit; + if OpInit.Sto <> stConst then begin + GenError(ER_CON_EXP_EXP); + exit; + end; + //Ya se tiene el valor constante para inicializar variable. + if aditVar.hasAdic in [decRegis] then begin + GenError('Cannot initialize register variables.'); + exit; + end; + end else begin + //No hay asignación inicial. + aditVar.hasInit := false; + end; + //Valida el caso de areglos dinámicos + if (xType.catType = tctArray) and (xType.nItems = -1) and not aditVar.hasInit then begin + //Es un arreglo dinámico. Debió inicializarse. + GenError(ER_EQU_EXPECTD); + exit; + end; + {Ya se validó la pertinencia de la inicialización y ya se tiene el operando de + inicialización. Ahora toca validar la compatibilidad de los tipos.} + //Por ahora solo se permite inicializar arreglos. + if aditVar.hasInit then begin + if (xType.catType = tctArray) then begin + //Arrays have some particular behaviour + if (xType.itmType = typChar) then begin + //Special case for Char arrays. They can be initializaed with string. + if OpInit.Typ = typChar then begin + //Caso especial. Se puede considerar un string + OpInit.SetAsConst(xType); //Set as constant array of char + OpInit.StringToArrayOfChar( chr(OpInit.valInt) ); //Set ítems from string + end else if OpInit.Typ = typString then begin + OpInit.SetAsConst(xType); //Set as constant array of char + OpInit.StringToArrayOfChar( OpInit.valStr ); //Set ítems from string + end; + end; + //Validation for category + if OpInit.Typ.catType <> tctArray then begin + GenError('Expected an array.'); + exit; + end; + //Here we assure xType and OpInit are both arrays. + //If dynamic, the size depends o initial value + if xType.nItems= -1 then begin + //Dynamic size + xType.nItems := OpInit.nItems; //Update array size + //Type name needs to be updated too. + xType.name := GenArrayTypeName(xType.itmType.name, OpInit.nItems); + //NOTE that type name (and structrure) has changed. + end; + //Validation for item types. + if xType.itmType <> OpInit.Typ.itmType then begin + GenError('Item type doesn''t match for initialize array.'); + exit; + end; + //Validation for size. + if xType.nItems < OpInit.nItems then begin + GenError('Too many items to initialize array.'); + //exit + end; + //Validate type compatibility + {We could be tempted to compare xType and OpInit.Typ here but this cannot be done, + because OpInit.Typ will be (most of the times) always different from xType, + because xType exists but it hasn't been added to the Syntax Tree, so OpInit.Typ + had never the chance to find it, when creating. + However, until here we have validated that xType and OpInit.Typ and both arrays, + have the same item type and compatible sizes, so they are compatible to + initialization. + } + end else begin + //Other types are simple to validate + if OpInit.Typ <> xType then begin + GenError('Cannot initialize. Expected type "%s". Got "%s".', [xType.name, OpInit.Typ.name]); + exit; + end; + end; + //Assign constant value + aditVar.iniVal := OpInit.Value; + end; + + //Validación de concordancia de tamaño para los tipos bit con ABSOLUTE + if aditVar.hasAdic = decAbsol then begin //valida tamaño + //Es una declaración ABSOLUTE + if xType.IsBitSize and (not Isbit) then begin + //Se esperaba un bit, en el ABSOLUTE. + GenError(ER_INV_MEMADDR); + end; + if not xType.IsBitSize and IsBit then begin + {En realidad se podría aceptar posicionar un byte en una variable bit, + posicionándolo en su byte contenedor.} + GenError(ER_INV_MEMADDR); + end; + end; +end; +procedure TCompMain.ReadProcHeader(out procName: String; out retType: TxpEleType; + out srcPos: TSrcPos; out pars: TxpParFuncArray; out IsInterrupt, IsForward: Boolean); +{Hace el procesamiento del encabezado de la declaración de una función/procedimiento. +Devuelve la referencia al objeto TxpEleFun creado, en "fun". +Conviene separar el procesamiento del enzabezado, para poder usar esta rutina, también, +en el procesamiento de unidades.} + procedure ReadFunctionParams(out funPars: TxpParFuncArray); + //Lee la declaración de parámetros de una función. + const + BLOCK_SIZE = 10; //Tamaño de bloque. + var + typ: TxpEleType; + itemList: TStringDynArray; + srcPosArray: TSrcPosArray; + i, curSize, n: Integer; + adicVarDec: TAdicVarDec; + begin + cIn.SkipWhites; + if EOBlock or EOExpres or (cIn.tok = ':') then begin + //No tiene parámetros + setlength(funPars, 0); + end else begin + //Debe haber parámetros. Prepara espacio para leer. + curSize := BLOCK_SIZE; //Tamaño inicial de bloque + setlength(funPars, curSize); //Tamaño inicial + n := 0; + //Inicia lectura + if not CaptureTok('(') then exit; + cin.SkipWhites; + repeat + //if cIn.tokL = 'register' then begin + // IsRegister := regA; //Asumimos que es A + // cin.Next; + // cin.SkipWhites; + //end; + getListOfIdent(itemList, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_IDEN_EXPECT); + exit; + end; + if not CaptureTok(':') then exit; + typ := GetTypeDeclarSimple; //lee tipo + if HayError then exit; + ProcComments; + GetAdicVarDeclar(typ, adicVarDec); + if adicVarDec.hasInit then begin + //As we don't permit initialization, we won't have changes on "typ". + GenError('Cannot initialize parameters.'); + exit; + end; + //Ya tiene los datos de los parámetros + for i:= 0 to high(itemList) do begin + funPars[n].name := itemList[i]; + funPars[n].srcPos:= srcPosArray[i]; + funPars[n].typ := typ; + funPars[n].adicVar := adicVarDec; + //Prepara siguiente lectura + inc(n); + if n >= curSize then begin + curSize += BLOCK_SIZE; //Incrementa tamaño en bloque + setlength(funPars, curSize); //hace espacio en bloque + end; + end; + //Busca delimitador + if cIn.tok = ';' then begin + cIn.Next; //toma separador + cIn.SkipWhites; + end else begin + //no sigue separador de parámetros, + //debe terminar la lista de parámetros + //¿Verificar EOBlock or EOExpres ? + break; + end; + until false; + //busca paréntesis final + if not CaptureTok(')') then exit; + //Asigna tamaño final + setlength(funPars, n); + end; + end; +begin + //Toma información de ubicación, al inicio del procedimiento + cIn.SkipWhites; + srcPos := cIn.ReadSrcPos; + //Ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //Lee nombre de función + procName := cIn.tok; + cIn.Next; //lo toma + //Captura los parámetros en "pars" + ReadFunctionParams(pars); + if HayError then exit; + + //Verifica si es función + cIn.SkipWhites; + if cIn.tok = ':' then begin + cIn.Next; + cIn.SkipWhites; + //Es función + retType := GetTypeDeclarSimple; //lee tipo + if HayError then exit; + end else begin + retType := typNull; + end; + if not CaptureTok(';') then exit; + //Verifica si es INTERRUPT + cIn.SkipWhites; + if cIn.tokL = 'interrupt' then begin + cIn.Next; + IsInterrupt := true; + if not CaptureTok(';') then exit; + end else begin + IsInterrupt := false; + end; + if cIn.tokL = 'forward' then begin + cIn.Next; + IsForward := true; + if not CaptureTok(';') then exit; + end else begin + IsForward := false; + end; + ProcComments; //Quita espacios. Puede salir con error +end; + +function TCompMain.GetTypeDeclar(out decStyle: TTypDeclarStyle; + out TypeCreated: boolean): TxpEleType; +{Extrae la sección de declaración de tipo (De una variable, parámetro o de una definición +de tipo). Se debe llamar justo cuando empieza esta declaración de tipo. Se puede usar en +los siguientes casos; + +VAR variable: ; + +PROCEDURE nombre(param: ); + +TYPE nombre_tipo = ; + +El parámetro "decStyle" devuelve el estilo de declaración (Ver comentario de +TTypDeclarStyle). + +Si la declaración es de estilo: + +ttdDirect -> Devuelve la referencia al tipo, directamente. No crea otro tipo + Por ejemplo, la siguiente declaración: + a: Alguntipo; + Devuelve una referencia al tipo "Alguntipo". + +ttdDeclar -> Crea un tipo nuevo con la definición del nuevo tipo especificado, y devuelve + la referencia a ese tipo, pero no lo agrega al arbol de sintaxis, porque + espera validaciones posteriores. + Por ejemplo, la siguiente declaración. + a: Array[0..5] of char; + Creará un tipo nuevo con la definición: "array[0..5] of char". + El tipo nuevo devuelto tiene nombre vacío y debe ser actualizado luego. + +Entre "decStyle" y el "catType" del tipo devuelto (Ver comentario de TxpCatType), +debería quedar completamente especificada la declaración del tipo. + +"TypeCreated" indicates when a new Type instance was created (and will be destroyed or +added to the syntax Tree). + +If some problems happens, Error is generated and the NIL value is returned. +} + function ReadSizeInBrackets: integer; + {Lee el tamaño de un arreglo especificado entre corchetes: []. Si no se + especifica el tamaño. Devuelve -1.} + begin + //Declaración simplificada: [] + cIn.Next; //Toma '['. Se asume que ya se identificó + ProcComments; + if cIn.tok = ']' then begin + //Declaración corta de arreglo sin indicar el tamaño: []byte ; + cIn.Next; + exit(-1); //Indica que es dinámico. + end else begin + //Se espera tamaño de arreglo + //Debe seguir una expresión constante, que no genere código + res := GetExpression(0); + if HayError then exit(0); + if res.Sto <> stConst then begin + GenError(ER_CON_EXP_EXP); + exit(0); + end; + //Límites físicos predefinidos +// if res.Typ <> typByte then begin +// GenError('Only byte type allowed here.'); +// exit(0); +// end; + if res.valInt<0 then begin + GenError(ER_INV_ARR_SIZ); + exit(0); + end; + if res.valInt>=$10000 then begin + //Límite físico definido + GenError(ER_ARR_SIZ_BIG); + exit; + end; + //Ya se tiene el tamaño del arreglo, se sigue con la declaración. + if not CaptureTok(']') then exit(0); //toma "]" + exit(res.valInt); //Guarda número de elementos. + end; + end; + function ArrayDeclaration2(const srcpos: Tsrcpos): TxpEleType; + {Procesa la declaración de un tipo arreglo y devuelve el tipo, ya creado para su + validación. No agrega el tipo al árbol de sintaxis. + Se asume que ya se ha identificado el inicio de la declaración de un arreglo, + sea en su forma larga: "ARRAY[] OF BYTE" o en su forma corta: []BYTE } + var + decStyle: TTypDeclarStyle; + itemTyp, xtyp: TxpEleType; + nElem: Integer; + typName: String; + otherTypeCreated: boolean; + begin + if cIn.tok = '[' then begin + //Declaración corta + nElem := ReadSizeInBrackets(); //Lee tamaño + if HayError then exit; + end else begin + //Declaración larga: ARRAY[tamaño] OF + cIn.Next; //Toma 'ARRAY'. Se asume que ya se identificó. + ProcComments; + if cIn.tok = '[' then begin //Tamaño espefificado o puede ser [] + nElem := ReadSizeInBrackets(); //Lee tamaño + if HayError then exit; + end else begin + //No se especifica tamaño. Puede ser la forma corta: ARRAY OF + nElem := -1; + end; + ProcComments; + if not CaptureStr('of') then exit(nil); + end; + //Lee el tipo que sigue. Llamada RECURSIVA. + itemTyp := GetTypeDeclar(decStyle, otherTypeCreated); + if HayError then exit(nil); + if otherTypeCreated then begin + //No support for nested declaration + itemTyp.Destroy; + GenError('Too complex type declaration'); + exit; + end; + if itemTyp.nItems = -1 then begin //Sin tamaño + //ARRAY[] OF ARRAY[] OF ... No se soporta por ahora. + GenError('Dynamic array not allowed here.'); + exit(nil); + end; + //Se supone que ahora solo tenemos un tipo simple en "itemTyp". + //Ya se tiene la información para crear un nuevo tipo array. + typName := GenArrayTypeName(itemTyp.name, nElem); + {typName could change later if not size specified for this array but it's initialized. + Something like: []byte = (1,2,3); } + xtyp := CreateEleType(typName, srcPos, tctArray); + TypeCreated := true; //Activate flag + xtyp.nItems := nElem; //Número de ítems + xtyp.itmType := itemTyp; //Tipo de dato + callDefineArray(xtyp); //Crea campos comunes del arreglo + Result := xtyp; + end; + function PointerDeclaration(const srcpos: TSrcPos): TxpEleType; + {Procesa la declaración de un tipo puntero y devuelve el tipo, ya creado para su + validación. + Se asume que ya se ha identificado el inicio de la declaración de un puntero, + sea en su forma larga: "POINTER TO BYTE" o en su forma corta: ^BYTE } + var + reftyp, xtyp: TxpEleType; + typName: String; + begin + if cIn.tok = '^' then begin + //Declaración corta + cIn.Next; //Toma '^' + {end else begin + //Declaración larga: POINTER TO + cIn.Next; //Toma 'POINTER'. Se asume que ya se identificó. + ProcComments; + if not CaptureStr('to') then exit;} + end; + //Por ahora solo permitiremos identificadores de tipos + reftyp := FindSysEleType(cIn.tok); //Busca elemento + if reftyp = nil then begin + //No es un tipo del sistema, pero puede ser un tipo prdefinido + reftyp := TreeElems.FindType(cIn.tok); //Busca elemento + if reftyp = nil then begin + GenError('Expected a type identifier.'); + exit; + end; + end; + //Encontró un tipo + cIn.Next; //lo toma + typName := GenPointerTypeName(refTyp.name); + xtyp := CreateEleType(typName, srcPos, tctPointer); // + TypeCreated := true; //Activate flag + xtyp.ptrType := reftyp; //El tipo a donde apunta + callDefinePointer(xtyp); //Fija operaciones para la aritmética del puntero + Result := xtyp; + end; +var + typName: String; + typ: TxpEleType; + ele: TxpElement; + srcPos: TSrcPos; +begin + Result := nil; + TypeCreated := false; + ProcComments; + //Analiza el tipo declarado + try + srcPos := cIn.ReadSrcPos; //Inicio de declaración + if (cIn.tokType = tnType) then begin + //Caso normal. Es un tipo del sistema + typName := cIn.tok; + typ := FindSysEleType(typName); //Busca elemento + if typ = nil then begin + //Esto no debería pasar, porque el lexer indica que es un tipo del sistema. + GenError(ER_NOT_IMPLEM_, [typName]); + exit(nil); + end; + //Encontró al tipo del sistema + cIn.Next; //lo toma + decStyle := ttdDirect; //Es directo + //El "catType" se puede leer del mismo tipo + end else if (cIn.tokL = 'array') or (cIn.tok = '[') then begin + //Es declaración de arreglo + decStyle := ttdDeclar; //Es declaración elaborada + typ := ArrayDeclaration2(srcpos); + if HayError then exit(nil); //Sale para ver otros errores + end else if {(cIn.tokL = 'pointer') or }(cIn.tok = '^') then begin + //Es declaración de puntero + decStyle := ttdDeclar; //Es declaración elaborada + typ := PointerDeclaration(srcpos); + if HayError then exit(nil); //Sale para ver otros errores + end else if cIn.tokType = tnIdentif then begin + //Es un identificador de tipo + typName := cIn.tok; + decStyle := ttdDirect; //Es directo + {Se pensó usar GetOperandIdent(), para identificar al tipo, pero no está preparado + para procesar tipos y no se espera tanta flexibilidad. Así que se hace "a mano".} + ele := TreeElems.FindFirst(typName); + if ele = nil then begin + //No identifica a este elemento + GenError('Unknown identifier: %s', [typName]); + exit(nil); + end; + if ele.idClass = eltType then begin + //Es un tipo + cIn.Next; //toma identificador + typ := TxpEleType(ele); + AddCallerTo(typ); //lleva la cuenta + if typ.copyOf<>nil then typ := typ.copyOf; {Apunta al tipo copia. Esto es útil para + lograr una mejor compatibilidad cuando se usan Tipos en parámetros de + procedimientos.} + end else begin + GenError(ER_IDE_TYP_EXP); + exit(nil); + end; + end else begin + decStyle := ttdDirect; //Es directo + GenError(ER_IDE_TYP_EXP); + exit(nil); + end; + {No se capturan delimitadores aquí porque la declaración de tipos, en un contexto más + general, puede ser seguida de una inicialización.} + //if not CaptureDelExpres then exit(nil); + //ProcComments; + exit(typ); + finally + if Result = nil then begin + //Some error was happen + if TypeCreated then begin + typ.Destroy; //Release object + end; + end; + end; +end; +function TCompMain.GetTypeDeclarSimple(): TxpEleType; +{Similar a GetTypeDeclar(), pero solo permite la referencia a tipos simples. No permite la +declaración de nuevos tipos, como: ARRAY OF ...} +var + decStyle: TTypDeclarStyle; + TypeCreated: boolean; +begin + Result := GetTypeDeclar(decStyle, TypeCreated); //lee tipo + if HayError then exit; + if TypeCreated then begin + //No se permiten declaraciones elaboradas aquí. + GenError('Only simple types expected here.'); + Result.Destroy; //Destroy the new type created + Result := nil; + end; +end; +procedure TCompMain.CompileGlobalConstDeclar; +var + consNames: array of string; //nombre de variables + cons: TxpEleCon; + srcPosArray: TSrcPosArray; + i: integer; +begin + SetLength(consNames, 0); + //Procesa lista de constantes a,b,cons ; + getListOfIdent(consNames, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_IDE_CON_EXP); + exit; + end; + //puede seguir "=" o identificador de tipo + if cIn.tok = '=' then begin + cIn.Next; //pasa al siguiente + //Debe seguir una expresiócons constante, que no genere consódigo + res := GetExpression(0); + if HayError then exit; + if res.Sto <> stConst then begin + GenError(ER_CON_EXP_EXP); + end; + //Hasta aquí todo bien, crea la(s) constante(s). + for i:= 0 to high(consNames) do begin + //crea constante + cons := AddConstant(consNames[i], res.Typ, srcPosArray[i]); + if HayError then exit; + res.CopyConsValTo(cons); //asigna valor + end; +// end else if cIn.tok = ':' then begin + end else begin + GenError(ER_EQU_COM_EXP); + exit; + end; + if not CaptureDelExpres then exit; + ProcComments; + //puede salir con error +end; +procedure TCompMain.CompileTypeDeclar(elemLocat: TxpEleLocation; typName: string = ''); +{Compila la sección de declaración de un tipo, y genera un elemento TxpEleType, en el +árbol de sintaxis. +Si se especifica typName, se obvia la extracción de la parte " nombreTipo = ", y se +toma el nombre indicado.} +var + etyp, reftyp: TxpEleType; + srcpos: TSrcPos; + decStyle: TTypDeclarStyle; + typeCreated: boolean; +begin + ProcComments; + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador + srcpos := cIn.ReadSrcPos; + typName := cIn.tok; + cIn.Next; + ProcComments; + if not CaptureTok('=') then exit; + etyp := GetTypeDeclar(decStyle, typeCreated); + if HayError then exit; + //Analiza la declaración + if decStyle = ttdDirect then begin + //Es un tipo referenciado directamente. Algo como TYPE fool = byte; + //Para este caso, nosotros creamos un tipo nuevo, en modo copia. + reftyp := etyp; //Referencia al tipo { TODO : ¿Y si el tipo es ya una copia? } + etyp := CreateEleType(typName, srcPos, reftyp.catType); + {Crea la copia del tipo del sistema, que básicamente es el mismo tipo, solo que + con otro nombre y que además, ahora, está en el árbol de sintaxis, por lo tanto + tiene otras reglas de alcance.} + etyp.copyOf := reftyp; //Indica que es una copia + etyp.location := elemLocat; //Ubicación del tipo (Interface/Implementation/...) + end else begin + //Es una declaración elaborada de tipo. Algo como TYPE fool = array[] of ... + if typeCreated then begin + //El tipo ya fue creado. Solo queda verificarlo y agregarlo. + etyp.name := typName; //Actualiza el nombre con el nombre de esta definición. + etyp.srcDec := srcpos; + etyp.location := elemLocat; //Ubicación del tipo (Interface/Implementation/...) + end else begin + {El tipo es elaborado, pero no se ha creado. Puede ser que corresponda a una + declaración similar. ¿Creamos un tipo nuevo o una copia?} + //Creamos una copia porque es más fácil + reftyp := etyp; //Referencia al tipo { TODO : ¿Y si el tipo es ya una copia? } + etyp := CreateEleType(typName, srcPos, reftyp.catType); + {Crea la copia del tipo del sistema, que básicamente es el mismo tipo, solo que + con otro nombre y que además, ahora, está en el árbol de sintaxis, por lo tanto + tiene otras reglas de alcance.} + etyp.copyOf := reftyp; //Indica que es una copia + etyp.location := elemLocat; //Ubicación del tipo (Interface/Implementation/...) + end; + //Por la forma de trabajo actual, + end; + //Las declaraciones de tipo, crean siempre nuevos tipos. + //Validación de duplicidad e inclusión en el árbol de sintaxis. + if etyp.ExistsIn(TreeElems.curNode.elements) then begin + GenErrorPos(ER_DUPLIC_IDEN, [etyp.name], etyp.srcDec); + etyp.Destroy; //Hay una variable creada + exit; + end; + {Valida que solo se manejen tipos de tamaño estático, porque la inicialización de + variables (que usen este tipo) puede modificar el nombre y tamaño de arreglos de + tamaño no especificado, y eso cambia la esencia de declarar un tipo con un nombre. + } + if (etyp.catType = tctArray) and (etyp.nItems = -1) then begin + GenError('Array types must have a specified size.'); + etyp.Destroy; //Hay una variable creada + exit; + end; ; + TreeElems.AddElement(etyp); //No problem in adding, because we are in the right position of Syntax Tree. + if not CaptureDelExpres then exit; + ProcComments; +end; +procedure TCompMain.CompileVarDeclar(IsInterface: boolean = false); +{Compila la declaración de variables en el nodo actual. +"IsInterface", indica el valor que se pondrá al as variables, en la bandera "IsInterface" } + function GenTypeName(const xtyp: TxpEleType; const baseName: string): string; + {Genera un nombre para un tipo de acuerdo a su definición. Se supone que no es un tipo + "atomic". + Se generan nombres representativos, para poder luego verificar la existencia de tipos + compatibles. Así por ejemplo si se crea un ARRAY OF char y luego se crea otro ARRAY OF + char con el mismo tamaño, se preferirá usar el tipo ya creado que además es compatible.} + begin + //Genera nombre con caracter inválido para que no se pueda confundir con los que declara el usuario. + case xtyp.catType of + tctAtomic : //caso inútil + exit(xtyp.name); + tctArray : //Arreglo de algo + exit(GenArrayTypeName(xtyp.itmType.name, xtyp.nItems)); + tctPointer: //Puntero a algo + exit(GenPointerTypeName(xtyp.ptrType.name)); + tctObject : {Objeto. No se da un nombre fijo porque los objetos son muy variables. Podría + intentarse con obj-, pero podría ser muy largo y poco útil + para buscar compatibilidades de tipo} + exit(PREFIX_OBJ + '-' + baseName); //Caso particular + else //Solo pasaría cuando hay ampliaciones + exit('???-' + baseName); + end; + end; +var + varNames: array of string; //nombre de variables + TypeCreated: Boolean; + srcPosArray: TSrcPosArray; + i: Integer; + xvar: TxpEleVar; + adicVarDec: TAdicVarDec; + xtyp, sametype: TxpEleType; + decStyle: TTypDeclarStyle; +begin + SetLength(varNames, 0); + //Procesa variables a,b,c : int; + getListOfIdent(varNames, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_EXP_VAR_IDE); + exit; + end; + //usualmente debería seguir ":" + if cIn.tok = ':' then begin + //Debe seguir, el tipo de la variable + cIn.Next; //lo toma + ProcComments; + //Lee el tipo de la variable + xtyp := GetTypeDeclar(decStyle, TypeCreated); + if HayError then exit; + //Lee información aicional de la declaración (ABSOLUTE, REGISTER, initial value) + ProcComments; + GetAdicVarDeclar(xtyp, adicVarDec); + if HayError then begin + if TypeCreated then xtyp.Destroy; + exit; + end; + + ProcComments; + {Elimina la llamada agregada a la variable, porque se van a agregar llamadas más + específicas desde la(s) varaible(s) declaradas.} + if adicVarDec.absVar<>nil then begin + adicVarDec.absVar.RemoveLastCaller; + end; + {Aquí, finalmente, se tiene el tipo completo en su estructura porque, si había un + arreglo no diemnsionado, como: foo []CHAR = 'HELLO'; ya se verificó la + inicialización.} + if typeCreated then begin +// //Se ha creado un tipo nuevo. Verifica y agrega. +// //xtyp.name := GenTypeName(xtyp, varNames[0]); //Update name +// xtyp.location := curLocation; +// if TreeElems.DeclaredType(xtyp.name, sametype) then begin +// {El tipo ya existe (con esa misma estructura y en ese alcance), así que mejor +// pasamos a reutilizar ese tipo. Esta reutilización de tipos evita la creación de +// múltiples tipos con la misma definición.} +// xtyp.Destroy; +// xtyp := sametype; +// //"sametype" ya está en el árbol de sintaxis. +// end else begin + //Es un tipo nuevo. + xtyp.location := curLocation; //Ubicación del tipo (Interface/Implementation/...) + TreeElems.AddElement(xtyp); {¿Comviene agregarlo en este espacio o en otro más accesible desde otros espacios? } +// end; + end else begin + //Tipo directo. No se ha creado ningún tipo nuevo. + //El tipo ya existe en el arbol de sintaxis + end; + //Aquí ya se tiene el tipo creado y en el árbol de sintaxis + //Reserva espacio para las variables + for i := 0 to high(varNames) do begin + xvar := AddVariable(varNames[i], xtyp, srcPosArray[i]); + if HayError then break; //Sale para ver otros errores + xvar.adicPar := adicVarDec; //Actualiza propiedades adicionales + xvar.location := curLocation; //Actualiza bandera + {Técnicamente, no sería necesario, asignar RAM a la variable aquí (y así se + optimizaría), porque este método, solo se ejecuta en la primera pasada, y no + es vital tener las referencias a memoria, en esta pasada. + Pero se incluye la ásignación de RAM, por: + * Porque el acceso con directivas, a variables del sistema como "CurrBank", + se hace en la primera pasada, y es necesario que estas variables sean válidas. + * Para tener en la primera pasada, un código más similar al código final.} + if adicVarDec.hasAdic in [decNone, decAbsol] then begin + callCreateVarInRAM(xvar); //Crea la variable + end; + //Agrega la llamada, específica, desde esta variable. + if adicVarDec.absVar<>nil then begin + AddCallerTo(adicVarDec.absVar, xvar); + end + end; + end else begin + GenError(ER_SEM_COM_EXP); + exit; + end; + if not CaptureDelExpres then exit; + ProcComments; + //puede salir con error +end; + +function TCompMain.VerifyEND: boolean; +{Compila la parte final de la estructura, que en el modo PicPas, debe ser el + delimitador END. Si encuentra error, devuelve FALSE.} +begin + Result := true; //por defecto + if mode = modPicPas then begin + //En modo PicPas, debe haber un delimitador de bloque + if not CaptureStr('end') then exit(false); + end; +end; +function TCompMain.GetExpressionBool: boolean; +{Lee una expresión booleana. Si hay algún error devuelve FALSE.} +begin + res := GetExpression(0); + if HayError then exit(false); + if res.Typ <> typBool then begin + GenError(ER_BOOL_EXPECT); + exit(false); + end; + ProcComments; + exit(true); //No hay error +end; +procedure TCompMain.Tree_AddElement(elem: TxpElement); +begin + if FirstPass then begin + //Caso normal. Solo aquí dede modificarse el árbol de sintaxis. + end else begin + //Solo se permiet agregar elementos en la primera pasada + GenError('Internal Error: Syntax Tree modified on linking.'); + end; +end; +function TCompMain.OpenContextFrom(filePath: string): boolean; +{Abre un contexto con el archivo indicado. Si lo logra abrir, devuelve TRUE.} +var + strList: TStrings; +begin + //Primero ve si puede obteenr acceso directo al contenido del archivo + if OnRequireFileString<>nil then begin + //Hace la consulta a través del evento + strList := nil; + OnRequireFileString(filePath, strList); + if strList=nil then begin + //No hay acceso directo al contenido. Carga de disco + //debugln('>disco:'+filePath); + cIn.MsjError := ''; + cIn.NewContextFromFile(filePath); + Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. + end else begin + //Nos están dando el acceso al contenido. Usamos "strList" + cIn.NewContextFromFile(filePath, strList); + Result := true; + end; + end else begin + //No se ha establecido el evento. Carga de disco + //debugln('>disco:'+filePath); + cIn.MsjError := ''; + cIn.NewContextFromFile(filePath); + Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. + end; +end; +function TCompMain.CompileStructBody(GenCode: boolean): boolean; +{Compila el cuerpo de un THEN, ELSE, WHILE, ... considerando el modo del compilador. +Si se genera error, devuelve FALSE. } +begin + if GenCode then begin + //Este es el modo normal. Genera código. + if mode = modPascal then begin + //En modo Pascal se espera una instrucción + CompileInstruction; + end else begin + //En modo normal + CompileCurBlock; + end; + if HayError then exit(false); + end else begin + //Este modo no generará instrucciones + cIn.SkipWhites; + GenWarn(ER_INST_NEV_EXE); + if mode = modPascal then begin + //En modo Pascal se espera una instrucción + CompileInstructionDummy //solo para mantener la sintaxis + end else begin + //En modo normal + CompileCurBlockDummy; //solo para mantener la sintaxis + end; + if HayError then exit(false); + end; + //Salió sin errores + exit(true); +end; +function TCompMain.CompileConditionalBody(out FinalBank: byte): boolean; +{Versión de CompileStructBody(), para bloques condicionales. +Se usa para bloque que se ejecutarán de forma condicional, es decir, que no se +garantiza que se ejecute siempre. "FinalBank" indica el banco en el que debería +terminar el bloque.} +begin + Result := CompileStructBody(true); //siempre genera código + FinalBank := CurrBank; //Devuelve banco +end; +function TCompMain.CompileNoConditionBody(GenCode: boolean): boolean; +{Versión de CompileStructBody(), para bloques no condicionales. +Se usa para bloques no condicionales, es decir que se ejecutará siempre (Si GenCode +es TRUE) o nunca (Si GenCode es FALSE); +} +begin + //"BankChanged" sigue su curso normal + Result := CompileStructBody(GenCode); +end; +procedure TCompMain.array_length(const OpPtr: pointer); +//Devuelve la cantidad de elementos de un arreglo +var + Op: ^TOperand; + xvar: TxpEleVar; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt := xvar.typ.nItems; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompMain.array_high(const OpPtr: pointer); +//Devuelve el índice máximo de un arreglo +var + Op: ^TOperand; + xvar: TxpEleVar; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt {%H-}:= xvar.typ.nItems-1; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompMain.array_low(const OpPtr: pointer); +//Devuelve el índice mínimo de un arreglo +var + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt := 0; //por ahora siempre inicia en 0 + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompMain.CompileInstruction; +{Compila una única instrucción o un bloque BEGIN ... END. Puede generar Error. + Una instrucción se define como: + 1. Un bloque BEGIN ... END + 2. Una estrutura + 3. Una expresión + La instrucción, no incluye al delimitador. + } +var + curCodCon: TxpEleCodeCont; +begin + if TreeElems.curNode.idClass <> eltBody then begin + //No debería pasar, porque las instrucciones solo pueden estar en eltBody + GenError('Syntax error.'); + exit; + end; + curCodCon := TreeElems.CurCodeContainer; + ProcComments; + if cIn.tokL='begin' then begin + //es bloque + cIn.Next; //toma "begin" + CompileCurBlock; //llamada recursiva + if HayError then exit; + if not CaptureStr('end') then exit; + ProcComments; + //puede salir con error + end else begin + //es una instrucción + if cIn.tokType = tnStruct then begin + if cIn.tokl = 'if' then begin + curCodCon.OpenBlock(sbiIF); + cIn.Next; //pasa "if" + callCompileIF; + curCodCon.CloseBlock; + end else if cIn.tokl = 'while' then begin + curCodCon.OpenBlock(sbiWHILE); + cIn.Next; //pasa "while" + callCompileWHILE; + curCodCon.CloseBlock; + end else if cIn.tokl = 'repeat' then begin + curCodCon.OpenBlock(sbiREPEAT); + cIn.Next; //pasa "until" + callCompileREPEAT; + curCodCon.CloseBlock; + end else if cIn.tokl = 'for' then begin + curCodCon.OpenBlock(sbiFOR); + cIn.Next; //pasa "until" + callCompileFOR; + curCodCon.CloseBlock; + end else begin + GenError(ER_UNKN_STRUCT); + exit; + end; + end else begin + //debe ser es una expresión + GetExpressionE(pexASIG); + end; + if HayError then exit; + if callDeviceError() <>'' then begin + //El pic también puede dar error + GenError( callDeviceError() ); + end; + end; +end; +procedure TCompMain.CompileInstructionDummy; +{Compila una instrucción pero sin generar código. } +var + p: Integer; + InvertedFromC0: Boolean; + CurrBank0: Byte; +begin + OnReqStopCodeGen; + CurrBank0 := CurrBank; //Guarda estado + InvertedFromC0 := InvertedFromC; //Guarda estado + + CompileInstruction; //Compila solo para mantener la sintaxis + + InvertedFromC := InvertedFromC0; //Restaura + CurrBank := CurrBank0; //Restaura + OnReqStartCodeGen; + //puede salir con error + { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } +end; +procedure TCompMain.CompileCurBlock; +{Compila el bloque de código actual hasta encontrar un delimitador de bloque, o fin +de archivo. } +begin + ProcComments; + while not cIn.Eof and (cIn.tokType<>tnBlkDelim) do begin + //se espera una expresión o estructura + CompileInstruction; + if HayError then exit; //aborta + //se espera delimitador + if cIn.Eof then break; //sale por fin de archivo + //busca delimitador + ProcComments; + //Puede terminar con un delimitador de bloque + if cIn.tokType=tnBlkDelim then break; + //Pero lo común es que haya un delimitador de expresión + if not CaptureTok(';') then exit; + ProcComments; //Puede haber Directivas o ASM también + end; +end ; +procedure TCompMain.CompileCurBlockDummy; +{Compila un bloque pero sin geenrar código.} +var + p: Integer; + InvertedFromC0: Boolean; + CurrBank0: Byte; +begin + OnReqStopCodeGen; + CurrBank0 := CurrBank; //Guarda estado + InvertedFromC0 := InvertedFromC; //Guarda estado + + CompileCurBlock; //Compila solo para mantener la sintaxis + + InvertedFromC := InvertedFromC0; //Restaura + CurrBank := CurrBank0; //Restaura + OnReqStartCodeGen; + //puede salir con error + { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } +end; +function TCompMain.IsUnit: boolean; +{Indica si el archivo del contexto actual, es una unidad. Debe llamarse} +begin + ProcCommentsNoExec; //Solo es validación, así que no debe ejecutar nada + //Busca UNIT + if cIn.tokL = 'unit' then begin + cIn.curCon.SetStartPos; //retorna al inicio + exit(true); + end; + cIn.curCon.SetStartPos; //retorna al inicio + exit(false); +end; + +procedure TCompMain.CompileProcDeclar; +{Compila la declaración de procedimientos. Tanto procedimientos como funciones + se manejan internamente como funciones.} + function FindProcInInterface(procName: string; const pars: TxpParFuncArray; + const srcPos: TSrcPos): TxpEleFunDec; + {Explore the current context to verify (and validate) the existence, in the INTERFACE + section, of a function declared in the IMPLEMENTATION section. + If found the function, returns the reference. Otherwise returns NIL. + Also validate the duplicity in the same IMPLEMENTATION section.} + var + ele : TxpElement; + uname: String; + fun: TxpEleFun; + funInterface: TxpEleFunDec; + begin + {Se supone que esta exploración solo se hará en la primera pasada, así que no hay + problema, en hacer una exploración común.} + //debugln('Buscando declaración de %s en nodo %s desde 0 hasta %d', [fun.name, ParentElems.name, ParentElems.elements.Count-2]); + Result := nil; + uname := upcase(procName); + {This a doble-scanning, to detect: Existence of declaration in INTERFACE, and + name duplicity in IMPLEMENTATION. } + for ele in TreeElems.curNode.elements do begin + if ele.uname = uname then begin + //Match the name. + if ele.location = locInterface then begin + //Is an INTERFACE element. + if ele.idClass = eltFuncDec then begin + //Para las declaraciones, se debe comparar los parámetros + funInterface := TxpEleFunDec(ele); + if funInterface.SameParamsType(pars) then begin + Result := funInterface; + //Continue exploring to verify duplicity. + end; + end else begin + //The same name of other element, is conflict. + GenError('Identifier "%s" already defined', [uname]); + exit; + end; + end else if ele.location = locImplement then begin + //Is an IMPLEMENTATION element. + if ele.idClass = eltFunc then begin + //Para las funciones, se debe comparar los parámetros + fun := TxpEleFun(ele); + if fun.SameParamsType(pars) then begin + {Two similar functions in the same IMPLEMENTATION scope.} + GenErrorPos(ER_DUPLIC_FUNC_,[procName], srcPos); + exit(nil); + end; + end else begin + //The same name of other element, is conflict. + GenError('Identifier "%s" already defined', [uname]); + exit; + end; + end; + end; + end; + //Doesn't found. + end; + function FindProcAsForwawd(procName: string; const pars: TxpParFuncArray; + const srcPos: TSrcPos): TxpEleFunDec; + {Explore the current context to verify (and validate) the existence of a functon + declared as FORWARD, of any ohter function (No FORWARD). + If found the function, returns the reference. Otherwise returns NIL. + Also validate the duplicity of the function.} + var + uname: String; + ele : TxpElement; + fun: TxpEleFun; + fundec: TxpEleFunDec; + begin + Result := nil; + uname := upcase(procName); + //Busca en el entorno para ver si está duplicada o con FORWARD + for ele in TreeElems.curNode.elements do begin + if ele.uname = uname then begin + //Match the name. + if ele.idClass = eltFuncDec then begin + //Must be a FORWARD + fundec := TxpEleFunDec(ele); + //if fun.IsForward ? + if fundec.SameParamsType(pars) then begin + Result := fundec; //Return FORWARD function + end; + //Continue exploring to validate + end else if ele.idClass = eltFunc then begin + //Para las funciones, se debe comparar los parámetros + fun := TxpEleFun(ele); + if fun.SameParamsType(pars) then begin + //Is not FORWARD, must be duplicated: + GenErrorPos(ER_DUPLIC_FUNC_,[procName], srcPos); + exit; + end; + end else begin + //The same name of other element, is conflict. + GenError('Identifier "%s" already defined', [uname]); + exit; + end; + end; + end; + end; +var + funDec, funInterface, funForward: TxpEleFunDec; + fun: TxpEleFun; + bod: TxpEleBody; + IsInterrupt, IsForward: Boolean; + procName: String; + retType: TxpEleType; + srcPos: TSrcPos; + pars: TxpParFuncArray; +begin + {Este método, solo se ejecutará en la primera pasada, en donde todos los procedimientos + se codifican al inicio de la memoria, y las variables y registros se ubican al + inicio de la memoria RAM, ya que lo que importa es simplemente recabar información + del procedimiento, y no tanto codificarlo. } + callResetFlashAndRAM; + case curLocation of + locInterface: begin + //Las declaraciones en INTERFACE son sencillas. Solo son caebceras. + ReadProcHeader(procName, retType, srcPos, pars, IsInterrupt, IsForward); + if HayError then exit; + if IsForward then begin + GenError('Cannot use FORWARD in INTERFACE section.'); + exit; + end; + if TreeElems.FunctionExistInCur(procName, pars) then begin + GenErrorPos(ER_DUPLIC_FUNC_,[procName], srcPos); + exit; + end; + funDec := AddFunctionDEC(procName, retType, srcPos, pars, IsInterrupt); + funDec.location := curLocation; //Set location + exit; //No more task required. + end; + locImplement: begin + //Se compila para implementación. + {Este proceso es más complejo. La idea es compilar el enzabezado de cualquier función, + y luego comparar para ver si corresponde a una implementación o no. Si es + implementación, se elimina el nodo creado y se trabaja con el de la declaración.} + ReadProcHeader(procName, retType, srcPos, pars, IsInterrupt, IsForward); + if HayError then exit; + //Verifica si es implementación de una función en la INTERFACE o no. + funInterface := FindProcInInterface(procName, pars, srcPos); + if HayError then exit; + if funInterface<>nil then begin + //Es una implementación normal + fun := AddFunctionIMP(procName, retType, srcPos, funInterface); + end else begin + //Debe ser una función privada. No declarada en INTERFACE. + //Ya verificamos que no hay conflicto en IMPLEMENTATION. + fun := AddFunctionUNI(procName, retType, srcPos, pars, IsInterrupt); + end; + fun.location := curLocation; + end; + locMain: begin + //Es una compilación en el programa principal. ¿Y si es FORWARD? + ReadProcHeader(procName, retType, srcPos, pars, IsInterrupt, IsForward); + if HayError then exit; + if IsForward then begin + if TreeElems.FunctionExistInCur(procName, pars) then begin + GenErrorPos(ER_DUPLIC_FUNC_,[procName], srcPos); + exit; + end; + funDec := AddFunctionDEC(procName, retType, srcPos, pars, IsInterrupt); + funDec.location := locMain; //Set location + funDec.IsForward := true; //Mark as Forward + exit; //No more task required. + end; + //This is no-FORWARD function + funForward := FindProcAsForwawd(procName, pars, srcPos); + if HayError then exit; + if funForward<>nil then begin + //It's an implementation + fun := AddFunctionIMP(procName, retType, srcPos, funForward); + end else begin + //It's a common function + fun := AddFunctionUNI(procName, retType, srcPos, pars, IsInterrupt); + end; + fun.location := curLocation; + end; + else + GenError(ER_NOT_IMPLEM_, ['locMain in TCompMain.CompileProcDeclar()']); + end; + //Aquí ya se tiene "fun" abierta, validada y apuntando a la declaración. + //Empiezan las declaraciones VAR, CONST, PROCEDURE, TYPE + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileVarDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; +// end else if cIn.tokL = 'procedure' then begin +// cIn.Next; //lo toma +// CompileProcDeclar; + end else begin + GenError('Expected VAR, CONST or BEGIN.'); + exit; + end; + end; + if cIn.tokL <> 'begin' then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + //Ahora empieza el cuerpo de la función o las declaraciones + fun.adrr := callCurrFlash(); //toma dirección de inicio del código. Es solo referencial. + fun.posCtx := cIn.PosAct; //Guarda posición para la segunda compilación + bod := CreateBody; //crea elemento del cuerpo de la función + bod.srcDec := cIn.ReadSrcPos; + TreeElems.AddElementAndOpen(bod); //Abre nodo Body + callCompileProcBody(fun); + TreeElems.CloseElement; //Cierra Nodo Body + TreeElems.CloseElement; //cierra espacio de nombres de la función + bod.srcEnd := cIn.ReadSrcPos; //Fin de cuerpo +// fun.adrReturn := pic.iRam-1; //Guarda dirección del i_RETURN + if not CaptureTok(';') then exit; + ProcComments; //Quita espacios. Puede salir con error +end; + +procedure TCompMain.CompileUnit(uni: TxpElement); +{Realiza la compilación de una unidad} +var + fun: TxpEleFun; + elem: TxpElement; + fundec: TxpEleFunDec; +begin +//debugln(' Ini Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); + ClearError; + callClearDeviceError; + ProcComments; + //Busca UNIT + if cIn.tokL = 'unit' then begin + cIn.Next; //pasa al nombre + ProcComments; + if cIn.Eof then begin + GenError('Name of unit expected.'); + exit; + end; + if UpCase(cIn.tok)<>UpCase(uni.name) then begin + GenError('Name of unit doesn''t match file name.'); + exit; + end; + cIn.Next; //Toma el nombre y pasa al siguiente + if not CaptureDelExpres then exit; + end else begin + GenError('Expected: UNIT'); + exit; + end; + ProcComments; + if cIn.tokL <> 'interface' then begin + GenError('Expected: INTERFACE'); + exit; + end; + cIn.Next; //toma + ProcComments; + curLocation := locInterface; + if cIn.Eof then begin + GenError('Expected "uses", "var", "type", "const" or "implementation".'); + exit; + end; + ProcComments; + //Busca USES + CompileUsesDeclaration; + if cIn.Eof then begin + GenError('Expected "var", "type" or "const".'); + exit; + end; + ProcComments; +// Cod_StartProgram; //Se pone antes de codificar procedimientos y funciones + if HayError then exit; + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileVarDeclar(true); //marca como "IsInterface" + if HayError then exit;; + end; + end else if cIn.tokL = 'type' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileTypeDeclar(locInterface); + if HayError then exit; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcDeclar; + if HayError then exit; + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + ProcComments; + if cIn.tokL <> 'implementation' then begin + GenError('Expected: IMPLEMENTATION'); + exit; + end; + cIn.Next; //toma + ///////////////// IMPLEMENTATION ///////////////////// + ProcComments; + //Explora las declaraciones e implementaciones + curLocation := locImplement; + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'end') do begin + CompileVarDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'end') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcDeclar; //Compila en IMPLEMENTATION + if HayError then exit; + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + //Verifica si todas las funciones de INTERFACE, se implementaron + for elem in TreeElems.curNode.elements do if elem.idClass = eltFuncDec then begin + fundec := TxpEleFunDec(elem); + if fundec.implem = nil then begin + GenErrorPos('Function %s not implemented.', [fundec.name], fundec.srcDec); + exit; + end; + end; + CompileLastEnd; + if HayError then exit; +// //procesa cuerpo +// ResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio +// también, la flash y memoria, después de algún psoible procedimiento.} +// if cIn.tokL = 'begin' then begin +// bod := CreateBody; +// bod.srcDec := cIn.ReadSrcPos; +// cIn.Next; //coge "begin" +// //Guardamos la ubicación física, real, en el archivo, después del BEGIN +// bod.posCtx := cIn.PosAct; +// //codifica el contenido +// CompileCurBlock; //compila el cuerpo +// if HayError then exit; + +// _SLEEP(); //agrega instrucción final +// end else begin +// GenError('Expected "begin", "var", "type" or "const".'); +// exit; +// end; +// Cod_EndProgram; +//debugln(' Fin Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); +end; +procedure TCompMain.CompileUsesDeclaration; +{Compila la unidad indicada.} +var + uni: TxpEleUnit; + uPath: String; + uName: String; + p: TPosCont; +begin + if cIn.tokL = 'uses' then begin + cIn.Next; //pasa al nombre + //Toma una a una las unidades + repeat + ProcComments; + //ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador de unidad + uName := cIn.tok; + uni := CreateUnit(uName); + //Verifica si existe ya el nombre de la unidad + if uni.ExistsIn(TreeElems.curNode.elements) then begin + GenError('Identifier duplicated: %s.', [uName]); + uni.Destroy; + exit; + end; + uni.srcDec := cIn.ReadSrcPos; //guarda posición de declaración + uName := uName + '.pas'; //nombre de archivo +{----}TreeElems.AddElementAndOpen(uni); + //Ubica al archivo de la unidad + p := cIn.PosAct; //Se debe guardar la posición antes de abrir otro contexto + //Primero busca en la misma ubicación del archivo fuente + uPath := ExtractFileDir(mainFile) + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encontró, busca en la carpeta de dispositivos + uPath := devicesPath + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encontró, busca en la carpeta de librerías + uPath := patUnits + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [uName]); + exit; + end; + end; + end; + //Aquí ya se puede realizar otra exploración, como si fuera el archivo principal + CompileUnit(uni); + cIn.PosAct := p; + if HayError then exit; //El error debe haber guardado la ubicaicón del error +{----}TreeElems.CloseElement; //cierra espacio de nombres de la función + cIn.Next; //toma nombre + cIn.SkipWhites; + if cIn.tok <> ',' then break; //sale + cIn.Next; //toma la coma + until false; + if not CaptureDelExpres then exit; + end; +end; +procedure TCompMain.AssignRAMtoVar(xvar: TxpEleVar; shared: boolean = false); +var + posAct : TPosCont; + adicVarDec: TAdicVarDec; +begin +//debugln(' Asignando espacio a %s', [xvar.name]); + case xvar.adicPar.hasAdic of + decAbsol: begin +//debugln('Abs: xvar=%s at %d', [xvar.name, xvar.adicPar.absAddr]); + {Tiene declaración absoluta. Mejor compilamos de nuevo la declaración, porque + puede haber referencia a variables que han cambiado de ubicación, por + optimización. + Se podría hacer una verificación, para saber si la referencia es a direcciones + absolutas, en lugar de a variables (o a variables temporales), y así evitar + tener que compilar de nuevo, la declaración.} + posAct := cIn.PosAct; //guarda posición actual + cIn.PosAct := xVar.adicPar.srcDec; //Posiciona en la declaración adicional + TreeElems.curNode := xvar.Parent; {Posiciona el árbol, tal cual estaría en la + primera pasada, para una correcta resolución + de nombres} + GetAdicVarDeclar(xvar.typ, adicVarDec); + //No debería dar error, porque ya pasó la primera pasada + xvar.adicPar := adicVarDec; + cIn.PosAct := posAct; + //Asigna RAM + callCreateVarInRAM(xVar, shared); //Crea la variable + xvar.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + //Puede salir con error + end; + decRegis: begin + //Variable registro. No se asigna espacio. + end; + decNone: begin + //Variable normal. Necesita ser asiganda en RAM + callCreateVarInRAM(xVar, shared); //Crea la variable + xvar.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + //Puede salir con error + end; + end; +end; +procedure TCompMain.CreateLocalVarsAndPars; +{Create in RAM, local varisbles and parameters for functions.} +var + elem : TxpElement; + xvar : TxpEleVar; + fun : TxpEleFun; +begin + //Explora primero a las funciones terminales + for fun in usedFuncs do begin + if not fun.IsTerminal2 then continue; + //DebugLn('función terminal: %s con %d var.loc.', [fun.name, fun.nLocalVars]); + //Los parámetros y variables locales aparecen como elementos de la función + for elem in fun.elements do if elem.idClass = eltVar then begin + xvar := TxpEleVar(elem); + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar, true); + if HayError then exit; + end; + end; + if OptReuProVar then callSetSharedUnused; //limpia las posiciones usadas + end; + if OptReuProVar then callSetSharedUsed; //Ahora marca como usados, porque ya se creó la zona de bytes compartidos + //Explora solo a las funciones que no son terminales + for fun in usedFuncs do begin + if fun.IsTerminal2 then continue; + //Los parámetros y variables locales aparecen como elementos de la función + for elem in fun.elements do if elem.idClass = eltVar then begin + xvar := TxpEleVar(elem); + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end; + end; + end; +end; +procedure TCompMain.CompileProgram; +{Compila un programa en el contexto actual. Empieza a codificar el código a partir de +la posición actual de memoria en el PIC (iFlash).} +var + bod: TxpEleBody; +begin + ClearError; + callClearDeviceError; + ProcComments; + //Busca PROGRAM + if cIn.tokL = 'unit' then begin + //Se intenta compilar una unidad + GenError('Expected a program. No a unit.'); + exit; + end; + if cIn.tokL = 'program' then begin + cIn.Next; //pasa al nombre + ProcComments; + if cIn.Eof then begin + GenError(ER_PROG_NAM_EX); + exit; + end; + cIn.Next; //Toma el nombre y pasa al siguiente + if not CaptureDelExpres then exit; + end; + if cIn.Eof then begin + GenError('Expected "program", "begin", "var", "type" or "const".'); + exit; + end; + ProcComments; + //Busca USES + if HayError then exit; //CompileUsesDeclaration, va a limpiar "HayError" + CompileUsesDeclaration; + if cIn.Eof then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + ProcComments; + callStartProgram; //Se pone antes de codificar procedimientos y funciones + curLocation := locMain; + if HayError then exit; + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileVarDeclar; + if HayError then exit; + end; + end else if cIn.tokL = 'type' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileTypeDeclar(locMain); + if HayError then exit; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileGlobalConstDeclar; + if HayError then exit; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcDeclar; + if HayError then exit; + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + //procesa cuerpo + callResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio + también, la flash y memoria, después de algún posible procedimiento.} + if cIn.tokL <> 'begin' then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + bod := CreateBody; + bod.srcDec := cIn.ReadSrcPos; + TreeElems.AddElementAndOpen(bod); //Abre nodo Body + cIn.Next; //coge "begin" + //Guardamos popsisicón en contexto para la segunda compilación + bod.posCtx := cIn.PosAct; + //codifica el contenido + CompileCurBlock; //compila el cuerpo + TreeElems.CloseElement; //No debería ser tan necesario. + bod.srcEnd := cIn.ReadSrcPos; + if HayError then exit; + CompileLastEnd; //Compila el "END." final + if HayError then exit; + callEndProgram; +end; + +end. + diff --git a/Source/CompOperands.pas b/Source/CompOperands.pas new file mode 100644 index 00000000..b0b286a6 --- /dev/null +++ b/Source/CompOperands.pas @@ -0,0 +1,672 @@ +{ +Unit including the base clase for the compiler, the routines for manage operands +and the TOperand class definition. +The idea is hace here most of the code that is independent of the language to implement +and of the hardwrare. + By Tito Hinostroza 2019 - Lima - Perú. +} +unit CompOperands; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, SynEditHighlighter, + XpresTypesPIC, XpresElementsPIC, MisUtils, XpresBas; +type +{ TOperand } +//Objeto Operando. Para información sobre operandos, ver la documentación técnica. +TOperand = object +private + FSto : TStoOperand; //Almacenamiento del operando + FTyp : TxpEleType; //Tipo del operando, cuando no es stVariab + FVar : TxpEleVar; //Referencia a variable + FValue : TConsValue; //Valores constantes, cuando el operando es constante + function GetTyp: TxpEleType; + procedure SetvalBool(AValue: boolean); + procedure SetvalFloat(AValue: extended); + procedure SetvalInt(AValue: Int64); +public //Campos generales + txt : string; //Texto del operando o expresión, tal como aparece en la fuente + Inverted: boolean; {Este campo se usa para cuando el operando es de tipo Bit o Boolean. + Indica que la lógica debe leerse de forma invertida.} + rVarBase: TxpEleVar; {Referencia a variable base, cuando el operando es de tipo: + ... } + {"Sto", "Typ" y "rVar" se consideran de solo lectura. Para cambiarlos, se han definido + los métodos: SetAsConst(), SetAsVariab(), SetAsExpres() y SetAsNull, que ofrecen una + forma más sencilla y segura que cambiar "Cat", "Typ", y rVar" individualmente (que es + como se hacía en versiones anteriores).} + property Sto : TStoOperand read FSto; //Alamcenamiento de operando + property Typ : TxpEleType read GetTyp; //Tipo del operando + property rVar: TxpEleVar read FVar; //Referencia a la variable. + //property rVarOff: TxpEleVar read FVarOff; //Referencia a la variable. + procedure SetAsConst(xtyp: TxpEleType); + procedure SetAsVariab(xvar: TxpEleVar); + procedure SetAsExpres(xtyp: TxpEleType); + procedure SetAsVarRef(VarBase: TxpEleVar); + procedure SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); + procedure SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); + procedure SetAsNull; + function StoOpStr: string; + function StoOpChr: char; + procedure DefineRegister; inline; + function FindOperator(const oper: string): TxpOperator; //devuelve el objeto operador + procedure Invert; //Invierte la lógica del operando +public //Campos acceso cuando sea variable. + function VarName: string; inline; //nombre de la variable, cuando sea de categ. coVariab + function offs : TVarOffs; //dirección de la variable + function Boffs: TVarOffs; inline; //dirección del byte del bit + function Loffs: TVarOffs; inline; //dirección del byte bajo + function Hoffs: TVarOffs; inline; //dirección del byte alto + function Eoffs: TVarOffs; inline; //dirección del byte alto + function Uoffs: TVarOffs; inline; //dirección del byte alto + function bank : TVarBank; inline; //banco + function addr : TVarOffs; //dirección absoluta de la variable + function Lbank: TVarBank; inline; //banco + function bit : byte; inline; //posición del bit +public //Campos de acceso a los valores constantes + property Value : TConsValue read FValue; + property valInt : Int64 read FValue.ValInt write SetvalInt; + property valFloat: extended read FValue.ValFloat write SetvalFloat; + property valBool : boolean read FValue.ValBool write SetvalBool; + property valStr : string read FValue.ValStr write FValue.ValStr; + //Funciones de ayuda para adaptar los tipos numéricos + function aWord: word; inline; //devuelve el valor en Word + function LByte: byte; inline; //devuelve byte bajo de valor entero + function HByte: byte; inline; //devuelve byte alto de valor entero + function EByte: byte; inline; //devuelve byte bajo de valor entero + function UByte: byte; inline; //devuelve byte bajo de valor entero + //campos para validar el rango de los valores + function CanBeByte: boolean; //indica si cae en el rango de un BYTE + function CanBeWord: boolean; //indica si cae en el rango de un WORD + //métodos para mover valores desde/hacia una constante externa + procedure CopyConsValTo(var c: TxpEleCon); + procedure GetConsValFrom(const c: TxpEleCon); +private //Manage items + curSize: integer; + function GetNItems: integer; +public //Manage items when it's constant array + property nItems: integer read GetNItems; + procedure InitItems; + procedure AddConsItem(const c: TConsValue); + procedure CloseItems; + procedure StringToArrayOfChar(str: string); +end; +TOperandPtr = ^TOperand; + +{ TCompOperands } + +TCompOperands = class +protected //Access to properties of p1^ y p2^. + p1, p2 : ^TOperand; //Pasa los operandos de la operación actual + res : TOperand; //resultado de la evaluación de la última expresión. + function value1: dword; + function value1L: word; + function value1H: word; + function value1U: word; + function value1E: word; + function value2: dword; + function value2L: word; + function value2H: word; + function bit1: TPicRegisterBit; + function bit2: TPicRegisterBit; + function byte1: word; + function byte1L: word; + function byte1H: word; + function byte1E: word; + function byte1U: word; + function byte2: word; + function byte2L: word; + function byte2H: word; + function byte2E: word; + function byte2U: word; + function stoOperation: TStoOperandsROB; inline; + procedure ExchangeP1_P2; + function OperationStr(Opt: TxpOperation): string; +protected + cIn : TContexts; //Entrada de datos +public //Errors and warnings + curLocation: TxpEleLocation; //Ubicación actual de exploración + HayError: boolean; + OnWarning: procedure(warTxt: string; fileName: string; row, col: integer) of object; + OnError : procedure(errTxt: string; fileName: string; row, col: integer) of object; + OnInfo : procedure(infTxt: string) of object; + procedure ClearError; + //Rutinas de generación de mensajes + procedure GenInfo(msg: string); + //Rutinas de generación de advertencias + procedure GenWarn(msg: string; fil: String; row, col: integer); + procedure GenWarn(msg: string; const Args: array of const; fil: String; row, col: integer); + procedure GenWarn(msg: string); + procedure GenWarn(msg: string; const Args: array of const); + procedure GenWarnPos(msg: string; const Args: array of const; srcPos: TSrcPos); + procedure GenError(msg: string; fil: String; row, col: integer); + procedure GenError(msg: String; const Args: array of const; fil: String; row, col: integer); + procedure GenError(msg: string); + procedure GenError(msg: String; const Args: array of const); + procedure GenErrorPos(msg: String; const Args: array of const; srcPos: TSrcPos); +public //Referencias a los tipos predefinidos de tokens. + tnEol : integer; + tnSymbol : integer; + tnSpace : integer; + tnIdentif : integer; + tnNumber : integer; + tnKeyword : integer; + tnString : integer; + tnComment : integer; + //Atributos + tkEol : TSynHighlighterAttributes; + tkSymbol : TSynHighlighterAttributes; + tkSpace : TSynHighlighterAttributes; + tkIdentif : TSynHighlighterAttributes; + tkNumber : TSynHighlighterAttributes; + tkKeyword : TSynHighlighterAttributes; + tkString : TSynHighlighterAttributes; + tkComment : TSynHighlighterAttributes; + //otras referencias + tnOperator: integer; + tnBoolean : integer; + tnSysFunct: integer; + tnType : integer; + //Atributos + tkOperator: TSynHighlighterAttributes; + tkBoolean : TSynHighlighterAttributes; + tkSysFunct: TSynHighlighterAttributes; + tkType : TSynHighlighterAttributes; +public //Tipos adicionales de tokens + tnStruct : integer; + tnDirective: integer; + tnAsm : integer; + tnExpDelim : integer; + tnBlkDelim : integer; + tnChar : integer; + tnOthers : integer; +end; + +implementation +{ TOperand } +function TOperand.VarName: string; inline; +begin + Result := rVar.name; +end; +function TOperand.offs: TVarOffs; +{Dirección de memoria, cuando es de tipo Char, Byte, Bit o Boolean.} +begin + if FSto = stVarRef then begin + //Caso especial, de stVarRefVar +// if FVar = nil then +// Result := FVarOff.offs +// else + Result := FVar.offs; + end else begin + //Para todos los otros casos, esto debe funcionar, según la docuemntación. + Result := FVar.offs; + end; +end; +function TOperand.Boffs: TVarOffs; +begin + Result := rVar.adrBit.offs; +end; +function TOperand.Loffs: TVarOffs; +{Dirección de memoria baja, cuando es de tipo Word.} +begin + Result := rVar.adrByte0.offs; +end; +function TOperand.Hoffs: TVarOffs; +begin + Result := rVar.adrByte1.offs; +end; +function TOperand.Eoffs: TVarOffs; +begin + Result := rVar.adrByte2.offs; +end; +function TOperand.Uoffs: TVarOffs; +begin + Result := rVar.adrByte3.offs; +end; +function TOperand.bank: TVarBank; +{Banco, del operando. Se supone que si se pide el banoo es porque es stVariab, o también +puede se el caso stVarRefVar. } +begin + if FSto = stVarRef then begin + //Caso especial, de stVarRefVar +// if FVar = nil then +// Result := FVarOff.bank +// else + Result := FVar.bank; + end else begin + //Para todos los otros casos, esto debe funcionar, según la docuemntación. + Result := FVar.bank; + end; +end; +function TOperand.addr: TVarOffs; +begin + Result := FVar.addr; +end; +function TOperand.Lbank: TVarBank; +{Banco del byte bajo, cuando es de tipo Word.} +begin + Result := rVar.adrByte0.bank; +end; +function TOperand.bit: byte; +begin + //Si se pide el bit, se asume que es de tipo "Bit". + Result := rVar.adrBit.bit; +end; +procedure TOperand.Invert; +begin + if Sto = stConst then begin + //Para constantes, no se puede negar la lógica, sino el valor + valBool := not valBool; + end else begin + //Variables y expresiones, sí. + Inverted := not Inverted; //invierte lógica + end; +end; +function TOperand.aWord: word; inline; +begin + Result := word(valInt); +end; +function TOperand.LByte: byte; inline; +begin + Result := LO(word(valInt)); +end; +function TOperand.HByte: byte; inline; +begin + Result := HI(word(valInt)); +end; +function TOperand.EByte: byte; +begin + Result := (valInt >> 16) and $FF; +end; + +function TOperand.UByte: byte; +begin + Result := (valInt >> 24) and $FF; +end; +function TOperand.CanBeWord: boolean; +{Indica si el valor constante que contiene, puede ser convertido a un WORD sin pérdida} +begin + Result := (valInt>=0) and (valInt<=$ffff); +end; +function TOperand.CanBeByte: boolean; +{Indica si el valor constante que contiene, puede ser convertido a un BYTE sin pérdida} +begin + Result := (valInt>=0) and (valInt<=$ff); +end; +procedure TOperand.CopyConsValTo(var c: TxpEleCon); +begin + c.val := FValue; +end; +procedure TOperand.GetConsValFrom(const c: TxpEleCon); +{Copia valores constante desde una constante. Primero TOperand, debería tener inicializado + correctamente su campo "catTyp". } +begin + FValue := c.val; +end; +function TOperand.GetNItems: integer; +{Returns the number of items when operand is a static array.} +begin + if Sto = stVariab then begin + //It's a variable + exit(rVar.typ.nItems) + end else if Sto = stConst then begin + exit(FValue.nItems); + end else begin + exit(0); + end; +end; +//Manage items +const CONS_ITEM_BLOCK = 3; +procedure TOperand.InitItems; +begin + FValue.nItems := 0; + curSize := CONS_ITEM_BLOCK; //Block size + setlength(FValue.items, curSize); //initial size +end; +procedure TOperand.AddConsItem(const c: TConsValue); +begin + FValue.items[FValue.nItems] := c; + inc(FValue.nItems); + if FValue.nItems >= curSize then begin + curSize += CONS_ITEM_BLOCK; //Increase size by block + setlength(FValue.items, curSize); //make space + end; +end; +procedure TOperand.CloseItems; +begin + setlength(FValue.items, FValue.nItems); +end; +procedure TOperand.StringToArrayOfChar(str: string); +{Init the constant value as array of char from a string.} +var + i: Integer; +begin + FValue.nItems := length(str); + setlength(FValue.items, FValue.nItems); + for i:=0 to FValue.nItems-1 do begin + FValue.items[i].ValInt := ord(str[i+1]); + end; +end; + +function TOperand.GetTyp: TxpEleType; +{Devuelve el tipo de la variable referenciada. } +begin + if Sto = stVariab then begin + Result := FVar.typ; + end else if Sto = stVarRef then begin + //Variable referenciada por variables. + //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sVarRef" + Result := FVar.typ.itmType; //¿No debería ser solo FVar.typ? + end else if Sto = stExpRef then begin + //Variable referenciada por expresión. + //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sExpRef" + if FVar = nil then begin + //Debe ser puntero. + Result := FTyp.itmType; + end else begin + //Debe ser arreglo + Result := FVar.typ; + end; + end else begin + //Constante o expresión + Result := FTyp; + end; +end; +procedure TOperand.SetvalBool(AValue: boolean); +begin + FValue.ValBool:=AValue; +end; +procedure TOperand.SetvalFloat(AValue: extended); +begin +// if FvalFloat=AValue then Exit; + FValue.ValFloat:=AValue; +end; +procedure TOperand.SetvalInt(AValue: Int64); +begin +// if FvalInt=AValue then Exit; + FValue.ValInt:=AValue; +end; +procedure TOperand.SetAsConst(xtyp: TxpEleType); +{Fija el almacenamiento del Operando como Constante, del tipo indicado} +begin + FSto := stConst; + FTyp := xtyp; + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsVariab(xvar: TxpEleVar); +{Fija el almacenamiento del Operando como Variable, del tipo de la variable} +begin + FSto := stVariab; + FVar := xvar; //No hace falta actualziar el tipo + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsExpres(xtyp: TxpEleType); +{Fija el almacenamiento del Operando como Expresión, del tipo indicado} +begin + FSto := stExpres; + FTyp := xtyp; + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsVarRef(VarBase: TxpEleVar); +{Fija el operando como de tipo stVarRefVar.} +begin + FSto := stVarRef; + FVar := VarBase; + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); +{Versión de SetAsVarRef(), con desplazamiento constante.} +begin + FSto := stVarRef; + FVar := VarBase; + FValue.ValInt := ValOff; + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); +begin + FSto := stExpRef; + FVar := VarBase; + FTyp := Etyp; + rVarBase := nil; //Inicia a este valor +end; +procedure TOperand.SetAsNull; +{Configura al operando como de tipo Null} +begin + FSto := stNull; + FTyp := typNull; //Este es el tipo NULO +end; +function TOperand.StoOpStr: string; +{Devuelve lmacenamiento como cadena.} +begin + case Sto of + stConst : exit('Constant'); + stVariab, stVarRef, stExpRef: exit('Variable'); + stExpres: exit('Expression'); + else + exit(''); + end; +end; +function TOperand.StoOpChr: char; +{Devuelve lmacenamiento como caracter.} +begin + Result := ' '; + case Sto of + stConst : exit('k'); + stVariab: exit('v'); + stExpres: exit('X'); + end; +end; +procedure TOperand.DefineRegister; +begin + //llama al evento de pila + if Typ.OnDefRegister<> nil then Typ.OnDefRegister; +end; +function TOperand.FindOperator(const oper: string): TxpOperator; +//Recibe la cadena de un operador y devuelve una referencia a un objeto Toperator, del +//operando. Si no está definido el operador para este operando, devuelve nullOper. +begin + Result := Typ.FindBinaryOperator(oper); +end; + +//Accesos a propiedades de p1^ y p2^. +function TCompOperands.value1: dword; inline; +begin + Result := p1^.valInt; +end; +function TCompOperands.value1L: word; inline; +begin + Result := p1^.LByte; +end; +function TCompOperands.value1H: word; inline; +begin + Result := p1^.HByte; +end; +function TCompOperands.value1U: word; inline; +begin + Result := p1^.UByte; +end; +function TCompOperands.value1E: word; inline; +begin + Result := p1^.EByte; +end; +function TCompOperands.value2: dword; inline; +begin + Result := p2^.valInt; +end; +function TCompOperands.value2L: word; inline; +begin + Result := p2^.LByte; +end; +function TCompOperands.value2H: word; inline; +begin + Result := p2^.HByte; +end; +function TCompOperands.byte1: word; +begin + Result := p1^.rVar.addr0; +end; +function TCompOperands.byte1L: word; +begin + Result := p1^.rVar.addr0; +end; +function TCompOperands.byte1H: word; +begin + Result := p1^.rVar.addr1; +end; +function TCompOperands.byte1E: word; +begin + Result := p1^.rVar.addr2; +end; +function TCompOperands.byte1U: word; +begin + Result := p1^.rVar.addr3; +end; +function TCompOperands.byte2: word; inline; +begin + Result := p2^.rVar.addr0; +end; +function TCompOperands.byte2L: word; +begin + Result := p2^.rVar.addr0; +end; +function TCompOperands.byte2H: word; +begin + Result := p2^.rVar.addr1; +end; +function TCompOperands.byte2E: word; +begin + Result := p2^.rVar.addr2; +end; +function TCompOperands.byte2U: word; +begin + Result := p2^.rVar.addr3; +end; +function TCompOperands.bit1: TPicRegisterBit; inline; +begin + Result := p1^.rVar.adrBit; +end; +function TCompOperands.bit2: TPicRegisterBit; inline; +begin + Result := p2^.rVar.adrBit; +end; +function TCompOperands.stoOperation: TStoOperandsROB; +begin + //Combinación de los almacenamientos de los operandos + Result := TStoOperandsROB((Ord(p1^.Sto) << 3) or ord(p2^.Sto)); +end; +procedure TCompOperands.ExchangeP1_P2; +{Intercambia el orden de los operandos.} +var + tmp : ^TOperand; +begin + //Invierte los operandos + tmp := p1; + p1 := p2; + p2 := tmp; +end; +function TCompOperands.OperationStr(Opt: TxpOperation): string; +{Devuelve una cadena indicando los tipos/alacenamiento y la operación, que se tiene +en "p1", "p2" y "Opt".} +var + type1, type2: TxpEleType; + Operat: TxpOperator; +begin + type1 := Opt.parent.parent; + type2 := Opt.ToType; + Operat:= Opt.parent; + Result := p1^.StoOpStr+' '+type1.name + ' ' + Operat.txt + ' ' + p2^.StoOpStr+' '+type2.name; +end; +//Errors and warnings +procedure TCompOperands.ClearError; +{Limpia la bandera de errores. Tomar en cuenta que solo se debe usar para iniciar el +procesamiento de errores. Limpiar errores en medio de la compilación, podría hacer que +se pierda el rastro de errores anteriores, y que inclusive, la compilación termine sin +error, aún cuando haya generado errores intermedios. +Como norma, se podría decir que solo se debe usar, después de haber proecsado un posible +error anterior.} +begin + HayError := false; +end; +procedure TCompOperands.GenInfo(msg: string); +begin + if OnInfo<>nil then OnInfo(msg); +end; +procedure TCompOperands.GenWarn(msg: string; fil: String; row, col: integer); +{Genera un mensaje de advertencia en la posición indicada.} +begin + if OnWarning<>nil then OnWarning(msg, fil, row, col); +end; +procedure TCompOperands.GenWarn(msg: string; const Args: array of const; + fil: String; row, col: integer); +begin + GenWarn(Format(msg, Args), fil, row, col); +end; +procedure TCompOperands.GenWarn(msg: string); +{Genera un mensaje de Advertencia, en la posición actual del contexto. } +begin + if (cIn = nil) or (cIn.curCon = nil) then begin + GenWarn(msg, '', -1, -1); + end else begin + GenWarn(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); + end; +end; +procedure TCompOperands.GenWarn(msg: string; const Args: array of const); +{Genera un mensaje de Advertencia, en la posición actual del contexto. } +begin + GenWarn(Format(msg, Args)); +end; +procedure TCompOperands.GenWarnPos(msg: string; const Args: array of const; + srcPos: TSrcPos); +begin + GenWarn(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); +end; +//Rutinas de generación de error +procedure TCompOperands.GenError(msg: string; fil: String; row, col: integer); +{Genera un mensaje de error en la posición indicada.} +begin + //Protección + if cIn.curCon = nil then begin + HayError := true; + exit; + end; + if cIn.curCon.FixErrPos then begin + //El contexto actual, tiene configurado uan posición fija para los errores + msg := cIn.curCon.PreErrorMsg + msg; //completa mensaje + if OnError<>nil then OnError(msg, cIn.curCon.ErrPosition.fil, + cIn.curCon.ErrPosition.row, + cIn.curCon.ErrPosition.col); + + end else begin + if OnError<>nil then OnError(msg, fil, row, col); + end; + HayError := true; +end; +procedure TCompOperands.GenError(msg: String; const Args: array of const; + fil: String; row, col: integer); +{Versión con parámetros de GenError.} +begin + GenError(Format(msg, Args), fil, row, col); +end; +procedure TCompOperands.GenError(msg: string); +{Función de acceso rápido para Perr.GenError(). Pasa como posición a la posición +del contexto actual. Realiza la traducción del mensaje también.} +begin + if (cIn = nil) or (cIn.curCon = nil) then begin + GenError(msg, '', -1, -1); + end else begin + GenError(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); + end; +end; +procedure TCompOperands.GenError(msg: String; const Args: array of const); +{Genera un mensaje de error eb la posición actual del contexto.} +begin + GenError(Format(msg, Args)); +end; +procedure TCompOperands.GenErrorPos(msg: String; const Args: array of const; + srcPos: TSrcPos); +{Genera error en una posición específica del código} +begin + GenError(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); +end; + +end. + diff --git a/Source/CompilerPIC16.pas b/Source/CompilerPIC16.pas new file mode 100644 index 00000000..a8a0a5e0 --- /dev/null +++ b/Source/CompilerPIC16.pas @@ -0,0 +1,2716 @@ +{Unidad con rutinas del analizador sintáctico. +} +unit CompilerPIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, lclProc, SynEditHighlighter, types, MisUtils, XpresBas, + XpresTypesPIC, XpresElementsPIC, Pic16Utils, Pic16Devices, Parser, + Globales, GenCodBas_PIC16, GenCod_PIC16, ParserDirecPIC16, FormConfig {Por diseño, parecería que GenCodPic, no debería accederse desde aquí}; +type + { TCompiler } + TCompiler = class(TParserDirec) + private //Funciones básicas + function AddType(typName: string; srcPos: TSrcPos): TxpEleType; + function AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleVar; + procedure ArrayDeclaration(out itemTyp: TxpEleType; out nEle: integer); + procedure array_high(const OpPtr: pointer); + procedure array_low(const OpPtr: pointer); + procedure CompileTypeDeclar(IsInterface: boolean; typName: string = ''); + function GetAdicVarDeclar(out IsBit: boolean): TAdicVarDec; + procedure cInNewLine(lin: string); + procedure Cod_JumpIfTrue; + function CompileStructBody(GenCode: boolean): boolean; + function CompileConditionalBody(out FinalBank: byte): boolean; + function CompileNoConditionBody(GenCode: boolean): boolean; + procedure CompileFOR; + procedure CompileLastEnd; + procedure CompileProcHeader(out fun: TxpEleFun; ValidateDup: boolean = true); + function GetExpressionBool: boolean; + function getParamType: TxpEleType; + function GetTypeVarDeclar: TxpEleType; + function IsUnit: boolean; + procedure array_length(const OpPtr: pointer); + procedure ProcCommentsNoExec; + function StartOfSection: boolean; + procedure ResetFlashAndRAM; + procedure getListOfIdent(var itemList: TStringDynArray; out + srcPosArray: TSrcPosArray); + procedure CaptureDecParams(fun: TxpEleFun); + procedure CompileIF; + procedure CompileREPEAT; + procedure CompileWHILE; + procedure Tree_AddElement(elem: TxpElement); + function VerifyEND: boolean; + protected //Métodos OVERRIDE + procedure ProcComments; override; + procedure TipDefecNumber(var Op: TOperand; toknum: string); override; + procedure TipDefecString(var Op: TOperand; tokcad: string); override; + procedure TipDefecBoolean(var Op: TOperand; tokcad: string); override; + private //Rutinas para la compilación y enlace + procedure CompileProcBody(fun: TxpEleFun); + private //Compilación de secciones + procedure CompileGlobalConstDeclar; + procedure CompileVarDeclar(IsInterface: boolean = false); + procedure CompileProcDeclar(IsImplementation: boolean); + procedure CompileInstruction; + procedure CompileInstructionDummy; + function OpenContextFrom(filePath: string): boolean; + procedure CompileCurBlock; + procedure CompileCurBlockDummy; + procedure CompileUnit(uni: TxpElement); + procedure CompileUsesDeclaration; + procedure CompileProgram; + procedure CompileLinkProgram; + public + OnAfterCompile: procedure of object; //Al finalizar la compilación. + {Indica que TCompiler, va a acceder a un archivo, peor está pregunatndo para ver + si se tiene un Stringlist, con los datos ya caragdos del archivo, para evitar + tener que abrir nuevamente al archivo.} + OnRequireFileString: procedure(FilePath: string; var strList: TStrings) of object; + function hexFilePath: string; + function mainFilePath: string; + procedure Compile(NombArc: string; Link: boolean = true); + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); //uso de memoria RAM + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); //uso de la memoria Flash + function RAMusedStr: string; + function FLASHusedStr: string; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); + procedure GenerateListReport(lins: TStrings); + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + +procedure SetLanguage; + +implementation +//Funciones básicas +{$I ..\language\tra_Parser.pas} +procedure TCompiler.cInNewLine(lin: string); +//Se pasa a una nueva _Línea en el contexto de entrada +begin + if Config.IncComment then begin + pic.addTopComm(' ;'+trim(lin)); //agrega _Línea al código ensmblador + end; +end; +function TCompiler.StartOfSection: boolean; +begin + Result := (cIn.tokL ='var') or (cIn.tokL ='const') or + (cIn.tokL ='type') or (cIn.tokL ='procedure'); +end; +procedure TCompiler.ResetFlashAndRAM; +{Reinicia el dispositivo, para empezar a escribir en la posición $000 de la FLASH, y +en la posición inicial de la RAM.} +begin + pic.iFlash := 0; //Ubica puntero al inicio. + pic.ClearMemRAM; //Pone las celdas como no usadas y elimina nombres. + CurrBank := 0; + StartRegs; //Limpia registros de trabajo, auxiliares, y de pila. +end; +procedure TCompiler.getListOfIdent(var itemList: TStringDynArray; out srcPosArray: TSrcPosArray); +{Lee una lista de identificadores separados por comas, hasta encontra un caracter distinto +de coma. Si el primer elemento no es un identificador o si después de la coma no sigue un +identificador, genera error. +También devuelve una lista de las posiciones de los identificadores, en el código fuente.} +var + item: String; + n: Integer; +begin + setlength(srcPosArray,0 ); + setlength(itemList, 0); //hace espacio + repeat + ProcComments; + //ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador + item := cIn.tok; + //sgrega nombre de ítem + n := high(itemList)+1; + setlength(itemList, n+1); //hace espacio + setlength(srcPosArray, n+1); //hace espacio + itemList[n] := item; //agrega nombre + srcPosArray[n] := cIn.ReadSrcPos; //agrega ubicación de declaración + cIn.Next; //lo toma identificador despues, de guardar ubicación + ProcComments; + if cIn.tok <> ',' then break; //sale + cIn.Next; //toma la coma + until false; +end; +function TCompiler.getParamType: TxpEleType; +{Lee el tipo que acompaña a una declaración de parámetro de un procedimeinto. +Es muy similar a GetTypeVarDeclaration (excepto porque aquí se verifican los tipos +copias), y tal vez debería unificarse.} +var + typName: String; + typ: TxpEleType; + ele: TxpElement; +begin + ProcComments; + typName := cIn.tok; //lee tipo de parámetro + //Primero verifica si es un tipo del sistema + typ := FindSysEleType(typName); //tipos básicos + if typ <> nil then begin + //Es un tipo del sistema + end else begin + //No es un tipo delñ sistema, debe ser otro tipo + ele := TreeElems.FindFirst(typName); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenError('Unknown identifier: %s', [typName]); + exit(nil); + end; + if ele.idClass = eltType then begin + //Es un tipo + typ := TxpEleType(ele); + AddCallerTo(typ); //lleva la cuenta + if typ.copyOf<>nil then typ := typ.copyOf; + end else begin + GenError(ER_IDE_TYP_EXP); + exit(nil); + end; + end; + cIn.Next; + Result := typ; +end; +procedure TCompiler.ProcComments; +{Procesa comentarios, directivas y bloques ASM. Los bloques ASM, se processan también +como comentarios o directivas, para poder ubicarlos dentro de instrucciones, y poder +darle mayor poder, en el futuro. +Notar que este procedimiento puede detectar varios errores en el mismo bloque, y que +pasa al siguiente token, aún cuando detecta errores. Esto permite seguir proesando +el texto, después de que ya se han generado errores dentro de este blqoue. Así, no +sería necesario verificar error después de esta rutina, y se podrían detectar errores +adicionales en el código fuente.} +var + ctxChanged: Boolean; //Manejamos variables locales para permitir recursividad +begin + cIn.SkipWhites; + while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin + if cIn.tokType = tnAsm then begin + //Es una línea ASM + ProcASMlime(cIn.tok); //procesa línea + if HayError then begin + cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros + cIn.SkipWhites; + continue; + end; + end else begin + //Es una directiva + ProcDIRline(cIn.tok, ctxChanged); //procesa línea + if HayError then begin + cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros + cIn.SkipWhites; + continue; + end; + if ctxChanged then begin + {Hubo cambio de contexto. Procesamos nuevamente, porque ahora estamos ya en + otro contexto y se supone que esta llamada a ProcComments(), se hace precisamente + para saltar blancos, comentarios, directivas, o bloques ASM.} +// cIn.SkipWhites; {En el nuevo contexto puede haber nuevos comentarios.} + ProcComments; {En el nuevo contexto puede haber nuevos comentarios o bloques Asm.} + exit; + end; + end; + //Pasa a siguiente + cIn.Next; + cIn.SkipWhites; //limpia blancos + end; +end; +procedure TCompiler.ProcCommentsNoExec; +{Similar a ProcComments(), pero no ejecuta directivas o bloques ASM.} +begin + cIn.SkipWhites; + while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin + //Pasa a siguiente + cIn.Next; + cIn.SkipWhites; //limpia blancos + end; +end; +procedure TCompiler.CompileLastEnd; +{Compila la parte de final de un programa o una unidad} +begin + if cIn.Eof then begin + GenError(ER_EOF_END_EXP); + exit; //sale + end; + if cIn.tokL <> 'end' then begin //verifica si termina el programa + if cIn.tokL = 'else' then begin + //Precisa un poco más en el error + GenError(ER_ELS_UNEXPEC); + exit; //sale + end else begin + GenError(ER_END_EXPECTE); + exit; //sale + end; + end; + cIn.Next; //coge "end" + //Debería seguir el punto + if not CaptureTok('.') then exit; + //no debe haber más instrucciones + ProcComments; + if not cIn.Eof then begin + GenError(ER_NOT_AFT_END); + exit; //sale + end; +end; +function TCompiler.AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos + ): TxpEleVar; +{Crea un elemento variable y lo agrega en el nodo actual del árbol de sintaxis. +Si no hay errores, devuelve la referencia a la variable. En caso contrario, +devuelve NIL. +Notar que este método, no asigna RAM a la variable. En una creación completa de +variables, se debería llamar a CreateVarInRAM(), después de agregar la variable.} +var + xvar: TxpEleVar; +begin + //Inicia parámetros adicionales de declaración + xvar := CreateVar(varName, eleTyp); + xvar.srcDec := srcPos; //Actualiza posición + Result := xvar; + if not TreeElems.AddElement(xvar) then begin + GenErrorPos(ER_DUPLIC_IDEN, [xvar.name], xvar.srcDec); + xvar.Destroy; //Hay una variable creada + exit(nil); + end; +end; +function TCompiler.AddType(typName: string; srcPos: TSrcPos): TxpEleType; +{Crea un elemento tipo y lo agrega en el nodo actual del árbol de sintaxis. +Si no hay errores, devuelve la referencia al tipo. En caso contrario, +devuelve NIL.} +var + xtyp: TxpEleType; +begin + //Inicia parámetros adicionales de declaración + xtyp := CreateEleType(typName); + xtyp.srcDec := srcPos; //Actualiza posición + Result := xtyp; + if not TreeElems.AddElement(xtyp) then begin + GenErrorPos(ER_DUPLIC_IDEN, [xtyp.name], xtyp.srcDec); + xtyp.Destroy; //Hay una variable creada + exit(nil); + end; +end; +procedure TCompiler.CaptureDecParams(fun: TxpEleFun); +//Lee la declaración de parámetros de una función. +var + typ: TxpEleType; + xvar: TxpEleVar; + IsRegister: Boolean; + itemList: TStringDynArray; + srcPosArray: TSrcPosArray; + i: Integer; +begin + cIn.SkipWhites; + if EOBlock or EOExpres or (cIn.tok = ':') then begin + //no tiene parámetros + end else begin + //Debe haber parámetros + if not CaptureTok('(') then exit; + cin.SkipWhites; + repeat + IsRegister := false; + if cIn.tokL = 'register' then begin + IsRegister := true; + cin.Next; + cin.SkipWhites; + end; + getListOfIdent(itemList, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_IDEN_EXPECT); + exit; + end; + if not CaptureTok(':') then exit; + typ := getParamType; //lee tipo + if HayError then exit; + //Ya tiene los nombres y el tipo + //Crea el parámetro como una varaible local + for i:= 0 to high(itemList) do begin + //Crea los parámetros de la lista. + if IsRegister then begin + //Parámetro REGISTER. Solo puede haber uno + if high(itemList)>0 then begin + GenErrorPos(ER_ONLY_ONE_REG, [], srcPosArray[1]); + exit; + end; + {Crea como variable absoluta a una posición cualquiera porque esta variable, + no debería estar mapeada.} + xvar := AddVariable({fun.name + '_' + }itemList[i], typ, srcPosArray[i]); + xvar.IsParameter := true; //Marca bandera + xvar.IsRegister := true; + //CreateVarInRAM(xvar); //Crea la variable + if HayError then exit; + end else begin + //Parámetro normal + xvar := AddVariable({fun.name + '_' + }itemList[i], typ, srcPosArray[i]); + xvar.IsParameter := true; //Marca bandera + xvar.IsRegister := false; + //CreateVarInRAM(xvar); //Crea la variable + if HayError then exit; + end; + //Ahora ya tiene la variable + fun.CreateParam(itemList[i], typ, xvar); + if HayError then exit; + end; + //Busca delimitador + if cIn.tok = ';' then begin + cIn.Next; //toma separador + cIn.SkipWhites; + end else begin + //no sigue separador de parámetros, + //debe terminar la lista de parámetros + //¿Verificar EOBlock or EOExpres ? + break; + end; + until false; + //busca paréntesis final + if not CaptureTok(')') then exit; + end; +end; +function TCompiler.CompileStructBody(GenCode: boolean): boolean; +{Compila el cuerpo de un THEN, ELSE, WHILE, ... considerando el modo del compilador. +Si se genera error, devuelve FALSE. } +begin + if GenCode then begin + //Este es el modo normal. Genera código. + if mode = modPascal then begin + //En modo Pascal se espera una instrucción + CompileInstruction; + end else begin + //En modo normal + CompileCurBlock; + end; + if HayError then exit(false); + end else begin + //Este modo no generará instrucciones + cIn.SkipWhites; + GenWarn(ER_INST_NEV_EXE); + if mode = modPascal then begin + //En modo Pascal se espera una instrucción + CompileInstructionDummy //solo para mantener la sintaxis + end else begin + //En modo normal + CompileCurBlockDummy; //solo para mantener la sintaxis + end; + if HayError then exit(false); + end; + //Salió sin errores + exit(true); +end; +function TCompiler.CompileConditionalBody(out FinalBank: byte): boolean; +{Versión de CompileStructBody(), para bloques condicionales. +Se usa para bloque que se ejecutarán de forma condicional, es decir, que no se +garantiza que se ejecute siempre. "FinalBank" indica el banco en el que debería +terminar el bloque.} +begin + Result := CompileStructBody(true); //siempre genera código + FinalBank := CurrBank; //Devuelve banco +end; +function TCompiler.CompileNoConditionBody(GenCode: boolean): boolean; +{Versión de CompileStructBody(), para bloques no condicionales. +Se usa para bloques no condicionales, es decir que se ejecutará siempre (Si GenCode +es TRUE) o nunca (Si GenCode es FALSE); +} +begin + //"BankChanged" sigue su curso normal + Result := CompileStructBody(GenCode); +end; +function TCompiler.VerifyEND: boolean; +{Compila la parte final de la estructura, que en el modo PicPas, debe ser el + delimitador END. Si encuentra error, devuelve FALSE.} +begin + Result := true; //por defecto + if mode = modPicPas then begin + //En modo PicPas, debe haber un delimitador de bloque + if not CaptureStr('end') then exit(false); + end; +end; +function TCompiler.GetExpressionBool: boolean; +{Lee una expresión booleana. Si hay algún error devuelve FALSE.} +begin + GetExpressionE(0); + if HayError then exit(false); + if res.Typ <> typBool then begin + GenError(ER_BOOL_EXPECT); + exit(false); + end; + ProcComments; + exit(true); //No hay error +end; +procedure TCompiler.CompileIF; +{Compila una extructura IF} + procedure SetFinalBank(bnk1, bnk2: byte); + {Fija el valor de CurrBank, de acuerdo a dos bancos finales.} + begin + if OptBnkAftIF then begin + //Optimizar banking + if bnk1 = bnk2 then begin + //Es el mismo banco (aunque sea 255). Lo deja allí. + end else begin + CurrBank := 255; //Indefinido + end; + end else begin + //Sin optimización + _BANKRESET; + end; + end; +var + jFALSE, jEND_TRUE: integer; + bnkExp, bnkTHEN, bnkELSE: Byte; +begin + if not GetExpressionBool then exit; + bnkExp := CurrBank; //Guarda el banco inicial + if not CaptureStr('then') then exit; //toma "then" + //Aquí debe estar el cuerpo del "if" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Es verdadero, siempre se ejecuta + if not CompileNoConditionBody(true) then exit; + //Compila los ELSIF que pudieran haber + while cIn.tokL = 'elsif' do begin + cIn.Next; //toma "elsif" + if not GetExpressionBool then exit; + if not CaptureStr('then') then exit; //toma "then" + //Compila el cuerpo pero sin código + if not CompileNoConditionBody(false) then exit; + end; + //Compila el ELSE final, si existe. + if cIn.tokL = 'else' then begin + //Hay bloque ELSE, pero no se ejecutará nunca + cIn.Next; //toma "else" + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end else begin + VerifyEND; + end; + end else begin + //Es falso, nunca se ejecuta + if not CompileNoConditionBody(false) then exit; + if cIn.tokL = 'else' then begin + //hay bloque ELSE, que sí se ejecutará + cIn.Next; //toma "else" + if not CompileNoConditionBody(true) then exit; + VerifyEND; + end else if cIn.tokL = 'elsif' then begin + cIn.Next; + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + //No es necesario verificar el END final. + end else begin + VerifyEND; + end; + end; + end; + stVariab, stExpres:begin + Cod_JumpIfTrue; + _GOTO_PEND(jFALSE); //salto pendiente + //Compila la parte THEN + if not CompileConditionalBody(bnkTHEN) then exit; + //Verifica si sigue el ELSE + if cIn.tokL = 'else' then begin + //Es: IF ... THEN ... ELSE ... END + cIn.Next; //toma "else" + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CurrBank := bnkExp; //Fija el banco inicial antes de compilar + if not CompileConditionalBody(bnkELSE) then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, bnkELSE); //Manejo de bancos + VerifyEND; //puede salir con error + end else if cIn.tokL = 'elsif' then begin + //Es: IF ... THEN ... ELSIF ... + cIn.Next; + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, CurrBank); //Manejo de bancos + //No es necesario verificar el END final. + end else begin + //Es: IF ... THEN ... END. (Puede ser recursivo) + _LABEL(jFALSE); //termina de codificar el salto + SetFinalBank(bnkExp, bnkTHEN); //Manejo de bancos + VerifyEND; //puede salir con error + end; + end; + end; +end; +procedure TCompiler.Cod_JumpIfTrue; +{Codifica una instrucción de salto, si es que el resultado de la última expresión es +verdadera. Se debe asegurar que la expresión es de tipo booleana y de almacenamiento +stVariab o stExpres.} +begin + if res.Sto = stVariab then begin + //Las variables booleanas, pueden estar invertidas + if res.Inverted then begin + _BANKSEL(res.bank); + _BTFSC(res.offs, res.bit); //verifica condición + end else begin + _BANKSEL(res.bank); + _BTFSS(res.offs, res.bit); //verifica condición + end; + end else if res.Sto = stExpres then begin + //Los resultados de expresión, pueden optimizarse + if InvertedFromC then begin + //El resultado de la expresión, está en Z, pero a partir una copia negada de C + //Se optimiza, eliminando las instrucciones de copia de C a Z + pic.iFlash := pic.iFlash-2; + //La lógica se invierte + if res.Inverted then begin //_Lógica invertida + _BTFSS(C.offs, C.bit); //verifica condición + end else begin + _BTFSC(C.offs, C.bit); //verifica condición + end; + end else begin + //El resultado de la expresión, está en Z. Caso normal + if res.Inverted then begin //Lógica invertida + _BTFSC(Z.offs, Z.bit); //verifica condición + end else begin + _BTFSS(Z.offs, Z.bit); //verifica condición + end; + end; + end; +end; +procedure TCompiler.CompileREPEAT; +{Compila uan extructura WHILE} +var + l1: Word; +begin + l1 := _PC; //guarda dirección de inicio + CompileCurBlock; + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('until') then exit; //toma "until" + if not GetExpressionBool then exit; + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //lazo nulo + end else begin + //lazo infinito + _GOTO(l1); + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO(l1); + //sale cuando la condición es verdadera + end; + end; +end; +procedure TCompiler.CompileWHILE; +{Compila una extructura WHILE} +var + l1: Word; + dg: Integer; + bnkEND, bnkExp1, bnkExp2: byte; +begin + l1 := _PC; //guarda dirección de inicio + bnkExp1 := CurrBank; //Guarda el banco antes de la expresión + if not GetExpressionBool then exit; //Condición + bnkExp2 := CurrBank; //Guarda el banco antes de la expresión + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "while" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Lazo infinito + if not CompileNoConditionBody(true) then exit; + if not VerifyEND then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); + end else begin + //Lazo nulo. Compila sin generar código. + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkEND) then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); //salta a evaluar la condición + if not VerifyEND then exit; + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end; + end; + CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE +end; +procedure TCompiler.CompileFOR; +{Compila uan extructura WHILE} +var + l1: Word; + dg: Integer; + Op1, Op2: TOperand; + opr1: TxpOperator; + bnkFOR: byte; +begin + Op1 := GetOperand; + if Op1.Sto <> stVariab then begin + GenError(ER_VARIAB_EXPEC); + exit; + end; + if HayError then exit; + if (Op1.Typ<>typByte) and (Op1.Typ<>typWord) then begin + GenError(ER_ONL_BYT_WORD); + exit; + end; + cIn.SkipWhites; + opr1 := GetOperator(Op1); //debe ser ":=" + if opr1.txt <> ':=' then begin + GenError(ER_ASIG_EXPECT); + exit; + end; + GetExpressionE(0); + if HayError then exit; + //Ya se tiene la asignación inicial + Oper(Op1, opr1, res); //codifica asignación + if HayError then exit; + if not CaptureStr('to') then exit; + //Toma expresión Final + GetExpressionE(0); + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "for" + if (res.Sto = stConst) or (res.Sto = stVariab) then begin + //Es un for con valor final de tipo constante + //Se podría optimizar, si el valor inicial es también constante + l1 := _PC; //guarda dirección de inicio + //Codifica rutina de comparación, para salir + opr1 := Op1.Typ.FindBinaryOperator('<='); //Busca operador de comparación + if opr1 = nullOper then begin + GenError('Internal: No operator <= defined for %s.', [Op1.Typ.name]); + exit; + end; + Op2 := res; //Copia porque la operación Oper() modificará res + Oper(Op1, opr1, Op2); //"res" mantiene la constante o variable + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkFOR) then exit; + if not VerifyEND then exit; + //Incrementa variable cursor + if Op1.Typ = typByte then begin + _INCF(Op1.offs, toF); + end else if Op1.Typ = typWord then begin + _BANKSEL(oP1.bank); + _INCF(Op1.Loffs, toF); + _BTFSC(STATUS, _Z); + _INCF(Op1.Hoffs, toF); + end; + _GOTO(l1); //repite el lazo + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end else begin + GenError('Last value must be Constant or Variable'); + exit; + end; +end; +procedure TCompiler.Tree_AddElement(elem: TxpElement); +begin + if FirstPass then begin + //Caso normal. Solo aquí dede modificarse el árbol de sintaxis. + end else begin + //Solo se permiet agregar elementos en la primera pasada + GenError('Internal Error: Syntax Tree modified on linking.'); + end; +end; +//Métodos OVERRIDE +procedure TCompiler.TipDefecNumber(var Op: TOperand; toknum: string); +{Procesa constantes numéricas, ubicándolas en el tipo de dato apropiado (byte, word, ... ) + Si no logra ubicar el tipo de número, o no puede leer su valor, generará un error.} +var + n: int64; //para almacenar a los enteros +// f: extended; //para almacenar a reales +begin + if pos('.',toknum) <> 0 then begin //es flotante + GenError('Unvalid float number.'); //No hay soporte aún para flotantes +// try +// f := StrToFloat(toknum); //carga con la mayor precisión posible +// except +// Op.typ := nil; +// GenError('Unvalid float number.'); +// exit; +// end; +// //busca el tipo numérico más pequeño que pueda albergar a este número +// Op.size := 4; //se asume que con 4 bytes bastará +// {Aquí se puede decidir el tamaño de acuerdo a la cantidad de decimales indicados} +// +// Op.valFloat := f; //debe devolver un extended +// menor := 1000; +// for i:=0 to typs.Count-1 do begin +// { TODO : Se debería tener una lista adicional TFloatTypes, para acelerar la +// búsqueda} +// if (typs[i].cat = t_float) and (typs[i].size>=Op.size) then begin +// //guarda el menor +// if typs[i].size < menor then begin +// imen := i; //guarda referencia +// menor := typs[i].size; +// end; +// end; +// end; +// if menor = 1000 then //no hubo tipo +// Op.typ := nil +// else //encontró +// Op.typ:=typs[imen]; +// + end else begin //es entero + //Intenta convertir la cadena. Notar que se reconocen los formatos $FF y %0101 + if not TryStrToInt64(toknum, n) then begin + //Si el lexer ha hecho bien su trabajo, esto solo debe pasar, cuando el + //número tiene mucHos dígitos. + GenError('Error in number.'); + exit; + end; + Op.valInt := n; //copia valor de constante entera + {Asigna un tipo, de acuerdo al rango. Notar que el tipo más pequeño, usado + es el byte, y no el bit.} + if (n>=0) and (n<=255) then begin + Op.SetAsConst(typByte); + end else if (n>= 0) and (n<=$FFFF) then begin + Op.SetAsConst(typWord); + end else if (n>= 0) and (n<=$FFFFFFFF) then begin + Op.SetAsConst(typDWord); + end else begin //no encontró + GenError(ER_NOTYPDEF_NU); + Op.SetAsNull; + end; + end; +end; +procedure TCompiler.TipDefecString(var Op: TOperand; tokcad: string); +//Devuelve el tipo de cadena encontrado en un token +//var +// i: Integer; +begin +{ Op.catTyp := t_string; //es cadena + Op.size:=length(tokcad); + //toma el texto + Op.valStr := copy(cIn.tok,2, length(cIn.tok)-2); //quita comillas + //////////// Verifica si hay tipos string definidos //////////// + if length(Op.valStr)=1 then begin + Op.typ := tipChr; + end else + Op.typ :=nil; //no hay otro tipo} +end; +procedure TCompiler.TipDefecBoolean(var Op: TOperand; tokcad: string); +//Devuelve el tipo de cadena encontrado en un token +begin + //convierte valor constante + Op.SetAsConst(typBool); + Op.valBool:= (tokcad[1] in ['t','T']); +end; +//Rutinas para la compilación y enlace +procedure TCompiler.CompileProcBody(fun: TxpEleFun); +{Compila el cuerpo de un procedimiento} +begin + StartCodeSub(fun); //Inicia codificación de subrutina + CompileInstruction; + if HayError then exit; + if fun.IsInterrupt then begin + //Las interrupciones terminan así + _RETFIE + end else begin + //Para los procedimeintos, podemos terminar siemrpe con un RETURN u optimizar, + if OptRetProc then begin + //Verifica es que ya se ha incluido exit(). + if fun.ObligatoryExit<>nil then begin + //Ya tiene un exit() obligatorio y en el final (al menos eso se espera) + //No es necesario incluir el RETURN(). + end else begin + //No hay un exit(), seguro + _RETURN(); //instrucción de salida + end; + end else begin + _RETURN(); //instrucción de salida + end; + end; + EndCodeSub; //termina codificación + {Fija banco al terminar de codificar. Si no se modificó el banco en la compilación + (como en un procedimiento vacío) CurrBank, contiene el banco que se fijó antes de + llamar a CompileProcBody(), que es: + Siemrpe 0 -> en la primera pasada. + Un valor calculado -> en la segund pasada.} + fun.finBnk := CurrBank; //Banco al terminar de codificar + //Calcula tamaño + fun.srcSize := pic.iFlash - fun.adrr; +end; +function TCompiler.OpenContextFrom(filePath: string): boolean; +{Abre un contexto con el archivo indicado. Si lo logra abrir, devuelve TRUE.} +var + strList: TStrings; +begin + //Primero ve si puede obteenr acceso directo al contenido del archivo + if OnRequireFileString<>nil then begin + //Hace la consulta a través del evento + strList := nil; + OnRequireFileString(filePath, strList); + if strList=nil then begin + //No hay acceso directo al contenido. Carga de disco + //debugln('>disco:'+filePath); + cIn.MsjError := ''; + cIn.NewContextFromFile(filePath); + Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. + end else begin + //Nos están dando el acceso al contenido. Usamos "strList" + cIn.NewContextFromFile(filePath, strList); + Result := true; + end; + end else begin + //No se ha establecido el evento. Carga de disco + //debugln('>disco:'+filePath); + cIn.MsjError := ''; + cIn.NewContextFromFile(filePath); + Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. + end; +end; +//Compilación de secciones +procedure TCompiler.CompileGlobalConstDeclar; +var + consNames: array of string; //nombre de variables + cons: TxpEleCon; + srcPosArray: TSrcPosArray; + i: integer; +begin + //procesa lista de constantes a,b,cons ; + getListOfIdent(consNames, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_IDE_CON_EXP); + exit; + end; + //puede seguir "=" o identificador de tipo + if cIn.tok = '=' then begin + cIn.Next; //pasa al siguiente + //Debe seguir una expresiócons constante, que no genere consódigo + GetExpressionE(0); + if HayError then exit; + if res.Sto <> stConst then begin + GenError(ER_CON_EXP_EXP); + end; + //Hasta aquí todo bien, crea la(s) constante(s). + for i:= 0 to high(consNames) do begin + //crea constante + cons := CreateCons(consNames[i], res.Typ); + cons.srcDec := srcPosArray[i]; //guarda punto de declaración + if not TreeElems.AddElement(cons) then begin + GenErrorPos(ER_DUPLIC_IDEN, [cons.name], cons.srcDec); + cons.Destroy; //hay una constante creada + exit; + end; + res.CopyConsValTo(cons); //asigna valor + end; +// end else if cIn.tok = ':' then begin + end else begin + GenError(ER_EQU_COM_EXP); + exit; + end; + if not CaptureDelExpres then exit; + ProcComments; + //puede salir con error +end; +function TCompiler.GetAdicVarDeclar(out IsBit: boolean): TAdicVarDec; +{Verifica si lo que sigue es la sintaxis ABSOLUTE ... . Si esa así, procesa el texto, +pone "IsAbs" en TRUE y actualiza los valores "absAddr" y "absBit". } + function ReadAddres(tok: string): word; + {Lee una dirección de RAM a partir de una cadena numérica. + Puede generar error.} + var + n: LongInt; + begin + //COnvierte cadena (soporta binario y hexadecimal) + if not TryStrToInt(tok, n) then begin + //Podría fallar si es un número muy grande + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + if (n<0) or (n>$ffff) then begin + //Debe set Word + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + Result := n; + if not pic.ValidRAMaddr(Result) then begin + GenError(ER_INV_MAD_DEV); + {%H-}exit; + end; + end; + function ReadAddresBit(tok: string): byte; + {Lee la parte del bit de una dirección de RAM a partir de una cadena numérica. + Puede generar error.} + var + n: Longint; + begin + if not TryStrToInt(tok, n) then begin + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + if (n<0) or (n>7) then begin + GenError(ER_INV_MEMADDR); + {%H-}exit; + end; + Result := n; //no debe fallar + end; +var + xvar: TxpEleVar; + n: integer; + Op: TOperand; +begin + Result.srcDec := cIn.PosAct; //Posición de inicio de posibles parámetros adic. + Result.isAbsol := false; //Bandera + Result.absVar := nil; //Por defecto + if (cIn.tokL <> 'absolute') and (cIn.tok <> '@') then begin + exit; //no es variable absoluta + end; + //// Hay especificación de dirección absoluta //// + Result.isAbsol := true; //marca bandera + cIn.Next; + ProcComments; + if cIn.tokType = tnNumber then begin + if (cIn.tok[1]<>'$') and ((pos('e', cIn.tok)<>0) or (pos('E', cIn.tok)<>0)) then begin + //La notación exponencial, no es válida. + GenError(ER_INV_MEMADDR); + exit; + end; + n := pos('.', cIn.tok); //no debe fallar + if n=0 then begin + //Número entero sin parte decimal + Result.absAddr := ReadAddres(cIn.tok); + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + //Puede que siga la parte de bit + if cIn.tok = '.' then begin + cIn.Next; + IsBit := true; //Tiene parte de bit + Result.absBit := ReadAddresBit(cIn.tok); //Parte decimal + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + end else begin + IsBit := false; //No tiene parte de bit + end; + end else begin + //Puede ser el formato ., en un solo token, que es válido. + IsBit := true; //Se deduce que tiene punto decimal + //Ya sabemos que tiene que ser decimal, con punto + Result.absAddr := ReadAddres(copy(cIn.tok, 1, n-1)); + //Puede haber error + Result.absBit := ReadAddresBit(copy(cIn.tok, n+1, 100)); //Parte decimal + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + end; + end else if cIn.tokType = tnIdentif then begin + //Puede ser variable + GetOperandIdent(Op); // + if HayError then exit; + if Op.Sto <> stVariab then begin + GenError(ER_EXP_VAR_IDE); + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + exit; + end; + //Mapeado a variable. Notar que puede ser una variable temporal, si se usa: .0 + xvar := Op.rVar; + if Op.rVarBase=nil then begin + Result.absVar := Op.rVar; //Guarda referencia + end else begin + {Es un caso como ".0", conviene devolver la referencia a , + en lugar de a la variable ".0", considerando que: + * GetOperandIdent() usa , para registrar la llamada. + * Esta referencia se usará luego para ver variables no usadas en + TCompiler.CompileLinkProgram().} + Result.absVar := Op.rVarBase; //Guarda referencia + end; + //Ya tiene la variable en "xvar". + if xvar.typ.IsBitSize then begin //boolean o bit + IsBit := true; //Es una dirección de bit + Result.absAddr := xvar.addr; //debe ser absoluta + Result.absBit := xvar.adrBit.bit; + end else begin + //Es cualquier otra variable, que no sea bit. Se intentará + IsBit := false; //Es una dirección normal (byte) + Result.absAddr := xvar.addr; //debe ser absoluta + end; + if Result.absAddr = ADRR_ERROR then begin + //No se puede obtener la dirección. + GenError('Cannot locate variable at: %s', [xvar.name]); +// GenError('Internal Error: TxpEleVar.AbsAddr.'); + exit; + end; + end else begin //error + GenError(ER_NUM_ADD_EXP); + cIn.Next; //pasa siempre + exit; + end; +end; +procedure TCompiler.array_length(const OpPtr: pointer); +//Devuelve la cantidad de elementos de un arreglo +var + Op: ^TOperand; + xvar: TxpEleVar; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt := xvar.typ.arrSize; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompiler.array_high(const OpPtr: pointer); +//Devuelve el índice máximo de un arreglo +var + Op: ^TOperand; + xvar: TxpEleVar; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt {%H-}:= xvar.typ.arrSize-1; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompiler.array_low(const OpPtr: pointer); +//Devuelve el índice mínimo de un arreglo +var + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + //Se devuelve una constante, byte + res.SetAsConst(typByte); + res.valInt := 0; //por ahora siempre inicia en 0 + end; + else + GenError('Syntax error.'); + end; +end; +procedure TCompiler.ArrayDeclaration(out itemTyp: TxpEleType; out nEle: integer); +{Compila una declaración de arreglo.} +var + varType: String; +begin + cIn.Next; //lo toma + cIn.SkipWhites; + if not CaptureTok('[') then exit; + cIn.SkipWhites; + if cIn.tokType = tnNumber then begin + //Intenta obtener valor + if not TryStrToInt(cIn.tok, nEle) then begin + //Podría fallar si es un número muy grande o exponencial + GenError(ER_ERR_IN_NUMB); + exit; + end; + cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." + //Verifica si hay memoria para este arreglo + + +// end else if cIn.tokType = tnIdentif then begin +// //Puede ser variable +// GetOperandIdent(Op); +// if HayError then exit; +// if Op.catOp <> stVariab then begin +// GenError(ER_EXP_VAR_IDE); +// cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." +// exit; +// end; +// //Es variable. Notar que puede ser una variable temporal, si se usa: .0 +// xvar := Op.rVar; +// //Ya tiene la variable en "xvar". +// if xvar.typ.IsSizeBit then begin //boolean o bit +// IsBit := true; //Es una dirección de bit +// Result.absAddr := xvar.AbsAddr; //debe ser absoluta +// Result.absBit := xvar.adrBit.bit; +// end else begin +// IsBit := false; //Es una dirección normal (byte) +// Result.absAddr := xvar.AbsAddr; //debe ser absoluta +// end; +// if Result.absAddr = ADRR_ERROR then begin +// //No se implemento el tipo. No debería pasar. +// GenError('Internal Error: TxpEleVar.AbsAddr.'); +// exit; +// end; + end else begin //error + GenError(ER_INV_ARR_SIZ); + cIn.Next; //pasa siempre + exit; + end; + if not CaptureTok(']') then exit; + //Ya se tiene el tamaño del arreglo + cIn.SkipWhites; + if not CaptureStr('of') then exit; + cIn.SkipWhites; + if (cIn.tokType <> tnType) then begin + GenError(ER_IDE_TYP_EXP); + exit; + end; + varType := cIn.tok; //lee tipo + cIn.Next; + cIn.SkipWhites; + //Valida el tipo + itemTyp := FindSysEleType(varType); + if itemTyp = nil then begin + GenError(ER_UNDEF_TYPE_, [varType]); + exit; + end; + if (nEle<0) or (nEle>$FF) then begin + //Límite físico + GenError(ER_ARR_SIZ_BIG); + exit; + end; + //Ya se tiene el tipo + //¿Y si es bit? +// totSize := nEle * itemTyp.size; //tamaño en bytes + +end; +procedure TCompiler.CompileTypeDeclar(IsInterface: boolean; typName: string = ''); +{Compila la sección de declaración de un tipo, y genera un elemento TxpEleType, en el +árbol de sintaxis. +Si se especifica typName, se obvia la extracción de la parte " nombreTipo = ", y se +toma el nombre indicado.} +var + etyp, systyp, itemTyp, reftyp: TxpEleType; + srcpos: TSrcPos; + nEle: integer; +begin + ProcComments; + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador + srcpos := cIn.ReadSrcPos; + typName := cIn.tok; + cIn.Next; + ProcComments; + if not CaptureTok('=') then exit; + ProcComments; + //Analiza el tipo declarado + if (cIn.tokType = tnType) then begin + //Caso normal. Es un tipo del sistema + systyp := FindSysEleType(cIn.tok); //Busca elemento + if systyp = nil then begin + //Esto no debería pasar, porque el lexer indica que es un tipo del sistema. + GenError(ER_NOT_IMPLEM_, [typName]); + exit; + end; + //Encontró al tipo del sistema + cIn.Next; //lo toma + etyp := AddType(typName, srcpos); + if HayError then exit; //Sale para ver otros errores + {Crea la copia del tipo del sistema, que básicamente es el mismo tipo, solo que + con otro nombre y que además, ahora, está en el árbol de sintaxis, por lo tanto + tiene otras reglas de alcance.} + etyp.copyOf := systyp; //Indica que es una copia + etyp.catType := systyp.catType; //tctAtomic. No debería ser necesario + etyp.InInterface := IsInterface; //No debería ser necesario + end else if cIn.tokL = 'array' then begin + //Es un arreglo + ArrayDeclaration(itemTyp, nEle); + if HayError then exit; //Sale para ver otros errores + //Es una declaración de arreglo + etyp := AddType(typName, srcpos); + if HayError then exit; //Sale para ver otros errores + etyp.catType := tctArray; //Tipo arreglo + etyp.arrSize := nEle; //Número de ítems + etyp.refType := itemTyp; //Tipo de dato + etyp.InInterface := IsInterface; //No debería ser necesario + //Crea campos comunes del arreglo + etyp.CreateField('length', @array_length); + etyp.CreateField('high', @array_high); + etyp.CreateField('low', @array_low); + //Campos que dependen del tipo + if itemTyp.OnGetItem=nil then begin + GenError('Cannot declare array of type: %s', [itemTyp.name]); + end; + etyp.CreateField('item', itemTyp.OnGetItem); + if itemTyp.OnClearItems <> nil then begin + etyp.CreateField('clear' , itemTyp.OnClearItems); + end; + end else if cIn.tok = '^' then begin + //Es un puntero + cIn.Next; + //Por ahora solo permitiremos identificadores de tipos + reftyp := FindSysEleType(cIn.tok); //Busca elemento + if reftyp = nil then begin + //No es un tipo del sistema, pero puede ser un tipo prdefinido + reftyp := TreeElems.FindType(cIn.tok); //Busca elemento + if reftyp = nil then begin + GenError('Expected a type identifier.', [typName]); + exit; + end; + end; + //Encontró un tipo + cIn.Next; //lo toma + etyp := AddType(typName, srcpos); //Crae el elemento tipo + if HayError then exit; //Sale para ver otros errores + etyp.catType := tctPointer; //Tipo puntero + etyp.refType := reftyp; //El tipo a donde apunta + etyp.InInterface := IsInterface; //No debería ser necesario + //Fija operaciones para la aritmética del puntero + DefPointerArithmetic(etyp); + etyp.CreateUnaryPostOperator('^',6,'deref', @ROU_derefPointer); //dereferencia + + end else begin + GenError(ER_IDE_TYP_EXP); + exit; + end; + + if not CaptureDelExpres then exit; + ProcComments; + //puede salir con error +end; +function TCompiler.GetTypeVarDeclar: TxpEleType; +{Extrae la sección de tipo de la declaración de una variable, y devuelve la referencia +al elemento TxpEleType correspondiente. +Si encuentra algún problema, genera error, y devuelve NIL. +Todas las variables y constantes tienen un tipo asociado. + +* En los casos de tipos simples como: bit, byte o word, se devuelve la referencia, al +tipo del sistema, almacenado en "listTypSys": +VAR + a, b: byte; + c: bit; + +* En los casos de tipos definidos en la declaración, se crea una nueva definición de tipo +y se agrega al árbol de sintaxis: +VAR + a, b: array[0..5] of char; //Se crea nuevo tipo: "array[0..5] of char" + +* Para los casos de tipos con nombre, simplemente se devuelve la referencia al tipo que +debe estar creado en el árbol de sintaxis: +VAR + a, b: MiTipo; +} +var + systyp: TxpEleType; + typName: String; + typ: TxpEleType; + ele: TxpElement; +begin + Result := nil; + ProcComments; + typName := cIn.tok; //Nombre de tipo + //Primero verifica si es un tipo del sistema + systyp := FindSysEleType(typName); //tipos básicos + if systyp<>nil then begin + //Caso normal. Es un tipo del sistema + cIn.Next; //lo toma + ProcComments; + exit(systyp); //devuelve la referencia + end else if cIn.tokType = tnIdentif then begin + //Puede ser identificador de tipo + {Se pensó usar GetOperandIdent(), para identificar al tipo, pero no está preparado + para procesar tipos y no se espera tanta flexibilidad. Así que se hace "a mano".} + ele := TreeElems.FindFirst(cIn.tok); + if ele = nil then begin + //No identifica a este elemento + GenError('Unknown identifier: %s', [cIn.tok]); + exit(nil); + end; + if ele.idClass = eltType then begin + typ := TxpEleType(ele); + AddCallerTo(typ); //lleva la cuenta + cIn.Next; //lo toma + ProcComments; + exit(typ); + end else begin + GenError(ER_IDE_TYP_EXP); + exit(nil); + end; +// end else if cIn.tokL = 'array' then begin +// //Es un arreglo +// ArrayDeclaration(itemTyp, nEle); +// {%H-}exit; //puede salir con error + end else begin + GenError(ER_IDE_TYP_EXP); + exit(nil); + end; +end; +procedure TCompiler.CompileVarDeclar(IsInterface: boolean = false); +{Compila la declaración de variables en el nodo actual. +"IsInterface", indica el valor que se pondrá al as variables, en la bandera "IsInterface" } +var + varNames: array of string; //nombre de variables + IsBit: Boolean; + srcPosArray: TSrcPosArray; + i: Integer; + xvar: TxpEleVar; + adicVarDec: TAdicVarDec; + typEleDec: TxpEleType; +begin + //Procesa variables a,b,c : int; + getListOfIdent(varNames, srcPosArray); + if HayError then begin //precisa el error + GenError(ER_EXP_VAR_IDE); + exit; + end; + //usualmente debería seguir ":" + if cIn.tok = ':' then begin + //Debe seguir, el tipo de la variable + cIn.Next; //lo toma + ProcComments; + //Lee el tipo de la variable + typEleDec := GetTypeVarDeclar; + //Lee información aicional de la declaración (ABSOLUTE) + adicVarDec := GetAdicVarDeclar(IsBit); + if HayError then exit; + if adicVarDec.isAbsol then begin //valida tamaño + //Es una declaración ABSOLUTE + if typEleDec.IsBitSize and (not Isbit) then begin + //Se esperaba un bit, en el ABSOLUTE. + GenError(ER_INV_MEMADDR); + end; + if not typEleDec.IsBitSize and IsBit then begin + {En realidad se podría aceptar posicionar un byte en una variable bit, + posicionándolo en su byte contenedor.} + GenError(ER_INV_MEMADDR); + end; + end; + if HayError then exit; + {Elimina la llamada agregada a la variable, porque se van a agregar llamadas más + específicas desde la(s) varaible(s) declaradas.} + if adicVarDec.absVar<>nil then begin + adicVarDec.absVar.RemoveLastCaller; + end; + //Reserva espacio para las variables + for i := 0 to high(varNames) do begin + xvar := AddVariable(varNames[i], typEleDec, srcPosArray[i]); + if HayError then break; //Sale para ver otros errores + xvar.adicPar := adicVarDec; //Actualiza propiedades adicionales + xvar.InInterface := IsInterface; //Actualiza bandera + {Técnicamente, no sería necesario, asignar RAM a la variable aquí (y así se + optimizaría), porque este método, solo se ejecuta en la primera pasada, y no + es vital tener las referencias a memoria, en esta pasada. + Pero se incluye la ásignación de RAM, por: + * Porque el acceso con directivas, a variables del sistema como "CurrBank", + se hace en la primera pasada, y es necesario que estas variables sean válidas. + * Para tener en la primera pasada, un código más similar al código final.} + CreateVarInRAM(xvar); //Crea la variable + //Agrega la llamada, específica, desde esta variable. + if adicVarDec.absVar<>nil then begin + AddCallerTo(adicVarDec.absVar, xvar); + end + end; + end else begin + GenError(ER_SEM_COM_EXP); + exit; + end; + if not CaptureDelExpres then exit; + ProcComments; + //puede salir con error +end; +procedure TCompiler.CompileProcHeader(out fun: TxpEleFun; ValidateDup: boolean = true); +{Hace el procesamiento del encabezado de la declaración de una función/procedimiento. +Devuelve la referencia al objeto TxpEleFun creado, en "fun". +Conviene separar el procesamiento del enzabezado, para poder usar esta rutina, también, +en el procesamiento de unidades.} +var + srcPos: TSrcPos; + procName: String; + typ : TxpEleType; +begin + //Toma información de ubicación, al inicio del procedimiento + cIn.SkipWhites; + srcPos := cIn.ReadSrcPos; + //Ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador + procName := cIn.tok; + cIn.Next; //lo toma + {Ya tiene los datos mínimos para crear la función. } + fun := CreateFunction(procName, typNull, @callParam, @callFunct); + fun.srcDec := srcPos; //Toma ubicación en el código + TreeElems.AddElementAndOpen(fun); //Se abre un nuevo espacio de nombres + + CaptureDecParams(fun); + if HayError then exit; + //Recién aquí puede verificar duplicidad, porque ya se leyeron los parámetros + if ValidateDup then begin //Se pide validar la posible duplicidad de la función + if not ValidateFunction then exit; + end; + //Verifica si es función + cIn.SkipWhites; + if cIn.tok = ':' then begin + cIn.Next; + cIn.SkipWhites; + //Es función + typ := getParamType; //lee tipo + if HayError then exit; + +// parType := cIn.tok; //lee tipo de parámetro +// cIn.Next; +// //Valida el tipo +// typ := FindSysEleType(parType); +// if typ = nil then begin +// GenError(ER_UNDEF_TYPE_, [parType]); +// exit; +// end; + //Fija el tipo de la función + fun.typ := typ; + end; + if not CaptureTok(';') then exit; + //Verifica si es INTERRUPT + cIn.SkipWhites; + if cIn.tokL = 'interrupt' then begin + cIn.Next; + fun.IsInterrupt := true; + if not CaptureTok(';') then exit; + end; + ProcComments; //Quita espacios. Puede salir con error +end; +procedure TCompiler.CompileProcDeclar(IsImplementation: boolean); +{Compila la declaración de procedimientos. Tanto procedimientos como funciones + se manejan internamente como funciones. + IsImplementation, se usa para cuando se está compilando en la sección IMPLEMENTATION.} +var + fun, funcX: TxpEleFun; + bod: TxpEleBody; + Parent: TxpElement; + i: Integer; + Found: Boolean; +begin + {Este método, solo se ejecutará en la primera pasada, en donde todos los procedimientos + se codifican al inicio de la memoria FLASH, y las variables y registros se ubican al + inicio de la memeoria RAM, ya que lo que importa es simplemente recabar información + del procedimiento, y no tanto codificarlo. } + ResetFlashAndRAM; //Limpia RAM y FLASH, y fija CurrBank + if IsImplementation then begin + //Se compila para implementación. + {Este proceso es más complejo. La idea es compilar el enzabezado de cualquier función, + y luego comparar para ver si corresponde a una implementación o no. Si es + implemenatción, se elimina el nodo creado y se trabaja con el de la declaración.} + CompileProcHeader(fun, false); //No verifica la duplicidad por ahora + if HayError then exit; + //Verifica si es implementación de una función en la INTERFACE o no. + Parent := TreeElems.curNode.Parent; //Para comparar + {Se supone que esta exploración solo se hará en la primera pasada, así que no hay + problema, en hacer una exploración común.} + //debugln('Buscando declaración de %s en nodo %s desde 0 hasta %d', [fun.name, Parent.name, Parent.elements.Count-2]); + Found := false; + for i:=0 to Parent.elements.Count-2 do begin //No se considera a el mismo + if not (Parent.elements[i].idClass = eltFunc) then continue; + funcX := TxpEleFun(Parent.elements[i]); + if (UpCase(funcX.name) = Upcase(fun.name)) and + (fun.SameParams(funcX)) then begin + Found := true; + break; + end; + end; + if Found then begin + //Es una implementación. No vale la pena tener otro nodo. + TreeElems.CloseElement; //Cierra Nodo de la función + Parent.elements.Remove(fun); //elimina función + fun := {%H-}funcX; //apunta a la nueva función + TreeElems.OpenElement(fun); //Abre el nodo anterior + fun.Implemented := true; //marca como implementada + end else begin + //Debe ser una función privada + end; + end else begin + //Es una compilación normal + CompileProcHeader(fun); //Procesa el encabezado + if HayError then exit; + end; + //Empiezan las declaraciones VAR, CONST, PROCEDURE, TYPE + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileVarDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; +// end else if cIn.tokL = 'procedure' then begin +// cIn.Next; //lo toma +// CompileProcDeclar; + end else begin + GenError('Expected VAR, CONST or BEGIN.'); + exit; + end; + end; + if cIn.tokL <> 'begin' then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + //Ahora empieza el cuerpo de la función o las declaraciones + fun.adrr := pic.iFlash; //toma dirección de inicio del código. Es solo referencial. + fun.posCtx := cIn.PosAct; //Guarda posición para la segunda compilación + bod := CreateBody; //crea elemento del cuerpo de la función + bod.srcDec := cIn.ReadSrcPos; + TreeElems.AddElementAndOpen(bod); //Abre nodo Body + CompileProcBody(fun); + TreeElems.CloseElement; //Cierra Nodo Body + TreeElems.CloseElement; //cierra espacio de nombres de la función + bod.srcEnd := cIn.ReadSrcPos; //Fin de cuerpo +// fun.adrReturn := pic.iFlash-1; //Guarda dirección del RETURN + if not CaptureTok(';') then exit; + ProcComments; //Quita espacios. Puede salir con error +end; +procedure TCompiler.CompileInstruction; +{Compila una única instrucción o un bloque BEGIN ... END. Puede generar Error. + Una instrucción se define como: + 1. Un bloque BEGIN ... END + 2. Una estrutura + 3. Una expresión + La instrucción, no incluye al delimitador. + } +var + curCodCon: TxpEleCodeCont; +begin + if TreeElems.curNode.idClass <> eltBody then begin + //No debería pasar, porque las instrucciones solo pueden estar en eltBody + GenError('Syntax error.'); + exit; + end; + curCodCon := TreeElems.CurCodeContainer; + ProcComments; + if cIn.tokL='begin' then begin + //es bloque + cIn.Next; //toma "begin" + CompileCurBlock; //llamada recursiva + if HayError then exit; + if not CaptureStr('end') then exit; + ProcComments; + //puede salir con error + end else begin + //es una instrucción + if cIn.tokType = tnStruct then begin + if cIn.tokl = 'if' then begin + curCodCon.OpenBlock(sbiIF); + cIn.Next; //pasa "if" + CompileIF; + curCodCon.CloseBlock; + end else if cIn.tokl = 'while' then begin + curCodCon.OpenBlock(sbiWHILE); + cIn.Next; //pasa "while" + CompileWHILE; + curCodCon.CloseBlock; + end else if cIn.tokl = 'repeat' then begin + curCodCon.OpenBlock(sbiREPEAT); + cIn.Next; //pasa "until" + CompileREPEAT; + curCodCon.CloseBlock; + end else if cIn.tokl = 'for' then begin + curCodCon.OpenBlock(sbiFOR); + cIn.Next; //pasa "until" + CompileFOR; + curCodCon.CloseBlock; + end else begin + GenError(ER_UNKN_STRUCT); + exit; + end; + end else begin + //debe ser es una expresión + GetExpressionE(0); + end; + if HayError then exit; + if pic.MsjError<>'' then begin + //El pic también puede dar error + GenError(pic.MsjError); + end; + end; +end; +procedure TCompiler.CompileInstructionDummy; +{Compila una instrucción pero sin generar código. } +var + p: Integer; + InvertedFromC0: Boolean; + CurrBank0: Byte; +begin + p := pic.iFlash; + CurrBank0 := CurrBank; //Guarda estado + InvertedFromC0 := InvertedFromC; //Guarda estado + + CompileInstruction; //Compila solo para mantener la sintaxis + + InvertedFromC := InvertedFromC0; //Restaura + CurrBank := CurrBank0; //Restaura + pic.iFlash := p; //Elimina lo compilado + //puede salir con error + { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } +end; +procedure TCompiler.CompileCurBlock; +{Compila el bloque de código actual hasta encontrar un delimitador de bloque, o fin +de archivo. } +begin + ProcComments; + while not cIn.Eof and (cIn.tokType<>tnBlkDelim) do begin + //se espera una expresión o estructura + CompileInstruction; + if HayError then exit; //aborta + //se espera delimitador + if cIn.Eof then break; //sale por fin de archivo + //busca delimitador + ProcComments; + //Puede terminar con un delimitador de bloque + if cIn.tokType=tnBlkDelim then break; + //Pero lo común es que haya un delimitador de expresión + if not CaptureTok(';') then exit; + ProcComments; //Puede haber Directivas o ASM también + end; +end ; +procedure TCompiler.CompileCurBlockDummy; +{Compila un bloque pero sin geenrar código.} +var + p: Integer; + InvertedFromC0: Boolean; + CurrBank0: Byte; +begin + p := pic.iFlash; + CurrBank0 := CurrBank; //Guarda estado + InvertedFromC0 := InvertedFromC; //Guarda estado + + CompileCurBlock; //Compila solo para mantener la sintaxis + + InvertedFromC := InvertedFromC0; //Restaura + CurrBank := CurrBank0; //Restaura + pic.iFlash := p; //Elimina lo compilado + //puede salir con error + { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } +end; +procedure TCompiler.CompileUnit(uni: TxpElement); +{Realiza la compilación de una unidad} +var + fun: TxpEleFun; + elem: TxpElement; +begin +//debugln(' Ini Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); + ClearError; + pic.MsjError := ''; + ProcComments; + //Busca UNIT + if cIn.tokL = 'unit' then begin + cIn.Next; //pasa al nombre + ProcComments; + if cIn.Eof then begin + GenError('Name of unit expected.'); + exit; + end; + if UpCase(cIn.tok)<>UpCase(uni.name) then begin + GenError('Name of unit doesn''t match file name.'); + exit; + end; + cIn.Next; //Toma el nombre y pasa al siguiente + if not CaptureDelExpres then exit; + end else begin + GenError('Expected: UNIT'); + exit; + end; + ProcComments; + if cIn.tokL <> 'interface' then begin + GenError('Expected: INTERFACE'); + exit; + end; + cIn.Next; //toma + ProcComments; + if cIn.Eof then begin + GenError('Expected "uses", "var", "type", "const" or "implementation".'); + exit; + end; + ProcComments; + //Busca USES + CompileUsesDeclaration; + if cIn.Eof then begin + GenError('Expected "var", "type" or "const".'); + exit; + end; + ProcComments; +// Cod_StartProgram; //Se pone antes de codificar procedimientos y funciones + if HayError then exit; + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileVarDeclar(true); //marca como "IsInterface" + if HayError then exit;; + end; + end else if cIn.tokL = 'type' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileTypeDeclar(true); + if HayError then exit; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'implementation') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcHeader(fun); //Se ingresa al árbol de sintaxis + if HayError then exit; + fun.InInterface := true; //marca ubicación + TreeElems.CloseElement; //CompileProcHeader, deja abierto el elemento + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + ProcComments; + if cIn.tokL <> 'implementation' then begin + GenError('Expected: IMPLEMENTATION'); + exit; + end; + cIn.Next; //toma + ///////////////// IMPLEMENTATION ///////////////////// + ProcComments; + //Explora las declaraciones e implementaciones + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'end') do begin + CompileVarDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'end') do begin + CompileGlobalConstDeclar; + if HayError then exit;; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcDeclar(true); //Compila en IMPLEMENTATION + if HayError then exit; + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + //Verifica si todas las funciones de INTERFACE, se implementaron + for elem in TreeElems.curNode.elements do if elem.idClass = eltFunc then begin + fun := TxpEleFun(elem); + if fun.InInterface and not fun.Implemented then begin + GenErrorPos('Function %s not implemented.', [fun.name], fun.srcDec); + exit; + end; + end; + CompileLastEnd; + if HayError then exit; +// //procesa cuerpo +// ResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio +// también, la flash y memoria, después de algún psoible procedimiento.} +// if cIn.tokL = 'begin' then begin +// bod := CreateBody; +// bod.srcDec := cIn.ReadSrcPos; +// cIn.Next; //coge "begin" +// //Guardamos la ubicación física, real, en el archivo, después del BEGIN +// bod.posCtx := cIn.PosAct; +// //codifica el contenido +// CompileCurBlock; //compila el cuerpo +// if HayError then exit; + +// _SLEEP(); //agrega instrucción final +// end else begin +// GenError('Expected "begin", "var", "type" or "const".'); +// exit; +// end; +// Cod_EndProgram; +//debugln(' Fin Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); +end; +procedure TCompiler.CompileUsesDeclaration; +{Compila la unidad indicada.} +var + uni: TxpEleUnit; + uPath: String; + uName: String; + p: TPosCont; +begin + if cIn.tokL = 'uses' then begin + cIn.Next; //pasa al nombre + //Toma una a una las unidades + repeat + ProcComments; + //ahora debe haber un identificador + if cIn.tokType <> tnIdentif then begin + GenError(ER_IDEN_EXPECT); + exit; + end; + //hay un identificador de unidad + uName := cIn.tok; + uni := CreateUnit(uName); + //Verifica si existe ya el nombre de la unidad + if uni.DuplicateIn(TreeElems.curNode.elements) then begin + GenError('Identifier duplicated: %s.', [uName]); + uni.Destroy; + exit; + end; + uni.srcDec := cIn.ReadSrcPos; //guarda posición de declaración + uName := uName + '.pas'; //nombre de archivo +{----}TreeElems.AddElementAndOpen(uni); + //Ubica al archivo de la unidad + p := cIn.PosAct; //Se debe guardar la posición antes de abrir otro contexto + //Primero busca en la misma ubicación del archivo fuente + uPath := ExtractFileDir(mainFile) + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encontró, busca en la carpeta de dispositivos + uPath := patDevices + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encontró, busca en la carpeta de librerías + uPath := patUnits + DirectorySeparator + uName; + if OpenContextFrom(uPath) then begin + uni.srcFile := uPath; //Gaurda el archivo fuente + end else begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [uName]); + exit; + end; + end; + end; + //Aquí ya se puede realizar otra exploración, como si fuera el archivo principal + CompileUnit(uni); + cIn.PosAct := p; + if HayError then exit; //El error debe haber guardado la ubicaicón del error +{----}TreeElems.CloseElement; //cierra espacio de nombres de la función + cIn.Next; //toma nombre + cIn.SkipWhites; + if cIn.tok <> ',' then break; //sale + cIn.Next; //toma la coma + until false; + if not CaptureDelExpres then exit; + end; +end; +procedure TCompiler.CompileProgram; +{Compila un programa en el contexto actual. Empieza a codificar el código a partir de +la posición actual de memoria en el PIC (iFlash).} +var + bod: TxpEleBody; +begin + ClearError; + pic.MsjError := ''; + ProcComments; + //Busca PROGRAM + if cIn.tokL = 'unit' then begin + //Se intenta compilar una unidad + GenError('Expected a program. No a unit.'); + exit; + end; + if cIn.tokL = 'program' then begin + cIn.Next; //pasa al nombre + ProcComments; + if cIn.Eof then begin + GenError(ER_PROG_NAM_EX); + exit; + end; + cIn.Next; //Toma el nombre y pasa al siguiente + if not CaptureDelExpres then exit; + end; + if cIn.Eof then begin + GenError('Expected "program", "begin", "var", "type" or "const".'); + exit; + end; + ProcComments; + //Busca USES + if HayError then exit; //CompileUsesDeclaration, va a limpiar "HayError" + CompileUsesDeclaration; + if cIn.Eof then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + ProcComments; + Cod_StartProgram; //Se pone antes de codificar procedimientos y funciones + if HayError then exit; + //Empiezan las declaraciones + while StartOfSection do begin + if cIn.tokL = 'var' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileVarDeclar; + if HayError then exit; + end; + end else if cIn.tokL = 'type' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileTypeDeclar(false); + if HayError then exit; + end; + end else if cIn.tokL = 'const' then begin + cIn.Next; //lo toma + while not StartOfSection and (cIn.tokL <>'begin') do begin + CompileGlobalConstDeclar; + if HayError then exit; + end; + end else if cIn.tokL = 'procedure' then begin + cIn.Next; //lo toma + CompileProcDeclar(false); + if HayError then exit; + end else begin + GenError(ER_NOT_IMPLEM_, [cIn.tok]); + exit; + end; + end; + //procesa cuerpo + ResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio + también, la flash y memoria, después de algún posible procedimiento.} + if cIn.tokL <> 'begin' then begin + GenError('Expected "begin", "var", "type" or "const".'); + exit; + end; + bod := CreateBody; + bod.srcDec := cIn.ReadSrcPos; + TreeElems.AddElementAndOpen(bod); //Abre nodo Body + cIn.Next; //coge "begin" + //Guardamos popsisicón en contexto para la segunda compilación + bod.posCtx := cIn.PosAct; + //codifica el contenido + CompileCurBlock; //compila el cuerpo + TreeElems.CloseElement; //No debería ser tan necesario. + bod.srcEnd := cIn.ReadSrcPos; + if HayError then exit; + CompileLastEnd; //Compila el "END." final + if HayError then exit; + _SLEEP(); //agrega instrucción final + Cod_EndProgram; +end; +procedure TCompiler.CompileLinkProgram; +{Genera el código compilado final. Usa la información del árbol de sintaxis, para +ubicar a los diversos elementos que deben compilarse. +Se debe llamar después de compilar con CompileProgram. +Esto es lo más cercano a un enlazador, que hay en PicPas.} + function RemoveUnusedFuncReferences: integer; + {Explora las funciones, para quitarle las referencias de funciones no usadas. + Devuelve la cantidad de funciones no usadas. + Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllFuncs". } + var + fun, fun2: TxpEleFun; + begin + Result := 0; + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + inc(Result); //Lleva la cuenta + //Si no se usa la función, tampoco sus elementos locales + fun.SetElementsUnused; + //También se quita las llamadas que hace a otras funciones + for fun2 in TreeElems.AllFuncs do begin + fun2.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando %d llamadas desde: %s', [n, fun.name]); + end; + //Incluyendo a funciones del sistema + for fun2 in listFunSys do begin + fun2.RemoveCallsFrom(fun.BodyNode); + end; + end; + end; + end; + function RemoveUnusedVarReferences: integer; + {Explora las variables de todo el programa, de modo que a cada una: + * Le quita las referencias hechas por variables no usadas. + Devuelve la cantidad de variables no usadas. + Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllVars" y + "TreeElems.AllFuncs", e inclusive "TreeElems.AllVars" debe estar ya filtrada + con las funciones no usadas. } + var + xvar, xvar2: TxpEleVar; + fun: TxpEleFun; + begin + Result := 0; + //Quita las referencias de las varaibles no usadas + for xvar in TreeElems.AllVars do begin + if xvar.nCalled = 0 then begin + //Esta es una variable no usada + inc(Result); //Lleva la cuenta + //Quita las llamadas que hace a otras funciones + for xvar2 in TreeElems.AllVars do begin + xvar2.RemoveCallsFrom(xvar); +// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); + end; + end; + end; + //Ahora quita las referencias de funciones no usadas + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then begin + //Esta es una función no usada + inc(Result); //Lleva la cuenta + for xvar2 in TreeElems.AllVars do begin + xvar2.RemoveCallsFrom(fun.BodyNode); +// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); + end; + end; + end; + end; + procedure SetInitialBank(fun: TxpEleFun); + {Define el banco de trabajo para compilar correctamente} + var + cal : TxpEleCaller; + begin + if fun.IsInterrupt then begin + //Para ISR, no se genera código de manejo de bancos + fun.iniBnk := 0; //asume siempre 0 + CurrBank := fun.iniBnk; //configura al compilador + exit; + end; + if SetProIniBnk then begin + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + end else begin + //Se debe deducir el banco inicial de la función + //Explora los bancos desde donde se llama + if fun.lstCallers.Count = 1 then begin + //Solo es llamado una vez + fun.iniBnk := fun.lstCallers[0].curBnk; + CurrBank := fun.iniBnk; //configura al compilador + end else begin + fun.iniBnk := fun.lstCallers[0].curBnk; //banco de la primera llamada + //Hay varias llamadas + for cal in fun.lstCallers do begin + if fun.iniBnk <> cal.curBnk then begin + //Hay llamadas desde varios bancos. + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + exit; + end; + end; + //Todas las llamadas son del mismo banco + CurrBank := fun.iniBnk; //configura al compilador + end; + end; + end; + procedure UpdateFunLstCalled; + {Actualiza la lista lstCalled de las funciones, para saber, a qué fúnciones llama + cada función.} + var + fun : TxpEleFun; + itCall : TxpEleCaller; + whoCalls: TxpEleBody; + begin + for fun in TreeElems.AllFuncs do begin + if fun.nCalled = 0 then continue; //No usada + //Procesa las llamadas hechas desde otras funciones, para llenar + //su lista "lstCalled", y así saber a quienes llama + for itCall in fun.lstCallers do begin + //Agrega la referencia de la llamada a la función + if itCall.caller.idClass <> eltBody then begin + //Según diseño, itCall.caller debe ser TxpEleBody + GenError('Design error.'); + exit; + end; + whoCalls := TxpEleBody(itCall.caller); + //Se agregan todas las llamadas (así sean al mismo porcedimiento) pero luego + //AddCalled(), los filtra. + whoCalls.Parent.AddCalled(fun); //Agrega al procediminto + end; + end; + {Actualizar la lista fun.lstCalledAll con la totalidad de llamadas a todas + las funciones, sean de forma directa o indirectamente.} + for fun in TreeElems.AllFuncs do begin + fun.UpdateCalledAll; + end; + //Actualiza el programa principal + TreeElems.main.UpdateCalledAll; + if TreeElems.main.maxNesting>8 then begin + GenError('Not enough stack.'); + end; + end; + procedure AssignRAMtoVar(xvar: TxpEleVar; shared: boolean = false); + var + posAct : TPosCont; + adicVarDec: TAdicVarDec; + IsBit : boolean; + begin +//debugln(' Asignando espacio a %s', [xvar.name]); + if xvar.adicPar.isAbsol then begin +//debugln('Abs: xvar=%s at %d', [xvar.name, xvar.adicPar.absAddr]); + {Tiene declaración absoluta. Mejor compilamos de nuevo la declaración, porque + puede haber referencia a variables que han cambiado de ubicación, por + optimización. + Se podría hacer una verificación, para saber si la referencia es a direcciones + absolutas, en lugar de a variables (o a varaibles temporales), y así evitar + tener que compilar de nuevo, la declaración.} + posAct := cIn.PosAct; //guarda posición actual + cIn.PosAct := xVar.adicPar.srcDec; //Posiciona en la declaración adicional + TreeElems.curNode := xvar.Parent; {Posiciona el árbol, tal cual estaría en la + primera pasada, para una correcta resolución + de nombres} + adicVarDec := GetAdicVarDeclar(IsBit); + //No debería dar error, porque ya pasó la primera pasada + xvar.adicPar := adicVarDec; + cIn.PosAct := posAct; + end; + CreateVarInRAM(xVar, shared); //Crea la variable + xvar.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + //Puede salir error + end; +var + elem : TxpElement; + bod : TxpEleBody; + xvar : TxpEleVar; + fun : TxpEleFun; + iniMain, noUsed, noUsedPrev, xxx: integer; +begin + ExprLevel := 0; + pic.ClearMemFlash; + ResetFlashAndRAM; + ClearError; + pic.MsjError := ''; + //Verifica las constantes usadas. Solo en el nodo principal, para no sobrecargar mensajes. + for elem in TreeElems.main.elements do if elem.idClass = eltCons then begin + if elem.nCalled = 0 then begin + GenWarnPos(WA_UNUSED_CON_, [elem.name], elem.srcDec); + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + //Explora las funciones, para identifcar a las no usadas + TreeElems.RefreshAllFuncs; + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedFuncReferences; + until noUsed = noUsedPrev; + /////////////////////////////////////////////////////////////////////////////// + //Asigna memoria, primero a las variables locales (y parámetros) de las funciones + /////////////////////////////////////////////////////////////////////////////// + UpdateFunLstCalled; //Actualiza lista "lstCalled" de las funciones usadas + if HayError then exit; + //Explora primero a las funciones terminales + for fun in TreeElems.AllFuncs do if fun.nCalled > 0 then begin + if not fun.IsTerminal2 then continue; + //DebugLn('función terminal: %s con %d var.loc.', [fun.name, fun.nLocalVars]); + //Los parámetros y variables locales aparecen como elementos de la función + for elem in fun.elements do if elem.idClass = eltVar then begin + xvar := TxpEleVar(elem); + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar, true); + if HayError then exit; + end; + end; + if OptReuProVar then pic.SetSharedUnused; //limpia las posiciones usadas + end; + if OptReuProVar then pic.SetSharedUsed; //Ahora marca como usados, porque ya se creó la zona de bytes comaprtidos + //Explora solo a las funciones que no son terminales + for fun in TreeElems.AllFuncs do if fun.nCalled > 0 then begin + if fun.IsTerminal2 then continue; + //Los parámetros y variables locales aparecen como elementos de la función + for elem in fun.elements do if elem.idClass = eltVar then begin + xvar := TxpEleVar(elem); + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end; + end; + end; + /////////////////////////////////////////////////////////////////////////////// + TreeElems.RefreshAllVars; + noUsed := 0; + repeat //Explora en varios niveles + noUsedPrev := noUsed; //valor anterior + noUsed := RemoveUnusedVarReferences; + until noUsed = noUsedPrev; + //Reserva espacio para las variables adicionales usadas + for xvar in TreeElems.AllVars do begin + if xvar.Parent.idClass = eltFunc then continue; //Las variables de funciones ya se crearon + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end else begin + //Variable no usada + xvar.ResetAddress; + if xvar.Parent = TreeElems.main then begin + //Genera mensaje solo para variables del programa principal. + GenWarnPos(WA_UNUSED_VAR_, [xVar.name], xvar.srcDec); + end; + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + _GOTO_PEND(iniMain); //instrucción de salto inicial + //Codifica la función INTERRUPT, si existe + for fun in TreeElems.AllFuncs do begin + if fun.IsInterrupt then begin + //Compila la función en la dirección 0x04 + pic.iFlash := $04; + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + cIn.PosAct := fun.posCtx; //Posiciona escáner + PutLabel('__'+fun.name); + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + SetInitialBank(fun); //Configura manejo de bancos RAM + CompileProcBody(fun); + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + if HayError then exit; //Puede haber error + end; + end; + //Codifica las funciones del sistema usadas + for fun in listFunSys do begin + xxx := fun.nCalled; + if (xxx > 0) and (fun.compile<>nil) then begin + //Función usada y que tiene una subrutina ASM + fun.adrr := pic.iFlash; //actualiza la dirección final + PutLabel('__'+fun.name); + fun.compile(fun); //codifica + if HayError then exit; //Puede haber error + if pic.MsjError<>'' then begin //Error en el mismo PIC + GenError(pic.MsjError); + exit; + end; + end; + end; + //Codifica las subrutinas usadas + for fun in TreeElems.AllFuncs do begin + if fun.IsInterrupt then continue; + if fun.nCalled>0 then begin + //Compila la función en la dirección actual + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + cIn.PosAct := fun.posCtx; //Posiciona escáner + PutLabel('__'+fun.name); + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + SetInitialBank(fun); //Configura manejo de bancos RAM + CompileProcBody(fun); + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + if HayError then exit; //Puede haber error + end else begin + //Esta función no se usa. + GenWarnPos(WA_UNUSED_PRO_, [fun.name], fun.srcDec); + end; + end; + //Compila cuerpo del programa principal + pic.codGotoAt(iniMain, _PC); //termina de codificar el salto + bod := TreeElems.BodyNode; //lee Nodo del cuerpo principal + if bod = nil then begin + GenError('Body program not found.'); + exit; + end; + bod.adrr := pic.iFlash; //guarda la dirección de codificación +// bod.nCalled := 1; //actualiza + cIn.PosAct := bod.posCtx; //ubica escaner + PutLabel('__main_program__'); + TreeElems.OpenElement(bod); + CurrBank := 0; //Se limpia, porque pudo haber cambiado con la compilación de procedimientos + CompileCurBlock; + TreeElems.CloseElement; //cierra el cuerpo principal + PutLabel('__end_program__'); + {No es necesario hacer más validaciones, porque ya se hicieron en la primera pasada} + _SLEEP(); //agrega instrucción final +end; +function TCompiler.hexFilePath: string; +begin + Result := ExpandRelPathTo(mainFile, hexfile); //Convierte a ruta absoluta +end; +function TCompiler.mainFilePath: string; +begin + Result := mainFile; +end; +function TCompiler.IsUnit: boolean; +{Indica si el archivo del contexto actual, es una unidad. Debe llamarse} +begin + ProcCommentsNoExec; //Solo es validación, así que no debe ejecutar nada + //Busca UNIT + if cIn.tokL = 'unit' then begin + cIn.curCon.SetStartPos; //retorna al inicio + exit(true); + end; + cIn.curCon.SetStartPos; //retorna al inicio + exit(false); +end; +procedure TCompiler.Compile(NombArc: string; Link: boolean = true); +//Compila el contenido de un archivo. +var + p: SizeInt; +begin + mode := modPicPas; //Por defecto en sintaxis nueva + mainFile := NombArc; + hexfile := ChangeFileExt(NombArc, '.hex'); //Obtiene nombre + hexfile := hexFilePath; //Expande nombre si es necesario + //se pone en un "try" para capturar errores y para tener un punto salida de salida + //único + if ejecProg then begin + GenError(ER_COMPIL_PROC); + exit; //sale directamente + end; + try + ejecProg := true; //marca bandera + ClearError; + //Genera instrucciones de inicio + cIn.ClearAll; //elimina todos los Contextos de entrada + //Compila el texto indicado + if not OpenContextFrom(NombArc) then begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [NombArc]); + exit; + end; + {-------------------------------------------------} + TreeElems.Clear; + TreeDirec.Clear; + TreeElems.OnAddElement := @Tree_AddElement; //Se va a modificar el árbol + listFunSys.Clear; + CreateSystemElements; //Crea los elementos del sistema + ClearMacros; //Limpia las macros + //Inicia PIC + ExprLevel := 0; //inicia + GetHardwareInfo(pic, 'DEFAULT'); //configura modelo por defecto + pic.ClearMemFlash; + ResetFlashAndRAM; {Realmente lo que importa aquí sería limpiar solo la RAM, porque + cada procedimiento, reiniciará el puntero de FLASH} + //Compila el archivo actual como programa o como unidad + if IsUnit then begin + //Hay que compilar una unidad + consoleTickStart; +// debugln('*** Compiling unit: Pass 1.'); + TreeElems.main.name := ExtractFileName(mainFile); + p := pos('.',TreeElems.main.name); + if p <> 0 then TreeElems.main.name := copy(TreeElems.main.name, 1, p-1); + FirstPass := true; + CompileUnit(TreeElems.main); + consoleTickCount('** First Pass.'); + end else begin + //Debe ser un programa + {Se hace una primera pasada para ver, a modo de exploración, para ver qué + procedimientos, y varaibles son realmente usados, de modo que solo estos, serán + codificados en la segunda pasada. Así evitamos incluir, código innecesario.} + consoleTickStart; +// debugln('*** Compiling program: Pass 1.'); + pic.iFlash := 0; //dirección de inicio del código principal + FirstPass := true; + CompileProgram; //puede dar error + if HayError then exit; + consoleTickCount('** First Pass.'); + if Link then begin +// debugln('*** Compiling/Linking: Pass 2.'); + {Compila solo los procedimientos usados, leyendo la información del árbol de sintaxis, + que debe haber sido actualizado en la primera pasada.} + FirstPass := false; + CompileLinkProgram; + consoleTickCount('** Second Pass.'); + end; + end; + {-------------------------------------------------} + cIn.ClearAll;//es necesario por dejar limpio + //Genera archivo hexa, en la misma ruta del programa + if Link then begin + pic.GenHex(hexFile, ConfigWord); //CONFIG_NULL; + end; + finally + ejecProg := false; + //Tareas de finalización + if OnAfterCompile<>nil then OnAfterCompile; + end; +end; +function AdrStr(absAdr: word): string; +{formatea una dirección en cadena.} +begin + Result := '0x' + IntToHex(AbsAdr, 3); +end; +procedure TCompiler.RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); +{Devuelve una cadena con información sobre el uso de la memoria.} +var + adStr: String; + v: TxpEleVar; + nam, subUsed: string; + reg: TPicRegister; + rbit: TPicRegisterBit; +begin + for v in TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. + case varDecType of + dvtDBDb: begin + if ExcUnused and (v.nCalled = 0) then continue; + adStr := v.AddrString; //dirección hexadecimal + if adStr='' then adStr := 'XXXX'; //Error en dirección + if v.typ.IsBitSize then begin + lins.Add(' ' + v.name + ' Db ' + adStr); + end else if v.typ.IsByteSize then begin + lins.Add(' ' + v.name + ' DB ' + adStr); + end else if v.typ.IsWordSize then begin + lins.Add(' ' + v.name + ' DW ' + adStr); + end else begin + lins.Add(' "' + v.name + '"->' + adStr); + end; + end; + dvtEQU: begin; + if ExcUnused and (v.nCalled = 0) then continue; + if v.nCalled = 0 then subUsed := '; ' else subUsed := ''; + if v.typ.IsBitSize then begin + lins.Add('#define ' + v.name + ' ' + AdrStr(v.addr) + ',' + + IntToStr(v.adrBit.bit)+ subUsed); + end else if v.typ.IsByteSize then begin + lins.Add(v.name + ' EQU ' + AdrStr(v.addr)+ subUsed); + end else if v.typ.IsWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + end else if v.typ.IsDWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + lins.Add(v.name+'@2' + ' EQU ' + AdrStr(v.addrE)+ subUsed); + lins.Add(v.name+'@3' + ' EQU ' + AdrStr(v.addrU)+ subUsed); + end else begin + lins.Add('"' + v.name + '"->' + AdrStr(v.addr) + subUsed); + end; + end; + end; + end; + //Reporte de registros de trabajo, auxiliares y de pila + if (listRegAux.Count>0) or (listRegAuxBit.Count>0) then begin + lins.Add(';------ Work and Aux. Registers ------'); + for reg in listRegAux do begin + if not reg.assigned then continue; //puede haber registros de trabajo no asignados + nam := pic.NameRAM(reg.offs, reg.bank); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegAuxBit do begin + nam := pic.NameRAMbit(rbit.offs, rbit.bank, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; + if (listRegStk.Count>0) or (listRegStkBit.Count>0) then begin + lins.Add(';------ Stack Registers ------'); + for reg in listRegStk do begin + nam := pic.NameRAM(reg.offs, reg.bank); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegStkBit do begin + nam := pic.NameRAMbit(rbit.offs, rbit.bank, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define ' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; +// lins.Add(';-------------------------'); +end; +procedure TCompiler.DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); +begin + pic.DumpCode(lins, incAdrr, incCom, incVarNam); +end; +function TCompiler.RAMusedStr: string; +var + usedRAM, totRAM: Word; +begin + totRAM := pic.TotalMemRAM; + if totRAM=0 then exit; //protección + usedRAM := pic.UsedMemRAM; + Result := MSG_RAM_USED + IntToStr(usedRAM) +'/'+ IntToStr(totRAM) + 'B (' + + FloatToStrF(100*usedRAM/totRAM, ffGeneral, 1, 3) + '%)'; +end; +function TCompiler.FLASHusedStr: string; +var + totROM: Integer; + usedROM: Word; +begin + totROM := pic.MaxFlash; + usedROM := pic.UsedMemFlash; + Result := MSG_FLS_USED + IntToStr(usedROM) +'/'+ IntToStr(totROM) + ' (' + + FloatToStrF(100*usedROM/totROM, ffGeneral, 1, 3) + '%)'; +end; +procedure TCompiler.GetResourcesUsed(out ramUse, romUse, stkUse: single); +var + totROM, usedROM: Word; + usedRAM, totRAM: Word; +begin + //Calcula RAM + ramUse := 0; //valor por defecto + totRAM := pic.TotalMemRAM; + if totRAM = 0 then exit; //protección + usedRAM := pic.UsedMemRAM; + ramUse := usedRAM/ totRAM; + //Calcula ROM + romUse:= 0; //valor por defecto + totROM := pic.MaxFlash; + if totROM = 0 then exit; //protección + usedROM := pic.UsedMemFlash; + romUse := usedROM/totROM; + //Calcula STACK + TreeElems.main.UpdateCalledAll; //Debe haberse llenado TreeElems.main.lstCalled + //No considera el anidamiento por interrupciones + stkUse := TreeElems.main.maxNesting/8; +end; +procedure TCompiler.GenerateListReport(lins: TStrings); +{Genera un reporte detallado de la compialción} +var + curInst, opc: TPIC16Inst; + i: word; + OpCodeCoun: array[low(TPIC16Inst)..high(TPIC16Inst)] of integer; + tmpList: TStringList; + txt, OpCode, Times, state: String; + + fun: TxpEleFun; + caller : TxpEleCaller; + called : TxpElement; + exitCall: TxpExitCall; +begin + //////////////////////////////////////////////////////////// + //////////// Reporte de uso de memeoria /////////// + //////////////////////////////////////////////////////////// + lins.Add(RAMusedStr); + lins.Add(FLASHusedStr); + //////////////////////////////////////////////////////////// + //////////// Reporte de cuenta de instrucciones /////////// + //////////////////////////////////////////////////////////// + //Limpia contadores + for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin + OpCodeCoun[opc] := 0; + end; + //Cuenta apariciones + for i:=0 to high(pic.flash) do begin + if pic.flash[i].used then begin + pic.PCH := hi(i); + pic.PCL := lo(i); + curInst := pic.CurInstruction; + Inc(OpCodeCoun[curInst]); //Acumula + end; + end; + //Carga en lista para ordenar + tmpList:= TStringList.Create; + for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin + tmpList.Add(Format('%.4d', [OpCodeCoun[Opc]]) + '-' + PIC16InstName[opc]); + end; + tmpList.Sort; //Ordena + //Muestra lista ordenada + lins.Add(';INSTRUCTION COUNTER'); + lins.Add(';==================='); + for i:=tmpList.Count-1 downto 0 do begin + txt := tmpList[i]; + OpCode := copy(txt , 6, 10); + Times := copy(txt , 1, 4); + if Times = '0000' then continue; + lins.Add(copy(OpCode + ' ',1,7) + '->'+ Times); + end; + tmpList.Destroy; + + //////////////////////////////////////////////////////////// + ////////////////// Reporte de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE LIST'); + lins.Add(';==================='); + + lins.Add(';NAME USED POSIITON IN SOURCE'); + lins.Add(';----------------------- ------ -------------------------------'); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + if fun.nCalled = 0 then + state := 'Unused' + else + state := RightStr(' '+IntToStr(fun.nCalled)+ '', 6); + + lins.Add( copy(fun.name + space(24) , 1, 24) + ' ' + + state + ' ' + + fun.srcDec.RowColString + ':' + fun.srcDec.fil + ); + end; + end; + + //////////////////////////////////////////////////////////// + ////////////////// Detalle de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE DETAIL'); + lins.Add(';==================='); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + lins.Add('------------------------------------'); + lins.Add('----- PROCEDURE ' + fun.name); + lins.Add('------------------------------------'); + lins.Add(' Caller Procedures:'); + if fun.lstCallers .Count = 0 then begin + lins.Add(' '); + end else begin + for caller in fun.lstCallers do begin + lins.Add(' - ' + caller.caller.Parent.name); + end; + end; + lins.Add(''); + + lins.Add(' Called Procedures:'); + if fun.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' All Called Procedures:'); + if fun.lstCalledAll.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalledAll do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' Exit Instruction Calls:'); + if fun.lstExitCalls.Count = 0 then begin + lins.Add(' '); + end else begin + for exitCall in fun.lstExitCalls do begin + lins.Add(' - Exit() in ' +exitCall.srcPos.RowColString); + end; + end; + lins.Add(''); + + end; + end; + //Detalles del programa principal + + lins.Add('------------------------------------'); + lins.Add('----- Main Program'); + lins.Add('------------------------------------'); + lins.Add(' Called Procedures:'); + if TreeElems.main.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in TreeElems.main.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + //Muestra el máximo nivel de anidamiento. + lins.Add('Max. Nesting = ' + IntToSTr(TreeElems.main.maxNesting)); + +end; +constructor TCompiler.Create; +begin + // hexFile := 'output.hex'; + inherited Create; + cIn.OnNewLine:=@cInNewLine; + mode := modPicPas; //Por defecto en sintaxis nueva + StartSyntax; //Debe hacerse solo una vez al inicio + DefCompiler; //Debe hacerse solo una vez al inicio +end; +destructor TCompiler.Destroy; +begin + inherited Destroy; +end; + +initialization + +finalization + +end. +//2161 diff --git a/Source/Compiler_PIC10.pas b/Source/Compiler_PIC10.pas new file mode 100644 index 00000000..b3bb6bee --- /dev/null +++ b/Source/Compiler_PIC10.pas @@ -0,0 +1,626 @@ +{Unidad con rutinas del analizador sintáctico. +} +unit Compiler_PIC10; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, lclProc, SynEditHighlighter, types, MisUtils, XpresBas, + XpresTypesPIC, XpresElementsPIC, Pic10Utils, Pic10Devices, CompBase, + ParserDirec, GenCodBas_PIC10, GenCod_PIC10, ParserDirec_PIC10, Globales, + FormConfig, CompOperands {Por diseño, parecería que GenCodBas, no debería accederse desde aquí}; +type + { TCompiler } + TCompiler_PIC10 = class(TParserDirec) + private //Funciones básicas + procedure cInNewLine(lin: string); + private //Compilación de secciones + procedure CompileLinkProgram; + public + procedure Compile(NombArc: string; Link: boolean = true); override; + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); override; //uso de memoria RAM + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); override; //uso de la memoria Flash + function RAMusedStr: string; override; + function FLASHusedStr: string; override; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); override; + procedure GenerateListReport(lins: TStrings); override; + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + +procedure SetLanguage; + +implementation +var + ER_NOT_IMPLEM_, ER_IDEN_EXPECT, ER_DUPLIC_IDEN, ER_INVAL_FLOAT: string; + ER_NOTYPDEFNUM, ER_EXP_VAR_IDE, ER_INV_MEMADDR, ER_BIT_VAR_REF: String; + ER_UNKNOWN_ID_: string; + ER_IDE_CON_EXP, ER_NUM_ADD_EXP, ER_IDE_TYP_EXP, ER_SEM_COM_EXP: String; + ER_EQU_COM_EXP, ER_COMPIL_PROC, ER_CON_EXP_EXP: String; + ER_FIL_NOFOUND, WA_UNUSED_CON_, WA_UNUSED_VAR_,WA_UNUSED_PRO_: String; + MSG_RAM_USED, MSG_FLS_USED, ER_ARR_SIZ_BIG: String; + ER_INV_ARR_SIZ: String; +//Funciones básicas +procedure SetLanguage; +begin + ParserDirec_PIC10.SetLanguage; + {$I ..\language\tra_Compiler.pas} +end; +procedure TCompiler_PIC10.cInNewLine(lin: string); +//Se pasa a una nueva _Línea en el contexto de entrada +begin + if Config.IncComment then begin + pic.addTopComm(' ;'+trim(lin)); //agrega _Línea al código ensmblador + end; +end; + +procedure TCompiler_PIC10.CompileLinkProgram; +{Genera el código compilado final. Usa la información del árbol de sintaxis, para +ubicar a los diversos elementos que deben compilarse. +Se debe llamar después de compilar con CompileProgram. +Esto es lo más cercano a un enlazador, que hay en PicPas.} + procedure SetInitialBank(fun: TxpEleFun); + {Define el banco de trabajo para compilar correctamente} + var + cal : TxpEleCaller; + begin + if fun.IsInterrupt then begin + //Para ISR, no se genera código de manejo de bancos + fun.iniBnk := 0; //asume siempre 0 + CurrBank := fun.iniBnk; //configura al compilador + exit; + end; + if SetProIniBnk then begin + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + end else begin + //Se debe deducir el banco inicial de la función + //Explora los bancos desde donde se llama + if fun.lstCallers.Count = 1 then begin + //Solo es llamado una vez + fun.iniBnk := fun.lstCallers[0].curBnk; + CurrBank := fun.iniBnk; //configura al compilador + end else begin + fun.iniBnk := fun.lstCallers[0].curBnk; //banco de la primera llamada + //Hay varias llamadas + for cal in fun.lstCallers do begin + if fun.iniBnk <> cal.curBnk then begin + //Hay llamadas desde varios bancos. + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + exit; + end; + end; + //Todas las llamadas son del mismo banco + CurrBank := fun.iniBnk; //configura al compilador + end; + end; + end; +var + elem : TxpElement; + bod : TxpEleBody; + xvar : TxpEleVar; + fun : TxpEleFun; + iniMain, i: integer; + + add: Word; +begin + ExprLevel := 0; + pic.ClearMemFlash; + callResetFlashAndRAM; + ClearError; + pic.MsjError := ''; + //Verifica las constantes usadas. Solo en el nodo principal, para no sobrecargar mensajes. + for elem in TreeElems.main.elements do if elem.idClass = eltCons then begin + if elem.nCalled = 0 then begin + GenWarnPos(WA_UNUSED_CON_, [elem.name], elem.srcDec); + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + RefreshAllElementLists; + RemoveUnusedFunc; //Se debe empezar con las funciones + RemoveUnusedVars; //Luego las variables + RemoveUnusedCons; + RemoveUnusedTypes; + UpdateFunLstCalled; //Actualiza lista "lstCalled" de las funciones usadas + if HayError then exit; + SeparateUsedFunctions; + //Asigna memoria, primero a las variables locales (y parámetros) de las funciones + CreateLocalVarsAndPars; + /////////////////////////////////////////////////////////////////////////////// + //Reserva espacio para las variables (Que no son de funciones). + for xvar in TreeElems.AllVars do begin + if xvar.Parent.idClass = eltFunc then continue; //Las variables de funciones ya se crearon + + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end else begin + //Variable no usada + xvar.ResetAddress; + if xvar.Parent = TreeElems.main then begin + //Genera mensaje solo para variables del programa principal. + GenWarnPos(WA_UNUSED_VAR_, [xVar.name], xvar.srcDec); + end; + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + _GOTO_PEND(iniMain); //instrucción de salto inicial + //Codifica la función INTERRUPT, si existe + if interruptFunct<>nil then begin; + fun := interruptFunct; + //Compila la función en la dirección 0x04 + pic.iFlash := $04; + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + cIn.PosAct := fun.posCtx; //Posiciona escáner + PutLabel('__'+fun.name); + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + SetInitialBank(fun); //Configura manejo de bancos RAM + callCompileProcBody(fun); + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + if HayError then exit; //Puede haber error + end; + //Codifica las subrutinas usadas + for fun in usedFuncs do begin + if fun.IsInterrupt then continue; +//debugln('---Función usada: ' + fun.name); + {According the method we use to add callers (See TCompilerBase.AddCallerTo() ), + condition "fun.nCalled>0" ensure we have here the first ocurrence of a function. So + it can be: + - A common function/procedure in the main program. + - A INTERFACE function. + - A private IMPLEMENTATION function (without previous declaration). + } + //Compile used function in the current address. + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + PutLabel('__'+fun.name); + cIn.PosAct := fun.posCtx; //Posiciona escáner + if fun.compile<>nil then begin + //Is system function. Has not body. + fun.compile(fun); //codifica + end else begin + //Is a common function with body. + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + callCompileProcBody(fun); + if HayError then exit; //Puede haber error + if pic.MsjError<>'' then begin //Error en el mismo PIC + GenError(pic.MsjError); + exit; + end; + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + end; + fun.linked := true; //Marca como ya enlazada + //Verifica si hace falta completar llamadas + if fun.nAddresPend>0 then begin + //Hay llamadas pendientes qie completar a esta función + for i:=0 to fun.nAddresPend -1 do begin + debugln('Completando lllamadas pendientes a %s en %d', [fun.name, fun.addrsPend[i]]); + //Completa la instrucción JSR $0000 + add := fun.addrsPend[i]; + pic.ram[add].value := fun.adrr and $ff; + pic.ram[add+1].value := (fun.adrr >> 8) and $ff; + end; + end; + end; + for fun in unusedFuncs do begin + //Esta función no se usa. + if fun.Parent = TreeElems.main then begin + //Genera mensaje solo para funciones del programa principal. + GenWarnPos(WA_UNUSED_PRO_, [fun.name], fun.srcDec); + end; + end; + + + + + + //Compila cuerpo del programa principal + pic.codGotoAt(iniMain, _PC); //termina de codificar el salto + bod := TreeElems.BodyNode; //lee Nodo del cuerpo principal + if bod = nil then begin + GenError('Body program not found.'); + exit; + end; + bod.adrr := pic.iFlash; //guarda la dirección de codificación +// bod.nCalled := 1; //actualiza + cIn.PosAct := bod.posCtx; //ubica escaner + PutLabel('__main_program__'); + TreeElems.OpenElement(bod); + CurrBank := 0; //Se limpia, porque pudo haber cambiado con la compilación de procedimientos + CompileCurBlock; + TreeElems.CloseElement; //cierra el cuerpo principal + PutLabel('__end_program__'); + {No es necesario hacer más validaciones, porque ya se hicieron en la primera pasada} + _SLEEP(); //agrega instrucción final + if pic.MsjError<>'' then begin //Puede ser error al escribir la última instrucción + GenError(pic.MsjError); + exit; + end; +end; +procedure TCompiler_PIC10.Compile(NombArc: string; Link: boolean); +//Compila el contenido de un archivo. +var + p: SizeInt; +begin + DefCompiler; {Se crean los tipos de sistema, siempre, porque se pudo haber modificado + su definición, cuandos se definen tipos del usuario, como en el caso de + los punteros, que agregan operaciones a los word.} + mode := modPicPas; //Por defecto en sintaxis nueva + mainFile := NombArc; + hexfile := ChangeFileExt(NombArc, '.hex'); //Obtiene nombre + hexfile := hexFilePath; //Expande nombre si es necesario + //se pone en un "try" para capturar errores y para tener un punto salida de salida + //único + if ejecProg then begin + GenError(ER_COMPIL_PROC); + exit; //sale directamente + end; + try + ejecProg := true; //marca bandera + ClearError; + //Genera instrucciones de inicio + cIn.ClearAll; //elimina todos los Contextos de entrada + //Compila el texto indicado + if not OpenContextFrom(NombArc) then begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [NombArc]); + exit; + end; + {-------------------------------------------------} + TreeElems.Clear; + //Asigna nombre y archivo a elemento + TreeElems.main.name := ExtractFileName(mainFile); + p := pos('.',TreeElems.main.name); + if p <> 0 then TreeElems.main.name := copy(TreeElems.main.name, 1, p-1); + TreeElems.main.srcDec.fil := mainFile; + //Continúa con preparación + TreeDirec.Clear; + TreeElems.OnAddElement := @Tree_AddElement; //Se va a modificar el árbol + listFunSys.Clear; + FirstPass := true; + CreateSystemElements; //Crea los elementos del sistema + ClearMacros; //Limpia las macros + //Inicia PIC + ExprLevel := 0; //inicia + GetHardwareInfo(pic, 'DEFAULT'); //configura modelo por defecto + pic.ClearMemFlash; + callResetFlashAndRAM; {Realmente lo que importa aquí sería limpiar solo la RAM, porque + cada procedimiento, reiniciará el puntero de FLASH} + //Compila el archivo actual como programa o como unidad + if IsUnit then begin + CompiledUnit := true; + //Hay que compilar una unidad + consoleTickStart; +// debugln('*** Compiling unit: Pass 1.'); + CompileUnit(TreeElems.main); + + consoleTickCount('** First Pass.'); + end else begin + //Debe ser un programa + CompiledUnit := false; + {Se hace una primera pasada para ver, a modo de exploración, para ver qué + procedimientos, y variables son realmente usados, de modo que solo estos, serán + codificados en la segunda pasada. Así evitamos incluir, código innecesario.} + consoleTickStart; +// debugln('*** Compiling program: Pass 1.'); + pic.iFlash := 0; //dirección de inicio del código principal + CompileProgram; //puede dar error + if HayError then exit; + + consoleTickCount('** First Pass.'); + if Link then begin //El enlazado solo es válido para programas + {Compila solo los procedimientos usados, leyendo la información del árbol de sintaxis, + que debe haber sido actualizado en la primera pasada.} + FirstPass := false; + CompileLinkProgram; + consoleTickCount('** Second Pass.'); + //Genera archivo hexa, en la misma ruta del programa + pic.GenHex(hexFile, ConfigWord); //CONFIG_NULL; + end; + end; + {-------------------------------------------------} + cIn.ClearAll;//es necesario por dejar limpio + finally + ejecProg := false; + //Tareas de finalización + if OnAfterCompile<>nil then OnAfterCompile; + end; +end; +function AdrStr(absAdr: word): string; +{formatea una dirección en cadena.} +begin + Result := '0x' + IntToHex(AbsAdr, 3); +end; +procedure TCompiler_PIC10.RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); +{Devuelve una cadena con información sobre el uso de la memoria.} +var + adStr: String; + v: TxpEleVar; + nam, subUsed: string; + reg: TPicRegister; + rbit: TPicRegisterBit; +begin + for v in TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. + case varDecType of + dvtDBDb: begin + if ExcUnused and (v.nCalled = 0) then continue; + adStr := v.AddrString; //dirección hexadecimal + if adStr='' then adStr := 'XXXX'; //Error en dirección + if v.typ.IsBitSize then begin + lins.Add(' ' + v.name + ' Db ' + adStr); + end else if v.typ.IsByteSize then begin + lins.Add(' ' + v.name + ' DB ' + adStr); + end else if v.typ.IsWordSize then begin + lins.Add(' ' + v.name + ' DW ' + adStr); + end else begin + lins.Add(' "' + v.name + '"->' + adStr); + end; + end; + dvtEQU: begin; + if ExcUnused and (v.nCalled = 0) then continue; + if v.nCalled = 0 then subUsed := '; ' else subUsed := ''; + if v.typ.IsBitSize then begin + lins.Add('#define ' + v.name + ' ' + AdrStr(v.addr) + ',' + + IntToStr(v.adrBit.bit)+ subUsed); + end else if v.typ.IsByteSize then begin + lins.Add(v.name + ' EQU ' + AdrStr(v.addr)+ subUsed); + end else if v.typ.IsWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + end else if v.typ.IsDWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + lins.Add(v.name+'@2' + ' EQU ' + AdrStr(v.addrE)+ subUsed); + lins.Add(v.name+'@3' + ' EQU ' + AdrStr(v.addrU)+ subUsed); + end else begin + lins.Add('"' + v.name + '"->' + AdrStr(v.addr) + subUsed); + end; + end; + end; + end; + //Reporte de registros de trabajo, auxiliares y de pila + if (listRegAux.Count>0) or (listRegAuxBit.Count>0) then begin + lins.Add(';------ Work and Aux. Registers ------'); + for reg in listRegAux do begin + if not reg.assigned then continue; //puede haber registros de trabajo no asignados + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegAuxBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; + if (listRegStk.Count>0) or (listRegStkBit.Count>0) then begin + lins.Add(';------ Stack Registers ------'); + for reg in listRegStk do begin + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegStkBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define ' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; +// lins.Add(';-------------------------'); +end; +procedure TCompiler_PIC10.DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); +begin + pic.DumpCode(lins, incAdrr, incCom, incVarNam); +end; +function TCompiler_PIC10.RAMusedStr: string; +var + usedRAM, totRAM: Word; +begin + totRAM := pic.TotalMemRAM; + if totRAM=0 then exit; //protección + usedRAM := pic.UsedMemRAM; + Result := MSG_RAM_USED + IntToStr(usedRAM) +'/'+ IntToStr(totRAM) + 'B (' + + FloatToStrF(100*usedRAM/totRAM, ffGeneral, 1, 3) + '%)'; +end; +function TCompiler_PIC10.FLASHusedStr: string; +var + totROM: Integer; + usedROM: Word; +begin + totROM := pic.MaxFlash; + usedROM := pic.UsedMemFlash; + Result := MSG_FLS_USED + IntToStr(usedROM) +'/'+ IntToStr(totROM) + ' (' + + FloatToStrF(100*usedROM/totROM, ffGeneral, 1, 3) + '%)'; +end; +procedure TCompiler_PIC10.GetResourcesUsed(out ramUse, romUse, stkUse: single); +var + totROM, usedROM: Word; + usedRAM, totRAM: Word; +begin + //Calcula RAM + ramUse := 0; //valor por defecto + totRAM := pic.TotalMemRAM; + if totRAM = 0 then exit; //protección + usedRAM := pic.UsedMemRAM; + ramUse := usedRAM/ totRAM; + //Calcula ROM + romUse:= 0; //valor por defecto + totROM := pic.MaxFlash; + if totROM = 0 then exit; //protección + usedROM := pic.UsedMemFlash; + romUse := usedROM/totROM; + //Calcula STACK + TreeElems.main.UpdateCalledAll; //Debe haberse llenado TreeElems.main.lstCalled + //No considera el anidamiento por interrupciones + stkUse := TreeElems.main.maxNesting/STACK_SIZE; +end; +procedure TCompiler_PIC10.GenerateListReport(lins: TStrings); +{Genera un reporte detallado de la compialción} +var + curInst, opc: TPIC10Inst; + i: word; + OpCodeCoun: array[low(TPIC10Inst)..high(TPIC10Inst)] of integer; + tmpList: TStringList; + txt, OpCode, Times, state: String; + + fun: TxpEleFun; + caller : TxpEleCaller; + called : TxpElement; + exitCall: TxpExitCall; +begin + //////////////////////////////////////////////////////////// + //////////// Reporte de uso de memeoria /////////// + //////////////////////////////////////////////////////////// + lins.Add(RAMusedStr); + lins.Add(FLASHusedStr); + //////////////////////////////////////////////////////////// + //////////// Reporte de cuenta de instrucciones /////////// + //////////////////////////////////////////////////////////// + //Limpia contadores + for opc := low(TPIC10Inst) to high(TPIC10Inst) do begin + OpCodeCoun[opc] := 0; + end; + //Cuenta apariciones + for i:=0 to high(pic.flash) do begin + if pic.flash[i].used then begin + pic.PC.W := i; + curInst := pic.CurInstruction; + Inc(OpCodeCoun[curInst]); //Acumula + end; + end; + //Carga en lista para ordenar + tmpList:= TStringList.Create; + for opc := low(TPIC10Inst) to high(TPIC10Inst) do begin + tmpList.Add(Format('%.4d', [OpCodeCoun[Opc]]) + '-' + PIC10InstName[opc]); + end; + tmpList.Sort; //Ordena + //Muestra lista ordenada + lins.Add(';INSTRUCTION COUNTER'); + lins.Add(';==================='); + for i:=tmpList.Count-1 downto 0 do begin + txt := tmpList[i]; + OpCode := copy(txt , 6, 10); + Times := copy(txt , 1, 4); + if Times = '0000' then continue; + lins.Add(copy(OpCode + ' ',1,7) + '->'+ Times); + end; + tmpList.Destroy; + + //////////////////////////////////////////////////////////// + ////////////////// Reporte de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE LIST'); + lins.Add(';==================='); + + lins.Add(';NAME USED POSIITON IN SOURCE'); + lins.Add(';----------------------- ------ -------------------------------'); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + if fun.nCalled = 0 then + state := 'Unused' + else + state := RightStr(' '+IntToStr(fun.nCalled)+ '', 6); + + lins.Add( copy(fun.name + space(24) , 1, 24) + ' ' + + state + ' ' + + fun.srcDec.RowColString + ':' + fun.srcDec.fil + ); + end; + end; + + //////////////////////////////////////////////////////////// + ////////////////// Detalle de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE DETAIL'); + lins.Add(';==================='); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + lins.Add('------------------------------------'); + lins.Add('----- PROCEDURE ' + fun.name); + lins.Add('------------------------------------'); + lins.Add(' Caller Procedures:'); + if fun.lstCallers .Count = 0 then begin + lins.Add(' '); + end else begin + for caller in fun.lstCallers do begin + lins.Add(' - ' + caller.caller.Parent.name); + end; + end; + lins.Add(''); + + lins.Add(' Called Procedures:'); + if fun.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' All Called Procedures:'); + if fun.lstCalledAll.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalledAll do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' Exit Instruction Calls:'); + if fun.lstExitCalls.Count = 0 then begin + lins.Add(' '); + end else begin + for exitCall in fun.lstExitCalls do begin + lins.Add(' - Exit() in ' +exitCall.srcPos.RowColString); + end; + end; + lins.Add(''); + + end; + end; + //Detalles del programa principal + + lins.Add('------------------------------------'); + lins.Add('----- Main Program'); + lins.Add('------------------------------------'); + lins.Add(' Called Procedures:'); + if TreeElems.main.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in TreeElems.main.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + //Muestra el máximo nivel de anidamiento. + lins.Add('Max. Nesting = ' + IntToSTr(TreeElems.main.maxNesting)); + +end; +constructor TCompiler_PIC10.Create; +begin + // hexFile := 'output.hex'; + inherited Create; + cIn.OnNewLine:=@cInNewLine; + mode := modPicPas; //Por defecto en sintaxis nueva + StartSyntax; //Debe hacerse solo una vez al inicio +end; +destructor TCompiler_PIC10.Destroy; +begin + inherited Destroy; +end; + +initialization + +finalization + +end. +//2730 diff --git a/Source/Compiler_PIC16.pas b/Source/Compiler_PIC16.pas new file mode 100644 index 00000000..2678a181 --- /dev/null +++ b/Source/Compiler_PIC16.pas @@ -0,0 +1,626 @@ +{Unidad con rutinas del analizador sintáctico. +} +unit Compiler_PIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, lclProc, SynEditHighlighter, MisUtils, XpresBas, + XpresTypesPIC, XpresElementsPIC, Pic16Utils, Pic16Devices, CompBase, + ParserDirec, GenCodBas_PIC16, GenCod_PIC16, ParserDirec_PIC16, Globales, + FormConfig, CompOperands {Por diseño, parecería que GenCodBas, no debería accederse desde aquí}; +type + { TCompiler_PIC16 } + TCompiler_PIC16 = class(TParserDirec) + private //Funciones básicas + procedure cInNewLine(lin: string); + private //Compilación de secciones + procedure CompileLinkProgram; + public + procedure Compile(NombArc: string; Link: boolean); override; + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); override; //uso de memoria RAM + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); override; //uso de la memoria Flash + function RAMusedStr: string; override; + function FLASHusedStr: string; override; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); override; + procedure GenerateListReport(lins: TStrings); override; + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + +procedure SetLanguage; + +implementation +var + ER_NOT_IMPLEM_, ER_IDEN_EXPECT, ER_DUPLIC_IDEN, ER_INVAL_FLOAT: string; + ER_NOTYPDEFNUM, ER_EXP_VAR_IDE, ER_INV_MEMADDR, ER_BIT_VAR_REF: String; + ER_UNKNOWN_ID_: string; + ER_IDE_CON_EXP, ER_NUM_ADD_EXP, ER_IDE_TYP_EXP, ER_SEM_COM_EXP: String; + ER_EQU_COM_EXP, ER_PROG_NAM_EX, ER_COMPIL_PROC, ER_CON_EXP_EXP: String; + ER_FIL_NOFOUND, WA_UNUSED_CON_, WA_UNUSED_VAR_,WA_UNUSED_PRO_: String; + MSG_RAM_USED, MSG_FLS_USED, ER_ARR_SIZ_BIG: String; + ER_INV_ARR_SIZ: String; +//Funciones básicas +procedure SetLanguage; +begin + ParserDirec_PIC16.SetLanguage; + {$I ..\language\tra_Compiler.pas} +end; +procedure TCompiler_PIC16.cInNewLine(lin: string); +//Se pasa a una nueva _Línea en el contexto de entrada +begin + if Config.IncComment then begin + pic.addTopComm(' ;'+trim(lin)); //agrega _Línea al código ensmblador + end; +end; + +procedure TCompiler_PIC16.CompileLinkProgram; +{Genera el código compilado final. Usa la información del árbol de sintaxis, para +ubicar a los diversos elementos que deben compilarse. +Se debe llamar después de compilar con CompileProgram. +Esto es lo más cercano a un enlazador, que hay en PicPas.} + procedure SetInitialBank(fun: TxpEleFun); + {Define el banco de trabajo para compilar correctamente} + var + cal : TxpEleCaller; + begin + if fun.IsInterrupt then begin + //Para ISR, no se genera código de manejo de bancos + fun.iniBnk := 0; //asume siempre 0 + CurrBank := fun.iniBnk; //configura al compilador + exit; + end; + if SetProIniBnk then begin + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + end else begin + //Se debe deducir el banco inicial de la función + //Explora los bancos desde donde se llama + if fun.lstCallers.Count = 1 then begin + //Solo es llamado una vez + fun.iniBnk := fun.lstCallers[0].curBnk; + CurrBank := fun.iniBnk; //configura al compilador + end else begin + fun.iniBnk := fun.lstCallers[0].curBnk; //banco de la primera llamada + //Hay varias llamadas + for cal in fun.lstCallers do begin + if fun.iniBnk <> cal.curBnk then begin + //Hay llamadas desde varios bancos. + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + exit; + end; + end; + //Todas las llamadas son del mismo banco + CurrBank := fun.iniBnk; //configura al compilador + end; + end; + end; +var + elem : TxpElement; + bod : TxpEleBody; + xvar : TxpEleVar; + fun : TxpEleFun; + uni : TxpEleUnit; + iniMain, i: integer; + add: Word; +begin + ExprLevel := 0; + pic.ClearMemFlash; + callResetFlashAndRAM; + ClearError; + pic.MsjError := ''; + //Verifica las constantes usadas. Solo en el nodo principal, para no sobrecargar mensajes. + for elem in TreeElems.main.elements do if elem.idClass = eltCons then begin + if elem.nCalled = 0 then begin + GenWarnPos(WA_UNUSED_CON_, [elem.name], elem.srcDec); + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + RefreshAllElementLists; + RemoveUnusedFunc; //Se debe empezar con las funciones + RemoveUnusedVars; //Luego las variables + RemoveUnusedCons; + RemoveUnusedTypes; + UpdateFunLstCalled; //Actualiza lista "lstCalled" de las funciones usadas + if HayError then exit; + SeparateUsedFunctions; + //Asigna memoria, primero a las variables locales (y parámetros) de las funciones + CreateLocalVarsAndPars; + /////////////////////////////////////////////////////////////////////////////// + //Reserva espacio para las variables (Que no son de funciones). + for xvar in TreeElems.AllVars do begin + if xvar.Parent.idClass = eltFunc then continue; //Las variables de funciones ya se crearon +// if xvar.Parent.idClass = eltUnit then continue; + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end else begin + //Variable no usada + xvar.ResetAddress; + if xvar.Parent = TreeElems.main then begin + //Genera mensaje solo para variables del programa principal. + GenWarnPos(WA_UNUSED_VAR_, [xVar.name], xvar.srcDec); + end; + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + _GOTO_PEND(iniMain); //instrucción de salto inicial + //Codifica la función INTERRUPT, si existe + if interruptFunct<>nil then begin; + fun := interruptFunct; + //Compila la función en la dirección 0x04 + pic.iFlash := $04; + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + cIn.PosAct := fun.posCtx; //Posiciona escáner + PutLabel('__'+fun.name); + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + SetInitialBank(fun); //Configura manejo de bancos RAM + callCompileProcBody(fun); + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + if HayError then exit; //Puede haber error + end; + //Codifica las subrutinas usadas + for fun in usedFuncs do begin + if fun.IsInterrupt then continue; +//debugln('---Función usada: ' + fun.name); + {According the method we use to add callers (See TCompilerBase.AddCallerTo() ), + condition "fun.nCalled>0" ensure we have here the first ocurrence of a function. So + it can be: + - A common function/procedure in the main program. + - A INTERFACE function. + - A private IMPLEMENTATION function (without previous declaration). + } + //Compile used function in the current address. + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + PutLabel('__'+fun.name); + cIn.PosAct := fun.posCtx; //Posiciona escáner + if fun.compile<>nil then begin + //Is system function. Has not body. + fun.compile(fun); //codifica + end else begin + //Is a common function with body. + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + callCompileProcBody(fun); + if HayError then exit; //Puede haber error + if pic.MsjError<>'' then begin //Error en el mismo PIC + GenError(pic.MsjError); + exit; + end; + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + end; + fun.linked := true; //Marca como ya enlazada + //Verifica si hace falta completar llamadas + if fun.nAddresPend>0 then begin + //Hay llamadas pendientes qie completar a esta función + for i:=0 to fun.nAddresPend -1 do begin + debugln('Completando lllamadas pendientes a %s en %d', [fun.name, fun.addrsPend[i]]); + //Completa la instrucción JSR $0000 + add := fun.addrsPend[i]; + pic.ram[add].value := fun.adrr and $ff; + pic.ram[add+1].value := (fun.adrr >> 8) and $ff; + end; + end; + end; + for fun in unusedFuncs do begin + //Esta función no se usa. + if fun.Parent = TreeElems.main then begin + //Genera mensaje solo para funciones del programa principal. + GenWarnPos(WA_UNUSED_PRO_, [fun.name], fun.srcDec); + end; + end; + //Compila sección INITIALIZATION de las unidades usadas + //Se debe seguir el orden de declaración + for uni in TreeElems.AllUnits do begin + debugln('>>'+uni.name); + end; + //Compila cuerpo del programa principal + pic.codGotoAt(iniMain, _PC); //termina de codificar el salto + bod := TreeElems.BodyNode; //lee Nodo del cuerpo principal + if bod = nil then begin + GenError('Body program not found.'); + exit; + end; + bod.adrr := pic.iFlash; //guarda la dirección de codificación +// bod.nCalled := 1; //actualiza + cIn.PosAct := bod.posCtx; //ubica escaner + PutLabel('__main_program__'); + TreeElems.OpenElement(bod); + CurrBank := 0; //Se limpia, porque pudo haber cambiado con la compilación de procedimientos + CompileCurBlock; + TreeElems.CloseElement; //cierra el cuerpo principal + PutLabel('__end_program__'); + {No es necesario hacer más validaciones, porque ya se hicieron en la primera pasada} + _SLEEP(); //agrega instrucción final + if pic.MsjError<>'' then begin //Puede ser error al escribir la última instrucción + GenError(pic.MsjError); + exit; + end; +end; +procedure TCompiler_PIC16.Compile(NombArc: string; Link: boolean); +//Compila el contenido de un archivo. +var + p: SizeInt; +begin + DefCompiler; {Se crean los tipos de sistema, siempre, porque se pudo haber modificado + su definición, cuandos se definen tipos del usuario, como en el caso de + los punteros, que agregan operaciones a los word.} + mode := modPicPas; //Por defecto en sintaxis nueva + mainFile := NombArc; + hexfile := ChangeFileExt(NombArc, '.hex'); //Obtiene nombre + hexfile := hexFilePath; //Expande nombre si es necesario + //se pone en un "try" para capturar errores y para tener un punto salida de salida + //único + if ejecProg then begin + GenError(ER_COMPIL_PROC); + exit; //sale directamente + end; + try + ejecProg := true; //marca bandera + ClearError; + //Genera instrucciones de inicio + cIn.ClearAll; //elimina todos los Contextos de entrada + //Compila el texto indicado + if not OpenContextFrom(NombArc) then begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [NombArc]); + exit; + end; + {-------------------------------------------------} + TreeElems.Clear; + //Asigna nombre y archivo a elemento + TreeElems.main.name := ExtractFileName(mainFile); + p := pos('.',TreeElems.main.name); + if p <> 0 then TreeElems.main.name := copy(TreeElems.main.name, 1, p-1); + TreeElems.main.srcDec.fil := mainFile; + //Continúa con preparación + TreeDirec.Clear; + TreeElems.OnAddElement := @Tree_AddElement; //Se va a modificar el árbol + listFunSys.Clear; + FirstPass := true; + CreateSystemElements; //Crea los elementos del sistema + ClearMacros; //Limpia las macros + //Inicia PIC + ExprLevel := 0; //inicia + GetHardwareInfo(pic, 'DEFAULT'); //configura modelo por defecto + pic.ClearMemFlash; + callResetFlashAndRAM; {Realmente lo que importa aquí sería limpiar solo la RAM, porque + cada procedimiento, reiniciará el puntero de FLASH} + //Compila el archivo actual como programa o como unidad + if IsUnit then begin + CompiledUnit := true; + //Hay que compilar una unidad + consoleTickStart; +// debugln('*** Compiling unit: Pass 1.'); + CompileUnit(TreeElems.main); + UpdateCallersToUnits; + consoleTickCount('** First Pass.'); + end else begin + //Debe ser un programa + CompiledUnit := false; + {Se hace una primera pasada para ver, a modo de exploración, para ver qué + procedimientos, y variables son realmente usados, de modo que solo estos, serán + codificados en la segunda pasada. Así evitamos incluir, código innecesario.} + consoleTickStart; +// debugln('*** Compiling program: Pass 1.'); + pic.iFlash := 0; //dirección de inicio del código principal + CompileProgram; //puede dar error + if HayError then exit; + UpdateCallersToUnits; + consoleTickCount('** First Pass.'); + if Link then begin //El enlazado solo es válido para programas + {Compila solo los procedimientos usados, leyendo la información del árbol de sintaxis, + que debe haber sido actualizado en la primera pasada.} + FirstPass := false; + CompileLinkProgram; + consoleTickCount('** Second Pass.'); + //Genera archivo hexa, en la misma ruta del programa + pic.GenHex(hexFile, ConfigWord); //CONFIG_NULL; + end; + end; + {-------------------------------------------------} + cIn.ClearAll;//es necesario por dejar limpio + finally + ejecProg := false; + //Tareas de finalización + if OnAfterCompile<>nil then OnAfterCompile; + end; +end; +function AdrStr(absAdr: word): string; +{formatea una dirección en cadena.} +begin + Result := '0x' + IntToHex(AbsAdr, 3); +end; +procedure TCompiler_PIC16.RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); +{Devuelve una cadena con información sobre el uso de la memoria.} +var + adStr: String; + v: TxpEleVar; + nam, subUsed: string; + reg: TPicRegister; + rbit: TPicRegisterBit; +begin + for v in TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. + case varDecType of + dvtDBDb: begin + if ExcUnused and (v.nCalled = 0) then continue; + adStr := v.AddrString; //dirección hexadecimal + if adStr='' then adStr := 'XXXX'; //Error en dirección + if v.typ.IsBitSize then begin + lins.Add(' ' + v.name + ' Db ' + adStr); + end else if v.typ.IsByteSize then begin + lins.Add(' ' + v.name + ' DB ' + adStr); + end else if v.typ.IsWordSize then begin + lins.Add(' ' + v.name + ' DW ' + adStr); + end else begin + lins.Add(' "' + v.name + '"->' + adStr); + end; + end; + dvtEQU: begin; + if ExcUnused and (v.nCalled = 0) then continue; + if v.nCalled = 0 then subUsed := '; ' else subUsed := ''; + if v.typ.IsBitSize then begin + lins.Add('#define ' + v.name + ' ' + AdrStr(v.addr) + ',' + + IntToStr(v.adrBit.bit)+ subUsed); + end else if v.typ.IsByteSize then begin + lins.Add(v.name + ' EQU ' + AdrStr(v.addr)+ subUsed); + end else if v.typ.IsWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + end else if v.typ.IsDWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + lins.Add(v.name+'@2' + ' EQU ' + AdrStr(v.addrE)+ subUsed); + lins.Add(v.name+'@3' + ' EQU ' + AdrStr(v.addrU)+ subUsed); + end else begin + lins.Add('"' + v.name + '"->' + AdrStr(v.addr) + subUsed); + end; + end; + end; + end; + //Reporte de registros de trabajo, auxiliares y de pila + if (listRegAux.Count>0) or (listRegAuxBit.Count>0) then begin + lins.Add(';------ Work and Aux. Registers ------'); + for reg in listRegAux do begin + if not reg.assigned then continue; //puede haber registros de trabajo no asignados + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegAuxBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; + if (listRegStk.Count>0) or (listRegStkBit.Count>0) then begin + lins.Add(';------ Stack Registers ------'); + for reg in listRegStk do begin + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegStkBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define ' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; +// lins.Add(';-------------------------'); +end; +procedure TCompiler_PIC16.DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); +begin + pic.DumpCode(lins, incAdrr, incCom, incVarNam); +end; +function TCompiler_PIC16.RAMusedStr: string; +var + usedRAM, totRAM: Word; +begin + totRAM := pic.TotalMemRAM; + if totRAM=0 then exit; //protección + usedRAM := pic.UsedMemRAM; + Result := MSG_RAM_USED + IntToStr(usedRAM) +'/'+ IntToStr(totRAM) + 'B (' + + FloatToStrF(100*usedRAM/totRAM, ffGeneral, 1, 3) + '%)'; +end; +function TCompiler_PIC16.FLASHusedStr: string; +var + totROM: Integer; + usedROM: Word; +begin + totROM := pic.MaxFlash; + usedROM := pic.UsedMemFlash; + Result := MSG_FLS_USED + IntToStr(usedROM) +'/'+ IntToStr(totROM) + ' (' + + FloatToStrF(100*usedROM/totROM, ffGeneral, 1, 3) + '%)'; +end; +procedure TCompiler_PIC16.GetResourcesUsed(out ramUse, romUse, stkUse: single); +var + totROM, usedROM: Word; + usedRAM, totRAM: Word; +begin + //Calcula RAM + ramUse := 0; //valor por defecto + totRAM := pic.TotalMemRAM; + if totRAM = 0 then exit; //protección + usedRAM := pic.UsedMemRAM; + ramUse := usedRAM/ totRAM; + //Calcula ROM + romUse:= 0; //valor por defecto + totROM := pic.MaxFlash; + if totROM = 0 then exit; //protección + usedROM := pic.UsedMemFlash; + romUse := usedROM/totROM; + //Calcula STACK + TreeElems.main.UpdateCalledAll; //Debe haberse llenado TreeElems.main.lstCalled + //No considera el anidamiento por interrupciones + stkUse := TreeElems.main.maxNesting/STACK_SIZE; +end; +procedure TCompiler_PIC16.GenerateListReport(lins: TStrings); +{Genera un reporte detallado de la compialción} +var + curInst, opc: TPIC16Inst; + i: word; + OpCodeCoun: array[low(TPIC16Inst)..high(TPIC16Inst)] of integer; + tmpList: TStringList; + txt, OpCode, Times, state: String; + + fun: TxpEleFun; + caller : TxpEleCaller; + called : TxpElement; + exitCall: TxpExitCall; +begin + //////////////////////////////////////////////////////////// + //////////// Reporte de uso de memeoria /////////// + //////////////////////////////////////////////////////////// + lins.Add(RAMusedStr); + lins.Add(FLASHusedStr); + //////////////////////////////////////////////////////////// + //////////// Reporte de cuenta de instrucciones /////////// + //////////////////////////////////////////////////////////// + //Limpia contadores + for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin + OpCodeCoun[opc] := 0; + end; + //Cuenta apariciones + for i:=0 to high(pic.flash) do begin + if pic.flash[i].used then begin + pic.PC.W := i; + curInst := pic.CurInstruction; + Inc(OpCodeCoun[curInst]); //Acumula + end; + end; + //Carga en lista para ordenar + tmpList:= TStringList.Create; + for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin + tmpList.Add(Format('%.4d', [OpCodeCoun[Opc]]) + '-' + PIC16InstName[opc]); + end; + tmpList.Sort; //Ordena + //Muestra lista ordenada + lins.Add(';INSTRUCTION COUNTER'); + lins.Add(';==================='); + for i:=tmpList.Count-1 downto 0 do begin + txt := tmpList[i]; + OpCode := copy(txt , 6, 10); + Times := copy(txt , 1, 4); + if Times = '0000' then continue; + lins.Add(copy(OpCode + ' ',1,7) + '->'+ Times); + end; + tmpList.Destroy; + + //////////////////////////////////////////////////////////// + ////////////////// Reporte de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE LIST'); + lins.Add(';==================='); + + lins.Add(';NAME USED POSIITON IN SOURCE'); + lins.Add(';----------------------- ------ -------------------------------'); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + if fun.nCalled = 0 then + state := 'Unused' + else + state := RightStr(' '+IntToStr(fun.nCalled)+ '', 6); + + lins.Add( copy(fun.name + space(24) , 1, 24) + ' ' + + state + ' ' + + fun.srcDec.RowColString + ':' + fun.srcDec.fil + ); + end; + end; + + //////////////////////////////////////////////////////////// + ////////////////// Detalle de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE DETAIL'); + lins.Add(';==================='); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + lins.Add('------------------------------------'); + lins.Add('----- PROCEDURE ' + fun.name); + lins.Add('------------------------------------'); + lins.Add(' Caller Procedures:'); + if fun.lstCallers .Count = 0 then begin + lins.Add(' '); + end else begin + for caller in fun.lstCallers do begin + lins.Add(' - ' + caller.caller.Parent.name); + end; + end; + lins.Add(''); + + lins.Add(' Called Procedures:'); + if fun.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' All Called Procedures:'); + if fun.lstCalledAll.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalledAll do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' Exit Instruction Calls:'); + if fun.lstExitCalls.Count = 0 then begin + lins.Add(' '); + end else begin + for exitCall in fun.lstExitCalls do begin + lins.Add(' - Exit() in ' +exitCall.srcPos.RowColString); + end; + end; + lins.Add(''); + + end; + end; + //Detalles del programa principal + + lins.Add('------------------------------------'); + lins.Add('----- Main Program'); + lins.Add('------------------------------------'); + lins.Add(' Called Procedures:'); + if TreeElems.main.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in TreeElems.main.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + //Muestra el máximo nivel de anidamiento. + lins.Add('Max. Nesting = ' + IntToSTr(TreeElems.main.maxNesting)); + +end; +constructor TCompiler_PIC16.Create; +begin + // hexFile := 'output.hex'; + inherited Create; + cIn.OnNewLine:=@cInNewLine; + mode := modPicPas; //Por defecto en sintaxis nueva + StartSyntax; //Debe hacerse solo una vez al inicio +end; +destructor TCompiler_PIC16.Destroy; +begin + inherited Destroy; +end; + +initialization + +finalization + +end. +//2645 diff --git a/Source/Compiler_PIC17.pas b/Source/Compiler_PIC17.pas new file mode 100644 index 00000000..fea6b40f --- /dev/null +++ b/Source/Compiler_PIC17.pas @@ -0,0 +1,624 @@ +{Unidad con rutinas del analizador sintáctico. +} +unit Compiler_PIC17; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, lclProc, SynEditHighlighter, MisUtils, XpresBas, + XpresTypesPIC, XpresElementsPIC, Pic17Utils, Pic17Devices, CompBase, + ParserDirec, GenCodBas_PIC17, GenCod_PIC17, ParserDirec_PIC17, Globales, + FormConfig, CompOperands {Por diseño, parecería que GenCodBas, no debería accederse desde aquí}; +type + { TCompiler } + TCompiler_PIC17 = class(TParserDirec) + private //Funciones básicas + procedure cInNewLine(lin: string); + private //Compilación de secciones + procedure CompileLinkProgram; + public + procedure Compile(NombArc: string; Link: boolean = true); override; + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); override; //uso de memoria RAM + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); override; //uso de la memoria Flash + function RAMusedStr: string; override; + function FLASHusedStr: string; override; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); override; + procedure GenerateListReport(lins: TStrings); override; + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + +procedure SetLanguage; + +implementation +var + ER_NOT_IMPLEM_, ER_IDEN_EXPECT, ER_DUPLIC_IDEN, ER_INVAL_FLOAT: string; + ER_NOTYPDEFNUM, ER_EXP_VAR_IDE, ER_INV_MEMADDR, ER_BIT_VAR_REF: String; + ER_UNKNOWN_ID_: string; + ER_IDE_CON_EXP, ER_NUM_ADD_EXP, ER_IDE_TYP_EXP, ER_SEM_COM_EXP: String; + ER_EQU_COM_EXP, ER_PROG_NAM_EX, ER_COMPIL_PROC, ER_CON_EXP_EXP: String; + ER_FIL_NOFOUND, WA_UNUSED_CON_, WA_UNUSED_VAR_,WA_UNUSED_PRO_: String; + MSG_RAM_USED, MSG_FLS_USED, ER_ARR_SIZ_BIG: String; + ER_INV_ARR_SIZ: String; +//Funciones básicas +procedure SetLanguage; +begin + ParserDirec_PIC17.SetLanguage; + {$I ..\language\tra_Compiler.pas} +end; +procedure TCompiler_PIC17.cInNewLine(lin: string); +//Se pasa a una nueva _Línea en el contexto de entrada +begin + if Config.IncComment then begin + pic.addTopComm(' ;'+trim(lin)); //agrega _Línea al código ensmblador + end; +end; + +procedure TCompiler_PIC17.CompileLinkProgram; +{Genera el código compilado final. Usa la información del árbol de sintaxis, para +ubicar a los diversos elementos que deben compilarse. +Se debe llamar después de compilar con CompileProgram. +Esto es lo más cercano a un enlazador, que hay en PicPas.} + procedure SetInitialBank(fun: TxpEleFun); + {Define el banco de trabajo para compilar correctamente} + var + cal : TxpEleCaller; + begin + if fun.IsInterrupt then begin + //Para ISR, no se genera código de manejo de bancos + fun.iniBnk := 0; //asume siempre 0 + CurrBank := fun.iniBnk; //configura al compilador + exit; + end; + if SetProIniBnk then begin + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + end else begin + //Se debe deducir el banco inicial de la función + //Explora los bancos desde donde se llama + if fun.lstCallers.Count = 1 then begin + //Solo es llamado una vez + fun.iniBnk := fun.lstCallers[0].curBnk; + CurrBank := fun.iniBnk; //configura al compilador + end else begin + fun.iniBnk := fun.lstCallers[0].curBnk; //banco de la primera llamada + //Hay varias llamadas + for cal in fun.lstCallers do begin + if fun.iniBnk <> cal.curBnk then begin + //Hay llamadas desde varios bancos. + _BANKRESET; //Se debe forzar a iniciar en el banco O + fun.iniBnk := 0; //graba + exit; + end; + end; + //Todas las llamadas son del mismo banco + CurrBank := fun.iniBnk; //configura al compilador + end; + end; + end; +var + elem : TxpElement; + bod : TxpEleBody; + xvar : TxpEleVar; + fun : TxpEleFun; + iniMain, i: integer; + add: Word; +begin + ExprLevel := 0; + pic.ClearMemFlash; + callResetFlashAndRAM; + ClearError; + pic.MsjError := ''; + //Verifica las constantes usadas. Solo en el nodo principal, para no sobrecargar mensajes. + for elem in TreeElems.main.elements do if elem.idClass = eltCons then begin + if elem.nCalled = 0 then begin + GenWarnPos(WA_UNUSED_CON_, [elem.name], elem.srcDec); + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + RefreshAllElementLists; + RemoveUnusedFunc; //Se debe empezar con las funciones + RemoveUnusedVars; //Luego las variables + RemoveUnusedCons; + RemoveUnusedTypes; + UpdateFunLstCalled; //Actualiza lista "lstCalled" de las funciones usadas + if HayError then exit; + SeparateUsedFunctions; + //Asigna memoria, primero a las variables locales (y parámetros) de las funciones + CreateLocalVarsAndPars; + /////////////////////////////////////////////////////////////////////////////// + //Reserva espacio para las variables (Que no son de funciones). + for xvar in TreeElems.AllVars do begin + if xvar.Parent.idClass = eltFunc then continue; //Las variables de funciones ya se crearon + + if xvar.nCalled>0 then begin + //Asigna una dirección válida para esta variable + AssignRAMtoVar(xvar); + if HayError then exit; + end else begin + //Variable no usada + xvar.ResetAddress; + if xvar.Parent = TreeElems.main then begin + //Genera mensaje solo para variables del programa principal. + GenWarnPos(WA_UNUSED_VAR_, [xVar.name], xvar.srcDec); + end; + end; + end; + pic.iFlash:= 0; //inicia puntero a Flash + _GOTO_PEND(iniMain); //instrucción de salto inicial + //Codifica la función INTERRUPT, si existe + if interruptFunct<>nil then begin; + fun := interruptFunct; + //Compila la función en la dirección 0x04 + pic.iFlash := $04; + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + cIn.PosAct := fun.posCtx; //Posiciona escáner + PutLabel('__'+fun.name); + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + SetInitialBank(fun); //Configura manejo de bancos RAM + callCompileProcBody(fun); + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + if HayError then exit; //Puede haber error + end; + //Codifica las subrutinas usadas + for fun in usedFuncs do begin + if fun.IsInterrupt then continue; +//debugln('---Función usada: ' + fun.name); + {According the method we use to add callers (See TCompilerBase.AddCallerTo() ), + condition "fun.nCalled>0" ensure we have here the first ocurrence of a function. So + it can be: + - A common function/procedure in the main program. + - A INTERFACE function. + - A private IMPLEMENTATION function (without previous declaration). + } + //Compile used function in the current address. + fun.adrr := pic.iFlash; //Actualiza la dirección final + fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios + PutLabel('__'+fun.name); + cIn.PosAct := fun.posCtx; //Posiciona escáner + if fun.compile<>nil then begin + //Is system function. Has not body. + fun.compile(fun); //codifica + end else begin + //Is a common function with body. + TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación + callCompileProcBody(fun); + if HayError then exit; //Puede haber error + if pic.MsjError<>'' then begin //Error en el mismo PIC + GenError(pic.MsjError); + exit; + end; + TreeElems.CloseElement; //cierra el body + TreeElems.CloseElement; //cierra la función + end; + fun.linked := true; //Marca como ya enlazada + //Verifica si hace falta completar llamadas + if fun.nAddresPend>0 then begin + //Hay llamadas pendientes qie completar a esta función + for i:=0 to fun.nAddresPend -1 do begin + debugln('Completando lllamadas pendientes a %s en %d', [fun.name, fun.addrsPend[i]]); + //Completa la instrucción JSR $0000 + add := fun.addrsPend[i]; + pic.ram[add].value := fun.adrr and $ff; + pic.ram[add+1].value := (fun.adrr >> 8) and $ff; + end; + end; + end; + for fun in unusedFuncs do begin + //Esta función no se usa. + if fun.Parent = TreeElems.main then begin + //Genera mensaje solo para funciones del programa principal. + GenWarnPos(WA_UNUSED_PRO_, [fun.name], fun.srcDec); + end; + end; + + + + + + //Compila cuerpo del programa principal + pic.codGotoAt(iniMain, _PC); //termina de codificar el salto + bod := TreeElems.BodyNode; //lee Nodo del cuerpo principal + if bod = nil then begin + GenError('Body program not found.'); + exit; + end; + bod.adrr := pic.iFlash; //guarda la dirección de codificación +// bod.nCalled := 1; //actualiza + cIn.PosAct := bod.posCtx; //ubica escaner + PutLabel('__main_program__'); + TreeElems.OpenElement(bod); + CurrBank := 0; //Se limpia, porque pudo haber cambiado con la compilación de procedimientos + CompileCurBlock; + TreeElems.CloseElement; //cierra el cuerpo principal + PutLabel('__end_program__'); + {No es necesario hacer más validaciones, porque ya se hicieron en la primera pasada} + _SLEEP(); //agrega instrucción final + if pic.MsjError<>'' then begin //Puede ser error al escribir la última instrucción + GenError(pic.MsjError); + exit; + end; +end; +procedure TCompiler_PIC17.Compile(NombArc: string; Link: boolean); +//Compila el contenido de un archivo. +var + p: SizeInt; +begin + DefCompiler; {Se crean los tipos de sistema, siempre, porque se pudo haber modificado + su definición, cuandos se definen tipos del usuario, como en el caso de + los punteros, que agregan operaciones a los word.} + mode := modPicPas; //Por defecto en sintaxis nueva + mainFile := NombArc; + hexfile := ChangeFileExt(NombArc, '.hex'); //Obtiene nombre + hexfile := hexFilePath; //Expande nombre si es necesario + //se pone en un "try" para capturar errores y para tener un punto salida de salida + //único + if ejecProg then begin + GenError(ER_COMPIL_PROC); + exit; //sale directamente + end; + try + ejecProg := true; //marca bandera + ClearError; + //Genera instrucciones de inicio + cIn.ClearAll; //elimina todos los Contextos de entrada + //Compila el texto indicado + if not OpenContextFrom(NombArc) then begin + //No lo encuentra + GenError(ER_FIL_NOFOUND, [NombArc]); + exit; + end; + {-------------------------------------------------} + TreeElems.Clear; + //Asigna nombre y archivo a elemento + TreeElems.main.name := ExtractFileName(mainFile); + p := pos('.',TreeElems.main.name); + if p <> 0 then TreeElems.main.name := copy(TreeElems.main.name, 1, p-1); + TreeElems.main.srcDec.fil := mainFile; + //Continúa con preparación + TreeDirec.Clear; + TreeElems.OnAddElement := @Tree_AddElement; //Se va a modificar el árbol + listFunSys.Clear; + FirstPass := true; + CreateSystemElements; //Crea los elementos del sistema + ClearMacros; //Limpia las macros + //Inicia PIC + ExprLevel := 0; //inicia + GetHardwareInfo(pic, 'DEFAULT'); //configura modelo por defecto + pic.ClearMemFlash; + callResetFlashAndRAM; {Realmente lo que importa aquí sería limpiar solo la RAM, porque + cada procedimiento, reiniciará el puntero de FLASH} + //Compila el archivo actual como programa o como unidad + if IsUnit then begin + CompiledUnit := true; + //Hay que compilar una unidad + consoleTickStart; +// debugln('*** Compiling unit: Pass 1.'); + CompileUnit(TreeElems.main); + + consoleTickCount('** First Pass.'); + end else begin + //Debe ser un programa + CompiledUnit := false; + {Se hace una primera pasada para ver, a modo de exploración, para ver qué + procedimientos, y variables son realmente usados, de modo que solo estos, serán + codificados en la segunda pasada. Así evitamos incluir, código innecesario.} + consoleTickStart; +// debugln('*** Compiling program: Pass 1.'); + pic.iFlash := 0; //dirección de inicio del código principal + CompileProgram; //puede dar error + if HayError then exit; + consoleTickCount('** First Pass.'); + if Link then begin //El enlazado solo es válido para programas + {Compila solo los procedimientos usados, leyendo la información del árbol de sintaxis, + que debe haber sido actualizado en la primera pasada.} + FirstPass := false; + CompileLinkProgram; + consoleTickCount('** Second Pass.'); + //Genera archivo hexa, en la misma ruta del programa + pic.GenHex(hexFile, ConfigWord); //CONFIG_NULL; + end; + end; + {-------------------------------------------------} + cIn.ClearAll;//es necesario por dejar limpio + finally + ejecProg := false; + //Tareas de finalización + if OnAfterCompile<>nil then OnAfterCompile; + end; +end; +function AdrStr(absAdr: word): string; +{formatea una dirección en cadena.} +begin + Result := '0x' + IntToHex(AbsAdr, 3); +end; +procedure TCompiler_PIC17.RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); +{Devuelve una cadena con información sobre el uso de la memoria.} +var + adStr: String; + v: TxpEleVar; + nam, subUsed: string; + reg: TPicRegister; + rbit: TPicRegisterBit; +begin + for v in TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. + case varDecType of + dvtDBDb: begin + if ExcUnused and (v.nCalled = 0) then continue; + adStr := v.AddrString; //dirección hexadecimal + if adStr='' then adStr := 'XXXX'; //Error en dirección + if v.typ.IsBitSize then begin + lins.Add(' ' + v.name + ' Db ' + adStr); + end else if v.typ.IsByteSize then begin + lins.Add(' ' + v.name + ' DB ' + adStr); + end else if v.typ.IsWordSize then begin + lins.Add(' ' + v.name + ' DW ' + adStr); + end else begin + lins.Add(' "' + v.name + '"->' + adStr); + end; + end; + dvtEQU: begin; + if ExcUnused and (v.nCalled = 0) then continue; + if v.nCalled = 0 then subUsed := '; ' else subUsed := ''; + if v.typ.IsBitSize then begin + lins.Add('#define ' + v.name + ' ' + AdrStr(v.addr) + ',' + + IntToStr(v.adrBit.bit)+ subUsed); + end else if v.typ.IsByteSize then begin + lins.Add(v.name + ' EQU ' + AdrStr(v.addr)+ subUsed); + end else if v.typ.IsWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + end else if v.typ.IsDWordSize then begin + lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); + lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); + lins.Add(v.name+'@2' + ' EQU ' + AdrStr(v.addrE)+ subUsed); + lins.Add(v.name+'@3' + ' EQU ' + AdrStr(v.addrU)+ subUsed); + end else begin + lins.Add('"' + v.name + '"->' + AdrStr(v.addr) + subUsed); + end; + end; + end; + end; + //Reporte de registros de trabajo, auxiliares y de pila + if (listRegAux.Count>0) or (listRegAuxBit.Count>0) then begin + lins.Add(';------ Work and Aux. Registers ------'); + for reg in listRegAux do begin + if not reg.assigned then continue; //puede haber registros de trabajo no asignados + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegAuxBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; + if (listRegStk.Count>0) or (listRegStkBit.Count>0) then begin + lins.Add(';------ Stack Registers ------'); + for reg in listRegStk do begin + nam := pic.NameRAM(reg.addr); //debería tener nombre + adStr := '0x' + IntToHex(reg.addr, 3); + lins.Add(nam + ' EQU ' + adStr); + end; + for rbit in listRegStkBit do begin + nam := pic.NameRAMbit(rbit.addr, rbit.bit); //debería tener nombre + adStr := '0x' + IntToHex(rbit.addr, 3); + lins.Add('#define ' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); + end; + end; +// lins.Add(';-------------------------'); +end; +procedure TCompiler_PIC17.DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); +begin + pic.DumpCode(lins, incAdrr, incCom, incVarNam); +end; +function TCompiler_PIC17.RAMusedStr: string; +var + usedRAM, totRAM: Word; +begin + totRAM := pic.TotalMemRAM; + if totRAM=0 then exit; //protección + usedRAM := pic.UsedMemRAM; + Result := MSG_RAM_USED + IntToStr(usedRAM) +'/'+ IntToStr(totRAM) + 'B (' + + FloatToStrF(100*usedRAM/totRAM, ffGeneral, 1, 3) + '%)'; +end; +function TCompiler_PIC17.FLASHusedStr: string; +var + totROM: Integer; + usedROM: Word; +begin + totROM := pic.MaxFlash; + usedROM := pic.UsedMemFlash; + Result := MSG_FLS_USED + IntToStr(usedROM) +'/'+ IntToStr(totROM) + ' (' + + FloatToStrF(100*usedROM/totROM, ffGeneral, 1, 3) + '%)'; +end; +procedure TCompiler_PIC17.GetResourcesUsed(out ramUse, romUse, stkUse: single); +var + totROM, usedROM: Word; + usedRAM, totRAM: Word; +begin + //Calcula RAM + ramUse := 0; //valor por defecto + totRAM := pic.TotalMemRAM; + if totRAM = 0 then exit; //protección + usedRAM := pic.UsedMemRAM; + ramUse := usedRAM/ totRAM; + //Calcula ROM + romUse:= 0; //valor por defecto + totROM := pic.MaxFlash; + if totROM = 0 then exit; //protección + usedROM := pic.UsedMemFlash; + romUse := usedROM/totROM; + //Calcula STACK + TreeElems.main.UpdateCalledAll; //Debe haberse llenado TreeElems.main.lstCalled + //No considera el anidamiento por interrupciones + stkUse := TreeElems.main.maxNesting/STACK_SIZE; +end; +procedure TCompiler_PIC17.GenerateListReport(lins: TStrings); +{Genera un reporte detallado de la compialción} +var + curInst, opc: TPIC17Inst; + i: word; + OpCodeCoun: array[low(TPIC17Inst)..high(TPIC17Inst)] of integer; + tmpList: TStringList; + txt, OpCode, Times, state: String; + + fun: TxpEleFun; + caller : TxpEleCaller; + called : TxpElement; + exitCall: TxpExitCall; +begin + //////////////////////////////////////////////////////////// + //////////// Reporte de uso de memeoria /////////// + //////////////////////////////////////////////////////////// + lins.Add(RAMusedStr); + lins.Add(FLASHusedStr); + //////////////////////////////////////////////////////////// + //////////// Reporte de cuenta de instrucciones /////////// + //////////////////////////////////////////////////////////// + //Limpia contadores + for opc := low(TPIC17Inst) to high(TPIC17Inst) do begin + OpCodeCoun[opc] := 0; + end; + //Cuenta apariciones + for i:=0 to high(pic.flash) do begin + if pic.flash[i].used then begin + pic.PC.W := i; + curInst := pic.CurInstruction; + Inc(OpCodeCoun[curInst]); //Acumula + end; + end; + //Carga en lista para ordenar + tmpList:= TStringList.Create; + for opc := low(TPIC17Inst) to high(TPIC17Inst) do begin + tmpList.Add(Format('%.4d', [OpCodeCoun[Opc]]) + '-' + PIC17InstName[opc]); + end; + tmpList.Sort; //Ordena + //Muestra lista ordenada + lins.Add(';INSTRUCTION COUNTER'); + lins.Add(';==================='); + for i:=tmpList.Count-1 downto 0 do begin + txt := tmpList[i]; + OpCode := copy(txt , 6, 10); + Times := copy(txt , 1, 4); + if Times = '0000' then continue; + lins.Add(copy(OpCode + ' ',1,7) + '->'+ Times); + end; + tmpList.Destroy; + + //////////////////////////////////////////////////////////// + ////////////////// Reporte de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE LIST'); + lins.Add(';==================='); + + lins.Add(';NAME USED POSIITON IN SOURCE'); + lins.Add(';----------------------- ------ -------------------------------'); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + if fun.nCalled = 0 then + state := 'Unused' + else + state := RightStr(' '+IntToStr(fun.nCalled)+ '', 6); + + lins.Add( copy(fun.name + space(24) , 1, 24) + ' ' + + state + ' ' + + fun.srcDec.RowColString + ':' + fun.srcDec.fil + ); + end; + end; + + //////////////////////////////////////////////////////////// + ////////////////// Detalle de Funciones /////////// + //////////////////////////////////////////////////////////// + lins.Add(''); + lins.Add(';PROCEDURE DETAIL'); + lins.Add(';==================='); + for fun in TreeElems.AllFuncs do begin + if fun.nCalled > 0 then begin + lins.Add('------------------------------------'); + lins.Add('----- PROCEDURE ' + fun.name); + lins.Add('------------------------------------'); + lins.Add(' Caller Procedures:'); + if fun.lstCallers .Count = 0 then begin + lins.Add(' '); + end else begin + for caller in fun.lstCallers do begin + lins.Add(' - ' + caller.caller.Parent.name); + end; + end; + lins.Add(''); + + lins.Add(' Called Procedures:'); + if fun.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' All Called Procedures:'); + if fun.lstCalledAll.Count = 0 then begin + lins.Add(' '); + end else begin + for called in fun.lstCalledAll do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + + lins.Add(' Exit Instruction Calls:'); + if fun.lstExitCalls.Count = 0 then begin + lins.Add(' '); + end else begin + for exitCall in fun.lstExitCalls do begin + lins.Add(' - Exit() in ' +exitCall.srcPos.RowColString); + end; + end; + lins.Add(''); + + end; + end; + //Detalles del programa principal + + lins.Add('------------------------------------'); + lins.Add('----- Main Program'); + lins.Add('------------------------------------'); + lins.Add(' Called Procedures:'); + if TreeElems.main.lstCalled.Count = 0 then begin + lins.Add(' '); + end else begin + for called in TreeElems.main.lstCalled do begin + lins.Add(' - ' + called.name); + end; + end; + lins.Add(''); + //Muestra el máximo nivel de anidamiento. + lins.Add('Max. Nesting = ' + IntToSTr(TreeElems.main.maxNesting)); + +end; +constructor TCompiler_PIC17.Create; +begin + // hexFile := 'output.hex'; + inherited Create; + cIn.OnNewLine:=@cInNewLine; + mode := modPicPas; //Por defecto en sintaxis nueva + StartSyntax; //Debe hacerse solo una vez al inicio +end; +destructor TCompiler_PIC17.Destroy; +begin + inherited Destroy; +end; + +initialization + +finalization + +end. +//2730 diff --git a/Source/FormConfig.lfm b/Source/FormConfig.lfm index 75bae2cc..a7cecc78 100644 --- a/Source/FormConfig.lfm +++ b/Source/FormConfig.lfm @@ -1,27 +1,27 @@ object Config: TConfig - Left = 319 + Left = 295 Height = 380 - Top = 176 - Width = 535 + Top = 165 + Width = 571 BorderStyle = bsDialog Caption = 'Configuración' ClientHeight = 380 - ClientWidth = 535 + ClientWidth = 571 OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter - LCLVersion = '1.6.2.0' + LCLVersion = '2.0.0.4' object Panel1: TPanel Left = 0 Height = 50 Top = 330 - Width = 535 + Width = 571 Align = alBottom ClientHeight = 50 - ClientWidth = 535 + ClientWidth = 571 TabOrder = 0 object BitAplicar: TBitBtn - Left = 296 + Left = 312 Height = 30 Top = 10 Width = 104 @@ -32,7 +32,7 @@ object Config: TConfig TabOrder = 0 end object BitAceptar: TBitBtn - Left = 176 + Left = 192 Height = 30 Top = 10 Width = 96 @@ -42,7 +42,7 @@ object Config: TConfig TabOrder = 1 end object BitCancel: TBitBtn - Left = 416 + Left = 432 Height = 30 Top = 10 Width = 104 @@ -54,10 +54,10 @@ object Config: TConfig end end object PageControl1: TPageControl - Left = 136 + Left = 168 Height = 330 Top = 0 - Width = 399 + Width = 403 ActivePage = tabEnviron Align = alClient ShowTabs = False @@ -66,44 +66,44 @@ object Config: TConfig object tabEnviron: TTabSheet Caption = 'Enviroment' ClientHeight = 322 - ClientWidth = 391 + ClientWidth = 395 object chkLoadLast: TCheckBox Left = 16 Height = 19 - Top = 80 + Top = 64 Width = 122 Caption = 'Load last file edited' TabOrder = 2 end object lblSplitCol: TLabel - Left = 232 + Left = 216 Height = 15 - Top = 184 + Top = 176 Width = 75 Caption = 'Splitters color:' ParentColor = False end object colSplitCol: TColorBox - Left = 232 + Left = 216 Height = 22 - Top = 200 + Top = 192 Width = 122 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbCustomColor] ItemHeight = 16 TabOrder = 6 end object lblPanelCol: TLabel - Left = 232 + Left = 216 Height = 15 - Top = 136 + Top = 128 Width = 69 Caption = 'Panels Color:' ParentColor = False end - object colMessPanPan: TColorBox - Left = 232 + object colPanelsCol: TColorBox + Left = 216 Height = 22 - Top = 152 + Top = 144 Width = 122 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbCustomColor] ItemHeight = 16 @@ -143,18 +143,19 @@ object Config: TConfig Items.Strings = ( 'en - English' 'es - Español' - 'qu - Quechua' 'de - German' 'uk - Ukrainian' 'ru - Russian' + 'fr - French' + 'qu - Quechua' ) TabOrder = 0 Text = 'ComboBox1' end object RadioGroup1: TRadioGroup - Left = 13 - Height = 88 - Top = 128 + Left = 8 + Height = 96 + Top = 118 Width = 180 AutoFill = True Caption = 'Toolbar' @@ -165,7 +166,7 @@ object Config: TConfig ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 68 + ClientHeight = 76 ClientWidth = 176 Items.Strings = ( 'Small Icons' @@ -176,7 +177,7 @@ object Config: TConfig object Label1: TLabel Left = 16 Height = 15 - Top = 240 + Top = 256 Width = 57 Caption = 'Units Path:' ParentColor = False @@ -184,7 +185,7 @@ object Config: TConfig object Edit1: TEdit Left = 13 Height = 23 - Top = 256 + Top = 272 Width = 296 Enabled = False TabOrder = 7 @@ -207,11 +208,29 @@ object Config: TConfig Caption = 'CreateTheme:' ParentColor = False end + object lblSplitCol1: TLabel + Left = 216 + Height = 15 + Top = 224 + Width = 89 + Caption = 'Panel Text Color:' + ParentColor = False + end + object colPanTextCol: TColorBox + Left = 216 + Height = 22 + Top = 240 + Width = 122 + DefaultColorColor = clGray + Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbCustomColor] + ItemHeight = 16 + TabOrder = 8 + end end object tabCodeExp: TTabSheet Caption = 'tabCodeExp' ClientHeight = 322 - ClientWidth = 391 + ClientWidth = 395 object colCodExplText: TColorBox Left = 232 Height = 22 @@ -272,7 +291,7 @@ object Config: TConfig object tabMessPan: TTabSheet Caption = 'tabMessPan' ClientHeight = 322 - ClientWidth = 391 + ClientWidth = 395 object colMessPanSel: TColorBox Left = 8 Height = 22 @@ -611,18 +630,17 @@ object Config: TConfig Left = 0 Height = 330 Top = 0 - Width = 136 + Width = 168 Align = alLeft ClientHeight = 330 - ClientWidth = 136 + ClientWidth = 168 TabOrder = 2 object TreeView1: TTreeView Left = 1 Height = 328 Top = 1 - Width = 134 + Width = 166 Align = alClient - DefaultItemHeight = 18 Images = ImageList1 ReadOnly = True ScrollBars = ssAutoBoth diff --git a/Source/FormConfig.pas b/Source/FormConfig.pas index 4c8a5d0b..31800d1e 100644 --- a/Source/FormConfig.pas +++ b/Source/FormConfig.pas @@ -14,16 +14,16 @@ interface //Tipo de Barra de herramientas TStyleToolbar = (stb_SmallIcon, stb_BigIcon); //Tipo de declaración de variables - TVarDecType = (dvtDBDb, //Estilo DB/Db/DW - dvtEQU //Estilo usando macros y EQU - ); + TVarDecType = (dvtDBDb, //Estilo DB/Db/DW + dvtEQU //Estilo usando macros y EQU + ); //Niveles de optimización - TOptimLev = (olvFool, //Nivel básico de optimización - olvSmart //Nivel mayor de optimización - ); - TTreeViewMode = (vmGroups, //Muestra por grupos - vmDeclar, //Muestra en el orden de declaración - vmFileExp //Muestra el explorador de archivos + TOptimLev = (olvFool, //Nivel básico de optimización + olvSmart //Nivel mayor de optimización + ); + TTreeViewMode = (vmGroups, //Muestra por grupos + vmDeclar, //Muestra en el orden de declaración + vmFileExp //Muestra el explorador de archivos ); { TConfig } TConfig = class(TForm) @@ -53,11 +53,12 @@ TConfig = class(TForm) colCodExplText: TColorBox; colMessPanBack: TColorBox; colMessPanErr: TColorBox; - colMessPanPan: TColorBox; + colPanelsCol: TColorBox; colMessPanSel: TColorBox; colMessPanText: TColorBox; colSplitCol: TColorBox; cmbThemes: TComboBox; + colPanTextCol: TColorBox; ComboBox1: TComboBox; Edit1: TEdit; GroupBox1: TGroupBox; @@ -77,6 +78,7 @@ TConfig = class(TForm) lblMessPan4: TLabel; lblPanelCol: TLabel; lblSplitCol: TLabel; + lblSplitCol1: TLabel; PageControl1: TPageControl; Panel1: TPanel; Panel2: TPanel; @@ -119,46 +121,52 @@ TConfig = class(TForm) procedure SetViewStatusbar(AValue: Boolean); procedure SetViewSynTree(AValue: boolean); procedure SetViewToolbar(AValue: boolean); - public //Configuraciones generales - language : string; //Lenguaje - public //Configuraciones de Editor - TipLet : string; //tipo de letra - TamLet : integer; //tamaño de letra - VerBarDesV : boolean; //ver barras de desplazamiento - VerBarDesH : boolean; //ver barras de desplazamiento - TabEdiMode: integer; //Estado de pestañas del editor - AutSynChk : boolean; //Verificación automática de sintaxis - property ViewStatusbar: Boolean read FViewStatusbar write SetViewStatusbar; - property ViewToolbar: boolean read FViewToolbar write SetViewToolbar; - property ViewPanMsg: boolean read FViewPanMsg write SetViewPanMsg; - property ViewPanAssem: boolean read FViewPanAssem write SetViewPanAssem; - property ViewSynTree: boolean read FViewSynTree write SetViewSynTree; public //Configuraciones de entorno + language : string; //Lenguaje + LoadLast : boolean; //Cargar el último archivo editado + + PanelsCol : TColor; //Color de las barras de herramientas + SplitCol : TColor; //Color de separadores + PanTextCol : TColor; //Color del texto mostrado en la barra de herramientas + StateToolbar: TStyleToolbar; - SynTreeWidth: integer; //Ancho del panel del árbol ed sintaxis - viewMode : TTreeViewMode; + SynTreeWidth: integer; //Ancho del panel del árbol ed sintaxis + viewMode : TTreeViewMode; + filesClosed : string; {Lista de archivos cargados. Usado para restaurar los archivos + abiertos al abrir nuevamente el programa.} + compSelected: integer; //Compilador seleccionado actualmente + public //Configuraciones del explorador de código CodExplBack: TColor; CodExplText: TColor; - cexpFiltype : integer; + cexpFiltype: integer; //Tipo de archivo a mostrar + public //Configuraciones del panel de mensaje MessPanBack: TColor; //Color de fondo del panel de mensajes MessPanText: TColor; //Color del texto del panel de mensajes MessPanErr : TColor; //Color del texto de error del panel de mensajes MessPanSel : TColor; //Color del fonde de la selección del panel de mensajes - PanelsCol : TColor; //Color de los panels del Panel de Mensages - SplitterCol: TColor; //Color de separadores - LoadLast : boolean; //Cargar el último archivo editado - filesClosed: string; {Lista de archivos cargados. Usado para restaurar los archivos - abiertos al abrir nuevamente el programa.} + public //Configuraciones de Editor + TipLet : string; //tipo de letra + TamLet : integer; //tamaño de letra + VerBarDesV : boolean; //ver barras de desplazamiento + VerBarDesH : boolean; //ver barras de desplazamiento + TabEdiMode : integer; //Estado de pestañas del editor + AutSynChk : boolean; //Verificación automática de sintaxis + public //Configruaciones del menú "Ver" + property ViewPanMsg : boolean read FViewPanMsg write SetViewPanMsg; + property ViewToolbar : boolean read FViewToolbar write SetViewToolbar; + property ViewStatusbar: Boolean read FViewStatusbar write SetViewStatusbar; + property ViewSynTree : boolean read FViewSynTree write SetViewSynTree; + property ViewPanAssem : boolean read FViewPanAssem write SetViewPanAssem; public //Configuraciones para ensamblador - IncHeadMpu: boolean; //Incluye encabezado con información del MPU - IncVarDec : boolean; //Incluye declaración de varaibles - VarDecType: TVarDecType; //tipo de declaración de variables - IncAddress: boolean; //Incluye dirección física en el código desensamblado - IncComment: boolean; //Incluye comentarios en el código desensamblado + IncHeadMpu : boolean; //Incluye encabezado con información del MPU + IncVarDec : boolean; //Incluye declaración de varaibles + VarDecType : TVarDecType; //tipo de declaración de variables + IncAddress : boolean; //Incluye dirección física en el código desensamblado + IncComment : boolean; //Incluye comentarios en el código desensamblado IncComment2: boolean; //Incluye comentarios detallados en el código desensamblado - ExcUnused : boolean; //Excluye declaración de variables no usadas - IncVarName: boolean; //Reemplaza dirección con etiqueta de variables - //Configuracions del compilador + ExcUnused : boolean; //Excluye declaración de variables no usadas + IncVarName : boolean; //Reemplaza dirección con etiqueta de variables + public //Configuracions del compilador ShowErMsg : boolean; OptimLev : TOptimLev; OptBnkAftIF : boolean; @@ -251,7 +259,7 @@ procedure TConfig.FillTree; //Lee lista de temas cmbThemes.Items.Clear; cmbThemes.Items.Add(LABEL_THEM_NONE); - Hay := FindFirst(rutThemes + DirectorySeparator + '*.theme',faAnyFile - faDirectory, SR) = 0; + Hay := FindFirst(patThemes + DirectorySeparator + '*.theme',faAnyFile - faDirectory, SR) = 0; while Hay do begin //Encontró archivo, lee sus extensiones cmbThemes.Items.Add(ExtractFileNameWithoutExt(SR.name)); @@ -293,7 +301,7 @@ procedure TConfig.BitAplicarClick(Sender: TObject); begin //Verifica primero si hay tema, para cargarlo antes que nada if cmbThemes.ItemIndex > 0 then begin - filTheme := rutThemes + DirectorySeparator + cmbThemes.Text + '.theme'; + filTheme := patThemes + DirectorySeparator + cmbThemes.Text + '.theme'; //Lee de archivo, solo las propiedades marcadas con categoría 1. if not cfgFile.FileToPropertiesCat(filTheme, 1) then begin MsgErr(cfgFile.MsjErr); @@ -326,7 +334,7 @@ procedure TConfig.butSaveCurThemClick(Sender: TObject); begin themeName := InputBox('New theme', 'Theme name:', ''); if themeName = '' then exit; - filTem := rutThemes + DirectorySeparator + themeName + '.theme'; + filTem := patThemes + DirectorySeparator + themeName + '.theme'; if FileExists(filTem) then begin if MsgYesNo('Theme exists. Overwrite?') <> 1 then exit; end; @@ -354,20 +362,26 @@ procedure TConfig.Iniciar; begin //Configuraciones de Entorno s:=cfgFile.Asoc_Str ('language' , @language, ComboBox1, 'en - English'); - s:=cfgFile.Asoc_Enum('StateStatusbar', @StateToolbar, SizeOf(TStyleToolbar), RadioGroup1, 1); - s:=cfgFile.Asoc_Bol ('chkLoadLast',@LoadLast , chkLoadLast , true); + s:=cfgFile.Asoc_Bol ('chkLoadLast', @LoadLast , chkLoadLast , true); + s:=cfgFile.Asoc_Enum('StateStatusbar',@StateToolbar, SizeOf(TStyleToolbar), RadioGroup1, 1); s:=cfgFile.Asoc_Str ('filesClosed', @filesClosed, ''); - s:=cfgFile.Asoc_TCol('SplitterCol',@SplitterCol, colSplitCol, clDefault); + s:=cfgFile.Asoc_TCol('SplitterCol', @SplitCol, colSplitCol, clDefault); + s.categ := 1; //marca como propiedad de tipo "Tema" + s:=cfgFile.Asoc_TCol('MessPanPan', @PanelsCol , colPanelsCol , clDefault); s.categ := 1; //marca como propiedad de tipo "Tema" - s:=cfgFile.Asoc_TCol('MessPanPan', @PanelsCol , colMessPanPan , clDefault); + s:=cfgFile.Asoc_TCol('TextPanel' , @PanTextCol , colPanTextCol , clGray); s.categ := 1; //marca como propiedad de tipo "Tema" + s:=cfgFile.Asoc_Enum('viewMode' , @viewMode , SizeOf(TTreeViewMode), 0); + //With no visible controls + s:=cfgFile.Asoc_Int('SynTreeWidth', @SynTreeWidth , 130); + s:=cfgFile.Asoc_Int('compSelected', @compSelected, 1); + + //COnfigruacionesl del menú >Ver s:=cfgFile.Asoc_Bol('VerPanMensaj', @FViewPanMsg , true); + s:=cfgFile.Asoc_Bol('VerBarHerram', @FViewToolbar , true); //Se configura desde el menú >Ver s:=cfgFile.Asoc_Bol('VerStatusbar', @ViewStatusbar, true); - s:=cfgFile.Asoc_Bol('VerBarHerram', @FViewToolbar , true); s:=cfgFile.Asoc_Bol('ViewSynTree', @FViewSynTree , true); - s:=cfgFile.Asoc_Int('SynTreeWidth', @SynTreeWidth , 130); s:=cfgFile.Asoc_Bol('ViewPanAssem', @FViewPanAssem, true); - s:=cfgFile.Asoc_Enum('viewMode', @viewMode , SizeOf(TTreeViewMode), 0); //Configuraciones del Panel de mensajes s:=cfgFile.Asoc_TCol('MessPanBack',@MessPanBack, colMessPanBack, clWindow); s.categ := 1; //marca como propiedad de tipo "Tema" @@ -403,7 +417,7 @@ procedure TConfig.Iniciar; //Configuraciones del Editor-Colores fraCfgSynEdit.Iniciar('Edit', cfgFile); //Configuración del Editor-Sintaxis - fraCfgSyntax.LoadSyntaxFiles(rutSyntax); + fraCfgSyntax.LoadSyntaxFiles(patSyntax); //Configuraciones de Ensamblador cfgFile.Asoc_Bol('IncHeadMpu', @IncHeadMpu , chkIncHeadMpu , false); diff --git a/Source/FormDebugger.lfm b/Source/FormDebugger.lfm index 32e49eee..4042824c 100644 --- a/Source/FormDebugger.lfm +++ b/Source/FormDebugger.lfm @@ -6,9 +6,10 @@ object frmDebugger: TfrmDebugger Caption = 'Debugger' ClientHeight = 690 ClientWidth = 983 + OnClose = FormClose OnCreate = FormCreate OnKeyDown = FormKeyDown - LCLVersion = '1.6.2.0' + LCLVersion = '1.8.0.6' object StatusBar1: TStatusBar Left = 0 Height = 23 @@ -36,56 +37,7 @@ object frmDebugger: TfrmDebugger Top = 274 Width = 277 Align = alLeft - ClientHeight = 393 - ClientWidth = 277 TabOrder = 1 - object Label1: TLabel - Left = 1 - Height = 17 - Top = 1 - Width = 275 - Align = alTop - AutoSize = False - Caption = 'Assembler Code' - Color = clActiveCaption - ParentColor = False - Transparent = False - end - object StringGrid1: TStringGrid - Left = 1 - Height = 374 - Top = 18 - Width = 275 - Align = alClient - ColCount = 3 - FixedRows = 0 - Font.CharSet = ANSI_CHARSET - Font.Height = -12 - Font.Name = 'Courier New' - Font.Pitch = fpFixed - Font.Quality = fqDraft - Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goColSizing, goRowSelect, goSmoothScroll] - ParentFont = False - PopupMenu = PopupMenu1 - RowCount = 8192 - TabOrder = 0 - TitleFont.CharSet = ANSI_CHARSET - TitleFont.Height = -12 - TitleFont.Name = 'Courier New' - TitleFont.Pitch = fpFixed - TitleFont.Quality = fqDraft - ColWidths = ( - 43 - 172 - 138 - ) - Cells = ( - 1 - 1 - 0 - ' ' - ) - end end object Splitter1: TSplitter Left = 277 @@ -171,7 +123,6 @@ object frmDebugger: TfrmDebugger Left = 115 Height = 38 Top = 2 - Width = 8 Caption = 'ToolButton4' Style = tbsSeparator end @@ -311,7 +262,7 @@ object frmDebugger: TfrmDebugger left = 704 top = 320 Bitmap = { - 4C690B0000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + 4C69100000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF @@ -1719,14 +1670,654 @@ object frmDebugger: TfrmDebugger 000000000001000000060000000A000000060000000100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000200000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000A00000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001100000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FF00000028FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FF000000E700000038FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000C000000C3000000FF000000F30000003CFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000004000000AB000000FF000000F30000003CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000004000000AB000000FF000000F30000 + 0054FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000004000000A3000000FF0000 + 00FB00000054FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000008F0000 + 00FF000000FB00000058FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 008F000000FF000000FF00000070FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000007C000000FF000000FF00000070FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000070000000FF000000FF0000007CFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000070000000FF000000FF0000008FFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000058000000FB000000FF0000008FFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000054000000FB000000FF0000 + 009F00000004FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000054000000F70000 + 00FF000000AB00000004FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000003C0000 + 00F3000000FF000000AB00000004FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 003C000000F3000000FF000000C30000000CFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000038000000E7000000FF000000C30000000CFFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000028000000E7000000FF000000FF000000FF000000FF0000 + 00FFFFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000028000000FF000000FF000000FF000000FF0000 + 00FFFFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000FF000000FF000000F7000000FF0000 + 00FFFFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000FF000000FF000000FF000000FF0000 + 00FFFFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000FF000000FF000000FF000000FF0000 + 00FFFFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00000000020000 + 000A000000110000001300000013000000130000001300000013000000130000 + 0013000000130000001300000013000000130000001300000013000000130000 + 0013000000130000001300000013000000130000001300000013000000130000 + 00110000000A0000000200000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000200000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000A00000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001100000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FF00000028FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00000000FF0000 + 00FF000000FF000000FF000000FF000000E700000038FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000C000000C3000000FF000000F30000003CFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000004000000AB000000FF000000F30000003CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000004000000AB000000FF000000F30000 + 0054FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000004000000A3000000FF0000 + 00FB00000054FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000008F0000 + 00FF000000FB00000058FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 008F000000FF000000FF00000070FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000007C000000FF000000FF00000070FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000070000000FF000000FF0000007CFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000070000000FF000000FF0000008FFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000040000000CFFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000058000000FB000000FF0000008FFFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000060000000F700000087FFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000054000000FB000000FF0000 + 009F00000004FFFFFF00FFFFFF0000000048000000FF000000BFFFFFFF00FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000054000000F70000 + 00FF000000AB00000004FFFFFF0000000010000000FF000000F300000004FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000003C0000 + 00F3000000FF000000ABFFFFFF00FFFFFF00000000D3000000FF00000034FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 003C000000F3000000FF0000008FFFFFFF000000009B000000FF00000070FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000038000000E7000000FF0000009F00000062000000FF000000A7FFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000028000000F7000000FF000000B8000000FF000000DFFFFF + FF00FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000640000 + 005400000034000000140000003C000000F3000000FF000000FA000000FF0000 + 0018FFFFFF000000001300000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000EF0000 + 00FF000000FF000000FF000000F3000000DD000000FB000000FF000000FF0000 + 005CFFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000004000000830000 + 00A3000000C3000000E3000000FF000000FF000000FF000000FF000000FF0000 + 0082FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00000000040000002400000044000000730000007DFFFF + FF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00000000020000 + 000A000000110000001300000013000000130000001300000013000000130000 + 0013000000130000001300000013000000130000001300000013000000130000 + 0013000000130000001300000013000000130000001300000013000000130000 + 00110000000A0000000200000000FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000003800000018FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000800000008000000080000000800000008000000080000000800000 + 00800000008000000080000000800000008000000096000000F9000000EB0000 + 0094FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF00000038FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000C0000000FF000000C0000000800000008000000080000000800000 + 0080000000800000008000000080000000800000008000000086000000D90000 + 00FF000000F30000004CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000040000 + 009B000000FF000000FB00000064FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000080000000FF000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000064000000FB000000FF0000009700000004FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF000000004C000000F3000000FF000000AF0000000CFFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000003C000000E7000000FF000000C60000 + 0052FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000028000000DE000000FE0000 + 00F60000003800000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000028000000E9000000FF0000 + 00D70000001800000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000003C000000F3000000FF000000C30000 + 000CFFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000054000000FB000000FF000000AB00000004FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000070000000FF000000FF0000008FFFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000008F000000FF000000FF00000070FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF00000080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000040000 + 00A7000000FF000000FB00000054FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF000000C0000000800000008000000080000000800000 + 0080000000800000008000000080000000800000008000000086000000DF0000 + 00FF000000F300000040FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF0000002CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF0000000080000000FF000000C0000000800000008000000080000000800000 + 0080000000800000008000000080000000800000008000000080000000A40000 + 008EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003333 + 333B33333387333333B9333333EB333333EB333333B9333333873333333B0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000003333330A333333943333 + 33FE333333FF333333FF333333FF333333FF333333FF333333FF333333FE3333 + 33943333330A0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000033333323333333DB333333FF3333 + 33FF333333FB333333CF3333339A3333339A333333CF333333FB333333FF3333 + 33FF333333DB3333332300000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000033333302333333C3333333FF333333FF3333 + 33B93333331E000000000000000000000000000000003333331E333333B93333 + 33FF333333FF333333C333333302000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000003333336F333333FF333333FF333333910000 + 0000000000000000000000000000000000000000000000000000000000003333 + 3391333333FF333333FF3333336F000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000033333306333333F6333333FF333333D4333333070000 + 0000000000000000000000000000000000000000000000000000000000003333 + 3307333333D4333333FF333333F6333333060000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000033333334333333FF333333FF3333334E000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003333334E333333FF333333FF333333340000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000033333369333333FF333333FF33333315000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333315333333FF333333FF333333690000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000033333398333333FF333333E200000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000333333E2333333FF333333980000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000333333A0333333FF333333D800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000333333D8333333FF333333A00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000333333A0333333FF333333D800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000333333D8333333FF333333A00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000333333A0333333FF333333D800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000333333D8333333FF333333A00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000333333A0333333FF333333D800000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000333333D8333333FF333333A00000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003232322E34343476333333CD333333FF333333EA33333378333333783333 + 3378333333783333337833333378333333783333337833333378333333783333 + 337833333378333333EA333333FF333333CD343434763232322E000000000000 + 0000000000000000000000000000000000000000000000000000000000004040 + 4004333333EC333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333EC404040040000 + 0000000000000000000000000000000000000000000000000000000000003030 + 3010333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF303030100000 + 0000000000000000000000000000000000000000000000000000000000003030 + 3010333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF303030100000 + 0000000000000000000000000000000000000000000000000000000000004040 + 4004333333EC333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333EC404040040000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00003232322E3434347633333378333333783333337833333378333333783333 + 3378333333783333337833333378333333783333337833333378333333783333 + 337833333378333333783333337833333378343434763232322E000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000003333334B3333 + 33503131312A000000000000000000000000000000003131312A333333503333 + 334B000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000333333F03333 + 33FF333333880000000000000000000000000000000033333388333333FF3333 + 33F0000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007F7F7F02555555037F7F7F027F7F7F025555 + 550355555503555555037F7F7F027F7F7F025555550355555503555555037F7F + 7F027F7F7F025555550355555503555555037F7F7F027F7F7F02555555035555 + 5503555555037F7F7F027F7F7F025555550355555503555555037F7F7F027F7F + 7F02555555035555550300000000555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F040202027A010101960101019601010197010101970101 + 0197010101960101019601010197010101970101019701010196010101960101 + 01970101019701010197010101960202027A3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04010101CC0404043A0404043A0404043A0404043B0404 + 043B0404043A0404043A0404043A0404043B0404043B0404043A0404043A0404 + 043A0404043B0404043B0404043A010101CD3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04010101CD3F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F04010101CC3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555030606062A02020265020202650202 + 02650202026402020264010101E13F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F04010101E00202026402020264020202650202 + 0265020202650606062A7F7F7F02555555030505052E0202026C0202026C0202 + 026D0202026C0202026C010101E23F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0433333305010101E10202026C0202026C0202026C0202 + 026C0202026D0505052D555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04010101CD3F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F04010101CD3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04010101CC050505320505053205050533050505330505 + 0532050505320505053205050533050505330505053205050532050505320505 + 0533050505330505053205050532010101CD3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04010101800101019E0101019E0101019F0101019F0101 + 019F0101019E0101019E0101019F0101019F0101019F0101019E0101019E0101 + 019F0101019F0101019F0101019E0202027E3F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F04555555037F7F7F023F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F0455555503555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02555555033F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F047F7F7F02000000005555550355555503555555037F7F + 7F027F7F7F025555550355555503555555037F7F7F027F7F7F02555555035555 + 5503555555037F7F7F027F7F7F025555550355555503555555037F7F7F027F7F + 7F025555550355555503555555037F7F7F027F7F7F0255555503555555035555 + 55037F7F7F027F7F7F027F7F7F02 } end object ImageList16: TImageList left = 624 top = 320 Bitmap = { - 4C690B0000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + 4C69100000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0054AB200742A209413FA0056B40A1057141A106534AA61317FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0051A91B073FA0 047B3D9F01EB3C9F00FF3C9F00FF3C9F00FF3C9F00FF3C9F00FB3EA003AB45A3 @@ -2078,255 +2669,169 @@ object frmDebugger: TfrmDebugger A4F000093C540000000100000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010000001100030F400000 0628000000010000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000070000000000000080000000FF000000FF0000 + 000A000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000004000000080000000B30000 + 00C40000000F0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000010000 + 0096000000C80000001500000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00010000008C000000D200000016000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00000000000000000082000000DB0000001C0000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 0000000000000000000000000078000000DE0000002400000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000006A000000E200000029000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000000000000062000000E70000002D0000 + 000000000000000000000000000A000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000005A000000EA0000 + 003700000000000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000004E0000 + 00FF000000FF000000800000000A000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00FF000000FD0000008000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00800000008000000040000000000000000000000000000000070000000A0000 + 000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000 + 000A0000000A0000000700000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000FF000000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000070000000000000080000000FF000000FF0000 + 000A000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000004000000080000000B30000 + 00C40000000F0000000000000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000010000 + 0096000000C80000001500000000000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00010000008C000000D200000016000000000000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 00000000000000000082000000DB0000001C0000000000000000000000000000 + 000000000000000000000000000A000000000000000000000000000000000000 + 0000000000000000000000000078000000DE0000002400000000000000000000 + 000100000003000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000006A000000E200000029000000000000 + 00A800000052000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000000000000062000000E70000002C0000 + 00780000008A000000000000000A000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000005A000000DD0000 + 0067000000C5000000000000000A000000000000000000000000000000000000 + 00000000000000000000000000000000000000000019000000220000005C0000 + 00EA000000F6000000060000000A000000000000000000000000000000000000 + 0000000000000000000000000000000000000000005E000000D9000000F50000 + 00F6000000FF0000003800000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000010000 + 001A0000003C00000000000000000000000000000000000000070000000A0000 + 000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000 + 000A0000000A0000000700000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000020000000400000 + 0040000000400000004000000040000000460000008D00000025000000000000 + 0000000000000000000000000000000000000000000000000070000000EF0000 + 00C0000000C0000000C0000000C0000000C0000000D7000000CA000000130000 + 0000000000000000000000000000000000000000000000000040000000C00000 + 0000000000000000000000000000000000000000000100000086000000D70000 + 0020000000000000000000000000000000000000000000000040000000C00000 + 00000000000000000000000000000000000000000000000000000000006B0000 + 00E2000000300000000000000000000000000000000000000040000000C00000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0053000000E80000006000000000000000000000000000000040000000C00000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0056000000EA0000003F00000000000000000000000000000040000000C00000 + 0000000000000000000000000000000000000000000000000000000000710000 + 00E20000002C0000000000000000000000000000000000000040000000C00000 + 000000000000000000000000000000000000000000010000008D000000D30000 + 001C000000000000000000000000000000000000000000000040000000EF0000 + 00C0000000C0000000C0000000C0000000C0000000D9000000C7000000100000 + 0000000000000000000000000000000000000000000000000020000000700000 + 0040000000400000004000000040000000400000004900000024000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333328323232B0323232E8323232E8323232B033333328000000000000 + 0000000000000000000000000000000000000000000000000000000000003434 + 343A323232F6323232B43232325A3232325A323232B4323232F63434343A0000 + 0000000000000000000000000000000000000000000000000000000000023232 + 32D93232329B000000000000000000000000000000003232329B323232D90000 + 0002000000000000000000000000000000000000000000000000343434273333 + 33FF323232190000000000000000000000000000000032323219333333FF3434 + 34270000000000000000000000000000000000000000000000003434344E3333 + 33EE000000000000000000000000000000000000000000000000333333EE3434 + 344E000000000000000000000000000000000000000000000000333333503232 + 32EC000000000000000000000000000000000000000000000000323232EC3333 + 335000000000000000000000000000000000000000002A2A2A0C323232793333 + 33F03333333C3333333C3333333C3333333C3333333C3333333C333333F03232 + 32792A2A2A0C0000000000000000000000000000000033333380333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF333333800000000000000000000000000000000033333380333333FF3333 + 33FF333333FF333333FF333333FF333333FF333333FF333333FF333333FF3333 + 33FF33333380000000000000000000000000000000002A2A2A0C3333333C3333 + 333C3333334F3232325A3333333C3333333C3232325A3333334F3333333C3333 + 333C2A2A2A0C0000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000033333378323232C40000000000000000323232C433333378000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF003F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F04FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F04FFFFFF003F3F3F043F3F3F040202027A0101 + 0196010101960101019601010197010101970101019701010197010101970101 + 01960202027A3F3F3F043F3F3F04FFFFFF003F3F3F043F3F3F04010101CC0404 + 043A0404043A0404043A0404043A0404043B0404043B0404043B0404043B0404 + 043A010101CD3F3F3F043F3F3F04FFFFFF000202026402020264010101E13F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F04010101E00202026402020264FFFFFF000202026C0202026C010101E23F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043333 + 3305010101E10202026C0202026CFFFFFF003F3F3F043F3F3F04010101CC0505 + 0532050505320505053205050533050505330505053205050533050505320505 + 0532010101CD3F3F3F043F3F3F04FFFFFF003F3F3F043F3F3F04010101800101 + 019E0101019E0101019E0101019F0101019F0101019F0101019F0101019F0101 + 019E0202027E3F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F + 3F043F3F3F043F3F3F043F3F3F043F3F3F043F3F3F04FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00 } end - object PopupMenu1: TPopupMenu - Images = ImageList16 - OnPopup = PopupMenu1Popup - left = 184 - top = 376 - object mnSetPCHere: TMenuItem - Action = acGenSetPC - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6410074C73B000AFFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C64900B1C64900C1C740 - 0022FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C54900AFC75100FFC64C - 00D9C7420040FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C44900ADC75100FFC751 - 00FFC64D00ECC7440064FFFFFF00FFFFFF00FFFFFF00FFFFFF00B73E003EBB46 - 00A2BB4600A3BC4600A3BC4600A3BD4600A3BE4700A4BF4900D9C04E00FFC04E - 00FFC04E00FFC04C00F9C3440089C8390001FFFFFF00FFFFFF00B43D005AB849 - 00FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB849 - 00FFB84900FFB84900FFB84800FFBD4200ABC43C000FFFFFFF00BC410057CD54 - 00FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD54 - 00FFCD5400FFCD5400FFCD5400FFCD5400FFCA4B00C7C93E001DBF430055D75C - 00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C - 00FFD75C00FFD75C00FFD75C00FFD65A00FECE4D0094C5390002C1450053E164 - 00FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFE164 - 00FFE16400FFE16400FFDD6000F8D04F007AFFFFFF00FFFFFF00BE410014C549 - 0051C6490053C74A0055C74B0057C84B0059C84C005BD35600BFE16400FFE164 - 00FFE16400FFDC5F00EFCD4E0060FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35700A7E16400FFE164 - 00FFDA5D00E2C94B0048FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35600A4E16400FFD75A - 00D4C5490032FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35600A2D45800C3C145 - 001FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C4470069BB3F0010FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } - end - object MenuItem1: TMenuItem - Action = acGenStep - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00E45D01D1ED6606FFEE6503E8F063005CF3670000F3670000F4650000F668 - 0000F7680000F7660000F7640000F9690000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00DD5A00F7F66F09FFF97814FFF06908FFF06300A5F3660024F4660000F668 - 0000F7680000F7660000F7640000F9690000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00D65601F7F46D07FFFF7708FFFC7C16FFF37412FFF06401DDF465005EF668 - 0000F7680000F7660000F7640000F9690000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00CE5000DFE46A11FFFD821EFFFF7306FFFF7B12FFF97F1BFFF26A08FFF564 - 00A2F7680010F7660000F7640000F9690000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00CC500028CC4E01BFDC6C22FFF88D3BFFFF7B16FFFF7A0DFFFC8724FFF675 - 15FFF36502DCF664004AF7640001F9690000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00CD510000CD4F000BCB480077D56018ECEB8B48FFFE8224FFFF760AFFFE8B - 27FFF88423FFF46606F7F65E0095F969000FFFFFFF00FFFFFF00FFFFFF00FFFF - FF00CD510000CD4F0000CD4D0000CE4B0024CF550DC0DE6314FFF96D05FFFF70 - 00FFFF8117FFFDAC60FFF79143FFF76602D0FFFFFF00FFFFFF00FFFFFF00FFFF - FF00A53B0000AC3C0000B33D0000C0460032C74900C9DB5F0BFFFA750FFFFF80 - 1CFFFFBD7DFFFACCA2FFEF843AFFF16100C7FFFFFF00FFFFFF00FFFFFF00FFFF - FF00A53B0000AD3C000DAF340086C14C0BF3E57C2DFFFE9437FFFFB064FFFDD9 - AFFFEDAF7FFFE05D12EFE4510088F0640009FFFFFF00FFFFFF00FFFFFF00FFFF - FF00A3380039A63200C9C45F24FFF2A65EFFFFB86CFFFFD39EFFF6D2AFFFDB7E - 48FFD04902D1DA50003CE6590000F0650000FFFFFF00FFFFFF00FFFFFF00FFFF - FF009F3302E5CD814CFFFDD396FFFFD89EFFFEE4BFFFE5B08CFFC45318FBC443 - 0092D1520009DB560000E6590000F0640000FFFFFF00FFFFFF00FFFFFF00FFFF - FF009A330AF7E3BA88FFFFFED7FFF4D9BEFFC97C56FFB13802D3BA3F004EC548 - 0000D2540000DB560000E6590000F0640000FFFFFF00FFFFFF00FFFFFF00FFFF - FF009A340CF7E1BB9AFFE2C4ACFFAB4A22FFA22B0095B33F0016BB420000C548 - 0000D2540000DB560000E6590000F0640000FFFFFF00FFFFFF00FFFFFF00FFFF - FF009A3505C7A74D25FF9B3611DD9725004FA83B0000B5420000BB410000C548 - 0000D2540000DB560000E6590000F0640000FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } - end - object MenuItem2: TMenuItem - Action = acGenStepIn - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000100000004000000090000000D00000013000000180000001D0000001F0000 - 001E0000001A000000150000000F000000080000000200000000FFFFFF000000 - 000100000004000000090000000F00000014000000190000001C000000222247 - 549E0000001E00000017000000110000000A0000000300000000FFFFFF000000 - 00000000000100000002000000040000000500000006000000072D627B895BC6 - F2FF2E62759E00000006000000040000000200000001FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000001C41573847A5D6EF57C3 - F7FF57BFECFD2A5C6F82FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000043177A5C24CB5F5FF50BB - F6FF54C0F7FF51B3E1F727556869FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001E51798240A7F1FF45ADF4FF4AB3 - F5FF4EB8F5FF52BDF6FF4BA8D5EE234D6050FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00113352352E85D0EE3BA0F2FF3FA5F3FF43AB - F4FF48B0F4FF4CB5F5FF50BBF6FF449CC8E31D415239FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF001032556B1B52868D18466F9D3696E8FF3DA3 - F2FF41A8F3FF43A8EDFF1B425A8C1F4A636616344346FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00133B62613294EEFF369B - F1FF3BA0F2FF3A97DFFD10283A2FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00185392AA2C8DEFFF3093 - F0FF3498F1FF2970ADD5FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000000006FFFFFF00FFFFFF0000000005174072904C95E9FD348DEFFF2A8B - EFFF2E90F0FF1E5990A2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000011 - 2C1422529EDE2259ABB8285DAAB3386FBCDD64A1F1FF6EAAF3FF6CAAF3FF509C - F1FF2A82DFFA11375D5AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000833 - 798D73A3F2FF7CAAF3FF78A9F3FF75A8F3FF73A8F3FF70A8F3FF6EA8F3FF5C9F - F1FF1B477B9BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000102A104374 - C5EA86AFF4FF81ACF4FF7BA8F3FF78A8F3FF75A8F3FF72A7F3FF5798F0FF1348 - 8EBF00000005FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00001F52794F85 - DEFA80ABF4FF87B0F4FF81ACF4FF7CA9F3FF6B9FF1FF4479CAE90A3574810000 - 0007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000011 - 2E2C012C75782456A8B22959A8AD1D4A9597022D727C00123017FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } - end - object MenuItem5: TMenuItem - Action = acGenExecHer - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000008037E - 37FF000000080000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000018048F - 43FF049144FF0000000800000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000020069E - 4EFF60C692FF059948FF00000008000000000000000000000000000000000000 - 000000000000000000030B76385C0C823EA8098F46DF069949FF06A151FF07AA - 59FF5CCA96FF54C68EFF05A14CFF000000080000000000000000000000000000 - 00010B69321D0B7A3A9926A461FD44B97DFF5BC691FF67CD9BFF63CE9BFF5ECE - 99FF57CD95FF50CC92FF48C88AFF05AA51FF0000000800000000000000000000 - 00060B77399C37AF6FFF61C794FF63CC99FF62CD9AFF60CF9AFF5CD09AFF57D0 - 98FF52D096FF4BD092FF43CF8EFF3BCC87FF05B051FF00000008000000030B6C - 34651EA05BFD57C38DFF5AC893FF5BCB96FF5ACE97FF55CF96FF43CE8EFF34CC - 86FF26CB80FF1CCA7BFF15CA78FF0FC670FF06B955FF000000180000000A0A77 - 39B330B270FF4FC58BFF4DC78DFF3AC684FF27C47BFF15C373FF08C46EFF09C8 - 71FF09CB74FF09CD75FF09CC72FF06C55FFF000000500000001800000013078A - 42E537BA79FF2DBB77FF17B96BFF07B660FF07B95EFF07BC5EFF07C466FF09CC - 72FF09D279FF09D376FF06CD63FF0000005800000028000000080000001A0697 - 48FC19B368FF08B260FF0AA955F516713CC512392288000000610000006808D0 - 6DFF0AD779FF07D466FF000000580000002800000008000000000000001D098F - 44E907AF5DFF06B25DFF17743EC0000000450000002D000000230000003807D3 - 66FF07D868FF00000058000000280000000800000000000000000000001A0D78 - 3AC506AF5CFF07B25BFF18482C6E0000001A00000007000000020000002005CD - 5AFF00000058000000280000000800000000000000000000000000000013115C - 318907AA55FE07B35AFF235A3A5E000000080000000000000000000000180000 - 00380000002800000008000000000000000000000000000000000000000A0000 - 003011723AC307B256FF238C4EAD000000080000000000000000000000080000 - 0010000000080000000000000000000000000000000000000000000000030000 - 00170F2F1C58167B41C30DA64DF2000000110000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00060000001C0000003900000035000000120000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } - end - object MenuItem6: TMenuItem - Action = acGenSetBrkPnt - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000000000000FE00B01AFE00B264FF00B180FF00B180FF00B180FF00B180FF00 - B180FF00B180FE00B264FE00B01A00000000000000000000000000000000FF00 - FF01FE00B27CFE00B2F9FF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00 - B2FFFF00B2FFFF00B2FFFE00B2F9FE00B27CFF00FF010000000000000000FE00 - B27CFF00B2FFFF00B2FF900064FF800059FF800059FF84005CFF98006AFFDC00 - 9AFFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFE00B27C00000000FE00B01AFE00 - B2F9FF00B2FFFF00B2FF15000EFF000000FF000000FF000000FF000000FF0100 - 00FF6C004BFFFD00B0FFFF00B2FFFF00B2FFFE00B2F9FE00B01AFE00B264FF00 - B2FFFF00B2FFFF00B2FF480032FF000000FFA40072FFEC00A4FFC10087FF2400 - 19FF000000FF8E0063FFFF00B2FFFF00B2FFFF00B2FFFE00B264FF00B180FF00 - B2FFFF00B2FFFF00B2FF7A0055FF000000FF800059FFFF00B2FFFF00B2FFA000 - 70FF000000FF390028FFFF00B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00 - B2FFFF00B2FFFF00B2FFAE0079FF000000FF4B0034FFEF00A6FFE600A0FF6200 - 44FF000000FF40002CFFFF00B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00 - B2FFFF00B2FFFF00B2FFE1009DFF000000FF000000FF000000FF000000FF0000 - 00FF29001CFFCB008EFFFF00B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00 - B2FFFF00B2FFFF00B2FFFF00B2FF15000EFF000000FF7A0054FF82005BFF2500 - 19FF14000EFFBD0084FFFF00B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00 - B2FFFF00B2FFFF00B2FFFF00B2FF4B0034FF000000FFB2007CFFFF00B2FFDC00 - 99FF000000FF190011FFFA00AEFFFF00B2FFFF00B2FFFF00B180FF00B278FF00 - B2FFFF00B2FFFF00B2FFFF00B2FF7E0057FF000000FF7E0057FFFF00B2FFDC00 - 9AFF000000FF000000FFE4009FFFFF00B2FFFF00B2FFFF00B278FE00B142FF00 - B2FFFF00B2FFFF00B2FFFF00B2FFB2007CFF000000FF060004FF10000BFF0000 - 00FF000000FF2D001FFFFD00B0FFFF00B2FFFF00B2FFFE00B142FF00FF02FE00 - B1CDFF00B2FFFF00B2FFFF00B2FFF700ACFF720050FF600042FF600043FF7400 - 51FF98006AFFF100A8FFFF00B2FFFF00B2FFFE00B1CDFF00FF0200000000FE00 - AE26FE00B1E4FF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00 - B2FFFF00B2FFFF00B2FFFF00B2FFFE00B1E4FE00AE2600000000000000000000 - 0000FE00B615FE00B292FE00B2E2FF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00 - B2FFFF00B2FFFE00B2E2FE00B292FE00B6150000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } - end - object MenuItem4: TMenuItem - Caption = '-' - end - object MenuItem8: TMenuItem - Action = acGenAddWatch - end - object MenuItem3: TMenuItem - Action = acGenReset - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 00000000000000000000AA550006BC560050C4670894CB7925B2CA751EA9BF5F - 0380BA5A002DFF00000100000000000000000000000000000000000000000000 - 000000000000BD5A005DD18738E2E7AF69FFEDBB78FFEDB770FFEDB872FFEDBA - 77FFDFA057FFCA741FB4C35A002200000000000000000000000000000000FF00 - 0001C2650B83E2A35AFFECB266FFECAC5EFFECB46AFFEDB874FFEDB771FFECB0 - 64FFECAC5CFFECB670FFD58A3BE5C05D0029000000000000000000000000BD59 - 005EE2A45DFFECAE5EFFEDB368FFE0A155FFD08030C2C66D109AC97017A1D389 - 3BE6E8B16AFFECAC5DFFEDB56EFFD18530E2BF66001400000000AA550006D488 - 39E2EDB66DFFEDB56BFFD99040E5C15C003AFFFF00010000000000000000D47F - 0006C4690D88E4AA60FFEDB061FFEBB876FFC4670F8300000000BD570055E8B5 - 72FFEDB56AFFDFA359FFC25C0037000000000000000000000000000000000000 - 0000FF7F0002C76D15A6EDBA78FFEDB86EFFD69045EED4550006C56A0F97EDC4 - 85FFEDBE7AFFD38232C0FFFF0001000000000000000000000000000000000000 - 000000000000C35A0022DDA056FFEDBA72FFE3AB67FFBB590039CE7E2BB4EDC4 - 84FFEDC688FFC466079000000000000000000000000000000000000000000000 - 000000000000FFFF0001D69049F3EDBF7AFFEABA7AFFBD550056CE7B29AEEDC8 - 8AFFEDC88CFFC870199E00000000000000000000000000000000BC5B046FBB50 - 002600000000CC660005D5954CFCEDC27FFFE9B878FFBB57004FC0620582EDCA - 90FFEDC787FFD68F42E5CC660005000000000000000000000000D2965AFFD591 - 47E4C7630629C3610044E6B573FFEDC683FFDEA760FFBD570023BD5C002FE1AD - 6BFFEDCA89FFE9C286FFC56A0E780000000000000000FFFF0001D49754FFEDD0 - 99FFD99549E6D58A39DEEDCD91FFEDCD90FFD3883CCEFFFF0001FFFF0001CF7C - 27B0EDD099FFEDCE98FFCA7424D20000000100000000FFFF0001D59854FFEDCD - 8EFFEDCE90FFEDC889FFEDCE90FFE6BA7CFFC05E03510000000000000000C45E - 0723D49047E5CD7B28D7C16500190000000000000000FFFF0001D59955FFEDD0 - 92FFEDCE8BFFEDD08FFFEDC88CFFD1812C99FFFFFF0100000000000000000000 - 0000BB500013BF7F0004000000000000000000000000FFFF0001D69A56FFEDD4 - 98FFEDD290FFEDD292FFEDD59BFFDA984DE6C7630C2900000000000000000000 - 00000000000000000000000000000000000000000000CC660005D69C57FFEDD8 - A2FFEDD69CFFEDD69CFFEDD89EFFEDD9A6FFD69449E4BB570026000000000000 - 0000000000000000000000000000000000000000000000000000C77832E5D49A - 58FFD69B57FFD69B56FFD69C57FFD49A59FFD2985BFFBA540069 - } - end - end object Timer1: TTimer Enabled = False OnTimer = Timer1Timer @@ -2340,4 +2845,10 @@ object frmDebugger: TfrmDebugger Action = acGenClearCC end end + object Timer2: TTimer + Enabled = False + OnTimer = Timer2Timer + left = 168 + top = 120 + end end diff --git a/Source/FormDebugger.pas b/Source/FormDebugger.pas index 4b0e00b3..11d1d9b8 100644 --- a/Source/FormDebugger.pas +++ b/Source/FormDebugger.pas @@ -2,10 +2,10 @@ {$mode objfpc}{$H+} interface uses - Classes, SysUtils, Types, FileUtil, Forms, Controls, Graphics, Dialogs, - ComCtrls, ExtCtrls, StdCtrls, Grids, ActnList, Menus, LCLType, Parser, + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + ComCtrls, ExtCtrls, StdCtrls, Grids, ActnList, Menus, LCLType, CompBase, FrameRamExplorer, FrameRomExplorer, FramePicRegisters, FrameRegWatcher, - Pic16Utils, MisUtils, FramePICDiagram; + Pic16Utils, PicCore, MisUtils, FramePICDiagram, FramePicAsm; type { TfrmDebugger } TfrmDebugger = class(TForm) @@ -23,17 +23,8 @@ TfrmDebugger = class(TForm) Image1: TImage; ImageList32: TImageList; ImageList16: TImageList; - Label1: TLabel; lstMessages: TListBox; - MenuItem1: TMenuItem; - MenuItem2: TMenuItem; - MenuItem3: TMenuItem; - MenuItem4: TMenuItem; - MenuItem5: TMenuItem; - MenuItem6: TMenuItem; MenuItem7: TMenuItem; - MenuItem8: TMenuItem; - mnSetPCHere: TMenuItem; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; @@ -41,7 +32,6 @@ TfrmDebugger = class(TForm) panRAM: TPanel; panROM: TPanel; panStatis: TPanel; - PopupMenu1: TPopupMenu; PopupMenu2: TPopupMenu; Splitter1: TSplitter; Splitter2: TSplitter; @@ -50,8 +40,8 @@ TfrmDebugger = class(TForm) Splitter5: TSplitter; Splitter6: TSplitter; StatusBar1: TStatusBar; - StringGrid1: TStringGrid; Timer1: TTimer; + Timer2: TTimer; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; @@ -69,10 +59,11 @@ TfrmDebugger = class(TForm) procedure acGenResetExecute(Sender: TObject); procedure acGenRunExecute(Sender: TObject); procedure acGenSetPCExecute(Sender: TObject); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure PopupMenu1Popup(Sender: TObject); procedure Timer1Timer(Sender: TObject); + procedure Timer2Timer(Sender: TObject); private defHeight: LongInt; margInstrc: Integer; @@ -81,16 +72,17 @@ TfrmDebugger = class(TForm) fraPicReg: TfraPicRegisters; fraRegWat: TfraRegWatcher; fraPicDia: TfraPICDiagram; + fraPicAsm: TfraPicAsm; milsecRefresh: integer; //Periodo de refresco en milisegunod nCyclesPerClk: integer; //Número de ciclos a ejecutar por pasada curVarName : string; + cxp: TCompilerBase; + pic: TPicCore; procedure picExecutionMsg(message: string); procedure RefreshScreen(SetGridRow: boolean = true); - procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; - aRect: TRect; aState: TGridDrawState); public - pic: TPIC16; - procedure Exec; + procedure SetLanguage; + procedure Exec(cxp0: TCompilerBase); end; var @@ -99,133 +91,49 @@ TfrmDebugger = class(TForm) implementation {$R *.lfm} { TfrmDebugger } +procedure TfrmDebugger.SetLanguage; +begin + fraRegWat.SetLanguage; +end; procedure TfrmDebugger.Timer1Timer(Sender: TObject); +{Temporizador para el editor de diagramas } var stopped: boolean; begin if pic = nil then exit; +// consoleTickStart; pic.ExecNCycles(nCyclesPerClk, stopped); if stopped then begin acGenPauseExecute(self); end else begin - RefreshScreen; + if fraPicDia.Visible then fraPicDia.Refrescar; +// RefreshScreen; end; +// consoleTickCount(''); end; -procedure TfrmDebugger.StringGrid1DrawCell(Sender: TObject; aCol, - aRow: Integer; aRect: TRect; aState: TGridDrawState); -var - txt, comm, lab: String; // texto de la celda - cv: TCanvas; //referencia al lienzo - valOp: word; - bnkOp: Byte; +procedure TfrmDebugger.Timer2Timer(Sender: TObject); +{Temporizador para los otros frames menos fraPicDia.} begin - cv := StringGrid1.Canvas; //referencia al Lienzo - - if gdFixed in aState then begin - //Es una celda fija - cv.Brush.Color := clMenu; // le ponemos azul de fondo - cv.Font.Color := clBlack; // fuente blanca - cv.Font.Style := []; // y negrita - end else begin - //Es una celda común - if aRow = StringGrid1.Row then begin - //Fila seleccionada - cv.Brush.Color := clMenu; // fondo marrón - cv.Font.Color := clBlack; // letra negra - cv.Font.Style := [fsBold]; // negrita - end else begin - //Fila sin selección - if pic.flash[aRow].used then begin - cv.Brush.Color := clWhite; //fondo blanco - end else begin //Dirección no usada - cv.Brush.Color := $E0E0E0; - end; - cv.Font.Style := [fsBold]; //negrita - end; - end; - //Dibuja contenido de celda - cv.FillRect(aRect); //fondo - if ACol = 0 then begin - txt := '$'+IntToHex(aRow,3); - cv.TextOut(aRect.Left + 2, aRect.Top + 2, txt); - end else if ACol = 1 then begin - //Celda normal - valOp := pic.flash[aRow].value; - bnkOp := pic.flash[aRow].curBnk; - txt := pic.Disassembler(valOp, bnkOp, true); //desensambla - //Escribe texto con alineación - if StringGrid1.RowHeights[Arow] = defHeight*3 then begin - //Celda con comentario superior y etiqueta - lab := trim(pic.flash[Arow].topLabel)+':'; - comm := trim(pic.flash[Arow].topComment); - cv.Font.Color := clGray; - cv.TextOut(aRect.Left + 2, aRect.Top + 2, lab); //comentario - cv.Font.Color := clBlue; - cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + defHeight+ 2, comm); //comentario - cv.Font.Color := clGreen; //letra verde - cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + defHeight*2 + 2, txt); - if pic.flash[aRow].breakPnt then begin - ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2 + defHeight*2, 9); - end; - if aRow = word((pic.PCH<<8) + pic.PCL) then begin //marca - ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2 + defHeight*2, 3); - end; - end else if StringGrid1.RowHeights[Arow] = defHeight*2 then begin - //Celda con comentario superior - comm := trim(pic.flash[Arow].topComment); - cv.Font.Color := clBlue; //letra verde - cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + 2, comm); //comentario - cv.Font.Color := clGreen; //letra verde - cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top+2 + defHeight, txt); - if pic.flash[aRow].breakPnt then begin - ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2 + defHeight, 9); - end; - if aRow = word((pic.PCH<<8) + pic.PCL) then begin //marca - ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2 + defHeight, 3); - end; - end else begin - cv.Font.Color := clGreen; //letra verde - cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + 2, txt); - if pic.flash[aRow].breakPnt then begin - ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2, 9); - end; - if aRow = word((pic.PCH<<8) + pic.PCL) then begin //marca - ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2, 3); - end; - end; - end else if ACol = 2 then begin - //Celda normal - cv.Font.Color := clBlue; //letra verde - txt := pic.flash[aRow].sideComment; //comentario -// if pic.flash[aRow].idFile=-1 then begin -// txt := ''; -// end else begin -// txt := 'IdFil=' + IntToStr(pic.flash[aRow].idFile) + -// 'row=' + IntToStr(pic.flash[aRow].rowSrc) + -// 'col=' + IntToStr(pic.flash[aRow].colSrc) ; -// end; - //Escribe texto con alineación - cv.TextOut(aRect.Left + 2, aRect.Top + 2, txt); - end; + fraPicReg.Refrescar; + if fraRamExp.Visible then fraRamExp.panGraph.Invalidate; + if fraRegWat.Visible then fraRegWat.Refrescar; +// if fraPicDia.Visible then fraPicDia.Refrescar; + if fraPicAsm.Visible then fraPicAsm.Refrescar(true); + StatusBar1.Panels[1].Text := 'Clock Cycles = ' + IntToStr(pic.nClck); + StatusBar1.Panels[2].Text := 'Time = ' + + FormatDateTime('hh:mm:ss.zzz', pic.nClck / pic.frequen / (86400 / 4)); end; procedure TfrmDebugger.RefreshScreen(SetGridRow: boolean = true); {Refresca los paneles de la pantalla, con información actual del PIC} -var - pc: word; begin - if SetGridRow then begin - pc := pic.PCH<<8 + pic.PCL; - StringGrid1.Row := pc; - end; - StringGrid1.Invalidate; //Refersca posibles cambios fraPicReg.Refrescar; if fraRamExp.Visible then fraRamExp.panGraph.Invalidate; if fraRegWat.Visible then fraRegWat.Refrescar; if fraPicDia.Visible then fraPicDia.Refrescar; + if fraPicAsm.Visible then fraPicAsm.Refrescar(SetGridRow); StatusBar1.Panels[1].Text := 'Clock Cycles = ' + IntToStr(pic.nClck); -// StatusBar1.Panels[1].Text := 'Time seconds = ' + FloatToStr(pic.nClck / pic.frequen); StatusBar1.Panels[2].Text := 'Time = ' + - FormatDateTime('hh:mm:ss.zzz', 4 * pic.nClck / pic.frequen / 86400); + FormatDateTime('hh:mm:ss.zzz', pic.nClck / pic.frequen / (86400 / 4)); end; procedure TfrmDebugger.picExecutionMsg(message: string); var @@ -243,39 +151,90 @@ procedure TfrmDebugger.picExecutionMsg(message: string); pic.CommStop := true; //Manda comando para detener end; end; -procedure TfrmDebugger.PopupMenu1Popup(Sender: TObject); -var - txt: String; - a: TStringDynArray; - valp: Word; +procedure TfrmDebugger.Exec(cxp0: TCompilerBase); +{Inicia el prcceso de depuración, mostrando la ventana.} begin - if StringGrid1.Row=-1 then begin - acGenAddWatch.Visible := false; - exit; - end; - //Obtiene instrucción seleccionada - valp := pic.flash[StringGrid1.Row].value; - txt := pic.Disassembler(valp, 0, true); - //Valida si es instrucción - a := Explode(' ', txt); - if (high(a)<>1) and (high(a)<>2) then begin - acGenAddWatch.Visible := false; - exit; - end; - //Puede ser una instrucción - curVarName := a[1]; //toma la segunda parte - if pos(',', curVarName)<>0 then begin - //Toma hasta antes de la coma - curVarName := copy(curVarName, 1, pos(',', curVarName)-1); + cxp := cxp0; + pic := cxp0.picCore; + + //Muestra Frames + fraRamExp.SetCompiler(cxp); + fraRomExp.SetCompiler(cxp); + fraRomExp.panGraph.Invalidate; //Se refresca aquí porque no se incluye su refresco en RefreshScreen(). + fraPicReg.SetCompiler(cxp); + fraRegWat.SetCompiler(cxp); + fraPicDia.SetCompiler(cxp); + fraPicAsm.SetCompiler(cxp); + + pic.AddBreakpoint(0); + pic.OnExecutionMsg := @picExecutionMsg; + acGenResetExecute(self); + StatusBar1.Panels[0].Text := pic.Model + ' at ' + IntToStr(pic.frequen) + ' Hz'; + ///// Calcula parámetros de refresco, para la ejecución en tiempo real ////////// + {La idea de la ejecución en tiempo real, es ejecutar un paquete de instrucciones + (ciclos) por bloques y luego aprovechar el tiempo muerto que queda por haber ejecutado + todas las instrucciones en menor tiempo.} + milsecRefresh := 50; //Fija un periodo de refresco inicial + Timer1.Interval := milsecRefresh; + Timer2.Interval := 250; //Los controles adicionales se pueden refersacr despacio + {Calcula cuántos ciclos debe ejecutar por refresco. Aún cuando el resultado de la + fórmula sea exacto, la función ExecNCycles() usada para ejecutar un grupo de ciclos + no siempre ejecuta los ciclos solicitados exactamente.} + nCyclesPerClk := round(int64(pic.frequen) * milsecRefresh / 4000); + ///////////////////////////////////////////////////////////////////////////////// + fraRegWat.mnClearAllClick(self); + fraRegWat.mnAddVarsClick(self); //agrega varaibles por defecto + self.Show; +end; +procedure TfrmDebugger.FormCreate(Sender: TObject); +begin + fraRamExp:= TfraRamExplorer.Create(self); + fraRamExp.Parent := panRAM; + fraRamExp.Align := alClient; + + fraRomExp:= TfraRomExplorer.Create(self); + fraRomExp.Parent := panROM; + fraRomExp.Align := alClient; + + fraPicReg:= TfraPicRegisters.Create(self); + fraPicReg.Parent := panStatis; + fraPicReg.Align := alClient; + + fraRegWat := TfraRegWatcher.Create(self); + fraRegWat.Parent := Panel2; + fraRegWat.Align := alClient; + + fraPicDia:= TfraPICDiagram.Create(self); + fraPicDia.Parent := Panel3; + fraPicDia.Align := alClient; + + fraPicAsm:= TfraPicAsm.Create(self); + fraPicAsm.Parent := Panel1; + fraPicAsm.Align := alClient; + + //Altura de fila de la grilla por defecto + defHeight := 20; + //Margen para mostrar las instrucciones en la grilla + margInstrc := 32; + //Configura Toolbar +// ToolBar1.ButtonHeight:=38; +// ToolBar1.ButtonWidth:=38; +// ToolBar1.Height:=42; +// ToolBar1.Images:=ImgActions32; +end; +procedure TfrmDebugger.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key = VK_DELETE then begin + MsgBox('Hola'); end; - curVarName := trim(curVarName); - acGenAddWatch.Caption := 'Add Watch on ' + curVarName; end; ////////////////////// Acciones //////////////////// procedure TfrmDebugger.acGenResetExecute(Sender: TObject); begin pic.Reset; Timer1.Enabled := false; + Timer2.Enabled := false; acGenRun.Enabled := true; acGenPause.Enabled := false; RefreshScreen; @@ -298,6 +257,7 @@ procedure TfrmDebugger.acGenRunExecute(Sender: TObject); end; //Programa la ejecución temporizada Timer1.Enabled := true; + Timer2.Enabled := true; acGenRun.Enabled := false; acGenPause.Enabled := true; RefreshScreen; @@ -307,27 +267,32 @@ procedure TfrmDebugger.acGenPauseExecute(Sender: TObject); {Detiene el programa en el punto actual.} begin Timer1.Enabled := false; + Timer2.Enabled := false; acGenRun.Enabled := true; acGenPause.Enabled := false; RefreshScreen; lstMessages.AddItem('Execution Paused.', nil); end; procedure TfrmDebugger.acGenSetPCExecute(Sender: TObject); -//Fija el puntero del programa en la instrucción seleccionad +//Fija el puntero del programa en la instrucción seleccionada. begin - if StringGrid1.Row=-1 then exit; - pic.PCL := StringGrid1.Row and $FF; - pic.PCH := StringGrid1.Row >> 8; - StringGrid1.Invalidate; + if fraPicAsm.StringGrid1.Row=-1 then exit; + pic.WritePC(fraPicAsm.StringGrid1.Row); + fraPicAsm.StringGrid1.Invalidate; +end; +procedure TfrmDebugger.FormClose(Sender: TObject; var CloseAction: TCloseAction + ); +begin + acGenPauseExecute(self); end; procedure TfrmDebugger.acGenExecHerExecute(Sender: TObject); {Ejecuta una instrucción hasta la dirección seleccionada.} var pc: word; begin - if StringGrid1.Row=-1 then exit; - pc := StringGrid1.Row; - pic.ExecTo(pc); //Ejecuta hasta la sgte. instrucción, salta el CALL + if fraPicAsm.StringGrid1.Row=-1 then exit; + pc := fraPicAsm.StringGrid1.Row; + pic.ExecTo(pc); //Ejecuta hasta la sgte. instrucción, salta el i_CALL RefreshScreen; end; procedure TfrmDebugger.acGenClearCCExecute(Sender: TObject); @@ -346,22 +311,15 @@ procedure TfrmDebugger.acGenSetBrkPntExecute(Sender: TObject); var pc: word; begin - if StringGrid1.Row=-1 then exit; - pc := StringGrid1.Row; - pic.ToggleBreakopint(pc); + if fraPicAsm.StringGrid1.Row=-1 then exit; + pc := fraPicAsm.StringGrid1.Row; + pic.ToggleBreakpoint(pc); RefreshScreen(false); end; procedure TfrmDebugger.acGenStepExecute(Sender: TObject); {Ejecuta una instrucción sin entrar a subrutinas} -var - pc: word; begin - if pic.CurInstruction = CALL then begin - pc := pic.PCH<<8 + pic.PCL; - pic.ExecTo(pc+1); //Ejecuta hasta la sgte. instrucción, salta el CALL - end else begin - pic.Exec(); - end; + pic.ExecStep; RefreshScreen; end; procedure TfrmDebugger.acGenStepInExecute(Sender: TObject); @@ -370,106 +328,6 @@ procedure TfrmDebugger.acGenStepInExecute(Sender: TObject); pic.Exec(); RefreshScreen; end; -procedure TfrmDebugger.Exec; -{Inicia el prcceso de depuración, mostrando la ventana.} -var - i: Integer; -begin - StringGrid1.DefaultDrawing:=false; - StringGrid1.OnDrawCell := @StringGrid1DrawCell; - - //Muestra Frames - fraRamExp.pic := pic; - fraRamExp.panGraph.Invalidate; - fraRomExp.pic := pic; - fraRomExp.Invalidate; - fraPicReg.pic := pic; - fraPicReg.Invalidate; - fraRegWat.pic := pic; - fraRegWat.cxp:= cxp; - fraRegWat.Refrescar; - - fraPicDia.pic:= pic; - fraPicDia.Refrescar; - pic.AddBreakopint(0); - pic.OnExecutionMsg := @picExecutionMsg; - acGenResetExecute(self); - StatusBar1.Panels[0].Text := pic.Model + ' at ' + IntToStr(pic.frequen) + ' Hz'; - //Dimensiona la grilla para que pueda mostrar las etoquetas -// defHeight := StringGrid1.RowHeights[0]; - for i:=0 to high(pic.flash) do begin - if not pic.flash[i].used then continue; - //Es celda usada - if (pic.flash[i].topComment<>'') and (pic.flash[i].topLabel<>'') then begin - //Tiene comentario arriba - StringGrid1.RowHeights[i] := 3*defHeight; - end else if pic.flash[i].topComment<>'' then begin - //Tiene comentario arriba - StringGrid1.RowHeights[i] := 2*defHeight; - end else begin - //Deja con la misma altura - StringGrid1.RowHeights[i] := defHeight; - end; - end; - ///////////////////////////////////////////////////////////////////////////////// - ///// Calcula parámetros de refresco, para la ejecución en tiempo real ////////// - {La idea de la ejecución en tiempo real, es ejecutar un paquete de instrucciones - (ciclos) por bloques y luego aprovechar el tiempo muerto que queda por haber ejecutado - todas las instrucciones en menor tiempo. - Si se fuera estricto en la simualción y tiempo real, se ejecutaría instrucción por - instrucción aprovechar el tiempo muerto que queda, después de cada instrucción, ya que - la PC, ejecuta cada instrucción PIC, en menos tiempo (al menos eso se espera). - En pruebas con una PC Core i7 con 3.4GHz, se calculó que se podía ejecutar las - instruccioes al menos 12 veces más rápido, para un dispositivo trabajando a 10MHz.} - milsecRefresh := 200; //Fija un periodo de refresco inicial - Timer1.Interval := milsecRefresh; - {Calcula cuántos ciclos debe ejecutar por refresco. Aún cuando el resultado de la - fórmula sea exacto, la función ExecNCycles() usada para ejecutar un grupo de ciclos - no siempre ejecuta los ciclos solicitados exactamente.} - nCyclesPerClk := round(int64(pic.frequen) * milsecRefresh / 4000); - ///////////////////////////////////////////////////////////////////////////////// - fraRegWat.mnClearAllClick(self); - fraRegWat.mnAddVarsClick(self); //agrea varaibles por defecto - self.Show; -end; -procedure TfrmDebugger.FormCreate(Sender: TObject); -begin - fraRamExp:= TfraRamExplorer.Create(self); - fraRamExp.Parent := panRAM; - fraRamExp.Align := alClient; - - fraRomExp:= TfraRomExplorer.Create(self); - fraRomExp.Parent := panROM; - fraRomExp.Align := alClient; - - fraPicReg:= TfraPicRegisters.Create(self); - fraPicReg.Parent := panStatis; - fraPicReg.Align := alClient; - - fraRegWat := TfraRegWatcher.Create(self); - fraRegWat.Parent := Panel2; - fraRegWat.Align := alClient; - - fraPicDia:= TfraPICDiagram.Create(self); - fraPicDia.Parent := Panel3; - fraPicDia.Align := alClient; - //Altura de fila de la grilla por defecto - defHeight := 20; - //Margen para mostrar las instrucciones en la grilla - margInstrc := 32; - //Configura Toolbar -// ToolBar1.ButtonHeight:=38; -// ToolBar1.ButtonWidth:=38; -// ToolBar1.Height:=42; -// ToolBar1.Images:=ImgActions32; -end; -procedure TfrmDebugger.FormKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); -begin - if Key = VK_DELETE then begin - MsgBox('Hola'); - end; -end; end. diff --git a/Source/FormElemProperty.lfm b/Source/FormElemProperty.lfm index dcda59c1..f5fc6de7 100644 --- a/Source/FormElemProperty.lfm +++ b/Source/FormElemProperty.lfm @@ -1,13 +1,13 @@ object frmElemProperty: TfrmElemProperty Left = 193 - Height = 277 + Height = 278 Top = 130 Width = 333 BorderStyle = bsDialog Caption = 'Element Properties' - ClientHeight = 277 + ClientHeight = 278 ClientWidth = 333 - LCLVersion = '1.6.2.0' + LCLVersion = '1.8.0.6' object BitBtn1: TBitBtn Left = 120 Height = 30 diff --git a/Source/FormElemProperty.pas b/Source/FormElemProperty.pas index 05e19e3f..9480eb31 100644 --- a/Source/FormElemProperty.pas +++ b/Source/FormElemProperty.pas @@ -84,6 +84,8 @@ procedure TfrmElemProperty.SetCalledInfo(elem0: TxpElement); {Agrega información, sobre las llamadas que se hacen a un elemento } var nCalled: Integer; + call: TxpEleCaller; + callerStr, bnkStr: String; begin nCalled := elem0.nCalled; if nCalled = 0 then begin @@ -96,6 +98,18 @@ procedure TfrmElemProperty.SetCalledInfo(elem0: TxpElement); lblUsed.Font.Color := clGreen; lblUsed.Caption := 'Used ' + IntToStr(nCalled) + ' times.'; butDetails.Enabled := true; + //Agrega información de llamadas + for call in elem.lstCallers do begin + if call.caller.Parent<>nil then begin + callerStr := call.caller.Parent.name + '-' + call.caller.name; + end else begin + callerStr := call.caller.name; + end; + bnkStr := IntToStr(call.curBnk); + //Agrega líneas + Memo1.Lines.Add('Called by: ' + callerStr + ' from Bank:' + bnkStr + + ' Pos:' + call.curPos.RowColString);; + end; end; end; procedure TfrmElemProperty.Exec(elem0: TxpElement); @@ -116,8 +130,6 @@ procedure TfrmElemProperty.Exec(elem0: TxpElement); txtEleLocaPath.Caption := ExtractFileDir(elem.srcDec.Fil); txtEleLocFile.Caption := ExtractFileName(elem.srcDec.Fil) + elem.srcDec.RowColString; BitBtn2.Enabled := true; - //Configura etiqueta y botón de número de llamadas al elemento - SetCalledInfo(elem); //Ícono e información adicional if elem.idClass = eltCons then begin xcon := TxpEleCon(elem); @@ -164,14 +176,20 @@ procedure TfrmElemProperty.Exec(elem0: TxpElement); txtEleType.Caption := 'Body'; ImageList1.GetBitmap(12, Image1.Picture.Bitmap); adicInformation := 'Address: $' + IntToHex(xbod.adrr, 3) + LineEnding + - 'Begin: ' + xbod.srcDec.RowColString + LineEnding + + 'Begin: ' + xbod.srcDec.RowColString + ' ' + 'End: ' + elem.srcEnd.RowColString; + end else if elem.idClass = eltMain then begin + txtEleType.Caption := 'Main'; + ImageList1.GetBitmap(1, Image1.Picture.Bitmap); + adicInformation := ''; end else begin txtEleType.Caption := 'Unknown'; ImageList1.GetBitmap(13, Image1.Picture.Bitmap); adicInformation := ''; end; Memo1.Text := adicInformation; + //Configura etiqueta y botón de número de llamadas al elemento + SetCalledInfo(elem); end; end. diff --git a/Source/FormPrincipal.lfm b/Source/FormPrincipal.lfm index 79588539..edbd92ad 100644 --- a/Source/FormPrincipal.lfm +++ b/Source/FormPrincipal.lfm @@ -1,7 +1,7 @@ object frmPrincipal: TfrmPrincipal - Left = 269 + Left = 325 Height = 632 - Top = 122 + Top = 152 Width = 933 AllowDropFiles = True Caption = 'frmPrincipal' @@ -17,7 +17,7 @@ object frmPrincipal: TfrmPrincipal OnKeyDown = FormKeyDown OnShow = FormShow Position = poScreenCenter - LCLVersion = '1.6.2.0' + LCLVersion = '2.0.0.4' object StatusBar1: TStatusBar Left = 0 Height = 23 @@ -25,13 +25,13 @@ object frmPrincipal: TfrmPrincipal Width = 933 Panels = < item - Width = 70 + Width = 80 end item Width = 80 end item - Width = 70 + Width = 120 end item Width = 70 @@ -41,133 +41,6 @@ object frmPrincipal: TfrmPrincipal end> SimplePanel = False end - object ToolBar1: TToolBar - Left = 0 - Height = 26 - Top = 0 - Width = 933 - Caption = 'ToolBar1' - Images = ImgActions16 - ParentColor = False - ParentShowHint = False - ShowHint = True - TabOrder = 1 - Visible = False - object ToolButton1: TToolButton - Left = 1 - Top = 2 - Action = acArcNewFile - end - object ToolButton2: TToolButton - Left = 24 - Top = 2 - Action = acArcOpen - end - object ToolButton3: TToolButton - Left = 47 - Top = 2 - Action = acArcSave - end - object ToolButton4: TToolButton - Left = 70 - Top = 2 - Action = acArcSaveAs - end - object ToolButton5: TToolButton - Left = 93 - Height = 22 - Top = 2 - Width = 10 - Caption = 'ToolButton5' - Style = tbsSeparator - end - object ToolButton6: TToolButton - Left = 103 - Top = 2 - Action = acEdUndo - end - object ToolButton7: TToolButton - Left = 126 - Top = 2 - Action = acEdRedo - end - object ToolButton8: TToolButton - Left = 149 - Top = 2 - Action = acEdCut - end - object ToolButton9: TToolButton - Left = 172 - Top = 2 - Action = acEdCopy - end - object ToolButton10: TToolButton - Left = 195 - Top = 2 - Action = acEdPaste - end - object ToolButton11: TToolButton - Left = 218 - Height = 22 - Top = 2 - Width = 10 - Caption = 'ToolButton11' - Style = tbsSeparator - end - object ToolButton12: TToolButton - Left = 228 - Top = 2 - Action = acToolCompil - end - object ToolButton13: TToolButton - Left = 251 - Top = 2 - Action = acToolComEjec - end - object ToolButton15: TToolButton - Left = 274 - Height = 22 - Top = 2 - Width = 10 - Caption = 'ToolButton15' - Style = tbsSeparator - end - object ToolButton16: TToolButton - Left = 307 - Top = 2 - Action = acToolConfig - end - object ToolButton14: TToolButton - Left = 330 - Top = 2 - Action = acToolExt1 - end - object ToolButton17: TToolButton - Left = 353 - Top = 2 - Action = acToolExt2 - end - object ToolButton18: TToolButton - Left = 376 - Top = 2 - Action = acToolExt3 - end - object ToolButton19: TToolButton - Left = 399 - Top = 2 - Action = acToolExt4 - end - object ToolButton20: TToolButton - Left = 422 - Top = 2 - Action = acToolExt5 - end - object ToolButton21: TToolButton - Left = 284 - Top = 2 - Action = acToolASMDebug - end - end object splSynTree: TSplitter Left = 160 Height = 385 @@ -187,7 +60,7 @@ object frmPrincipal: TfrmPrincipal Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False - TabOrder = 3 + TabOrder = 2 Gutter.Width = 29 Gutter.MouseActions = <> RightGutter.Width = 0 @@ -678,7 +551,7 @@ object frmPrincipal: TfrmPrincipal Top = 507 Width = 933 Align = alBottom - TabOrder = 4 + TabOrder = 3 end object Splitter2: TSplitter Cursor = crVSplit @@ -696,6 +569,248 @@ object frmPrincipal: TfrmPrincipal Width = 5 Align = alNone end + object CoolBar1: TCoolBar + Left = 0 + Height = 29 + Top = 0 + Width = 933 + AutoSize = True + BandBorderStyle = bsNone + Bands = < + item + Break = False + Color = clMenu + Control = ToolBar2 + ParentColor = False + Width = 179 + end + item + Break = False + Control = ToolBar3 + end + item + Break = False + Control = ToolBar4 + end + item + Break = False + Control = ToolBar5 + Width = 157 + end + item + Break = False + Control = ToolBar6 + Width = 157 + end> + FixedSize = True + GrabStyle = gsHorLines + GrabWidth = 3 + HorizontalSpacing = 0 + ParentColor = False + ParentShowHint = False + ShowHint = True + Themed = False + VerticalSpacing = 0 + object ToolBar2: TToolBar + AnchorSideLeft.Control = CoolBar1 + AnchorSideTop.Control = CoolBar1 + Left = 7 + Height = 22 + Top = 3 + Width = 93 + Align = alNone + AutoSize = True + BorderSpacing.Left = 5 + BorderSpacing.Top = 1 + ButtonHeight = 22 + ButtonWidth = 23 + Caption = 'ToolBar2' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Images = ImgActions16 + TabOrder = 0 + object ToolButton23: TToolButton + Left = 1 + Top = 0 + Action = acArcNewFile + end + object ToolButton24: TToolButton + Left = 24 + Top = 0 + Action = acArcOpen + end + object ToolButton25: TToolButton + Left = 47 + Top = 0 + Action = acArcSave + end + object ToolButton26: TToolButton + Left = 70 + Top = 0 + Action = acArcSaveAs + end + end + object ToolBar3: TToolBar + AnchorSideLeft.Control = CoolBar1 + AnchorSideTop.Control = CoolBar1 + Left = 186 + Height = 22 + Top = 3 + Width = 116 + Align = alNone + AutoSize = True + BorderSpacing.Left = 184 + BorderSpacing.Top = 1 + Caption = 'ToolBar3' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Images = ImgActions16 + TabOrder = 1 + object ToolButton27: TToolButton + Left = 1 + Top = 0 + Action = acEdUndo + end + object ToolButton28: TToolButton + Left = 24 + Top = 0 + Action = acEdRedo + end + object ToolButton29: TToolButton + Left = 47 + Top = 0 + Action = acEdCut + end + object ToolButton30: TToolButton + Left = 70 + Top = 0 + Action = acEdCopy + end + object ToolButton31: TToolButton + Left = 93 + Top = 0 + Action = acEdPaste + end + end + object ToolBar4: TToolBar + AnchorSideLeft.Control = CoolBar1 + AnchorSideTop.Control = CoolBar1 + Left = 366 + Height = 22 + Top = 3 + Width = 116 + Align = alNone + AutoSize = True + BorderSpacing.Left = 364 + BorderSpacing.Top = 1 + Caption = 'ToolBar4' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Images = ImgActions16 + TabOrder = 2 + object ToolButton32: TToolButton + Left = 1 + Top = 0 + Action = acToolCompil + end + object ToolButton33: TToolButton + Left = 24 + Top = 0 + Action = acToolASMDebug + end + object ToolButton34: TToolButton + Left = 47 + Top = 0 + Action = acToolRamExp + end + object ToolButton35: TToolButton + Left = 70 + Top = 0 + Action = acToolComEjec + end + object ToolButton43: TToolButton + Left = 93 + Top = 0 + Action = acToolConfig + end + end + object ToolBar5: TToolBar + AnchorSideLeft.Control = CoolBar1 + AnchorSideTop.Control = CoolBar1 + Left = 546 + Height = 22 + Top = 3 + Width = 68 + Align = alNone + AutoSize = True + BorderSpacing.Left = 544 + BorderSpacing.Top = 1 + Caption = 'ToolBar5' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Images = ImgActions16 + ParentColor = False + ParentFont = False + ShowCaptions = True + TabOrder = 3 + OnPaintButton = ToolBar5PaintButton + object ToolButton39: TToolButton + Left = 1 + Top = 0 + AutoSize = True + Caption = 'Compiler' + DropdownMenu = PopupCompiler + Style = tbsButtonDrop + end + end + object ToolBar6: TToolBar + AnchorSideLeft.Control = CoolBar1 + AnchorSideTop.Control = CoolBar1 + Left = 703 + Height = 22 + Top = 3 + Width = 116 + Align = alNone + AutoSize = True + BorderSpacing.Left = 701 + BorderSpacing.Top = 1 + Caption = 'ToolBar6' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Images = ImgActions16 + TabOrder = 4 + object ToolButton36: TToolButton + Left = 1 + Top = 0 + Action = acExtTool1 + end + object ToolButton37: TToolButton + Left = 24 + Top = 0 + Action = acExtTool2 + end + object ToolButton38: TToolButton + Left = 47 + Top = 0 + Action = acExtTool3 + end + object ToolButton40: TToolButton + Left = 70 + Top = 0 + Action = acExtTool4 + end + object ToolButton41: TToolButton + Left = 93 + Top = 0 + Action = acExtTool5 + end + end + end object ImgActions16: TImageList left = 216 top = 464 @@ -1917,12 +2032,14 @@ object frmPrincipal: TfrmPrincipal Hint = 'Compila el archivo Actual' ImageIndex = 23 OnExecute = acToolCompilExecute - ShortCut = 120 + ShortCut = 16504 end object acToolComEjec: TAction Category = 'Tool' Caption = 'Compilar y Ejecutar' ImageIndex = 24 + OnExecute = acToolComEjecExecute + ShortCut = 120 end object acToolPICExpl: TAction Category = 'Tool' @@ -1949,13 +2066,7 @@ object frmPrincipal: TfrmPrincipal Category = 'View' Caption = '&Code Explorer' OnExecute = acViewSynTreeExecute - ShortCut = 113 - end - object acToolConfig: TAction - Category = 'Tool' - Caption = '&Confi&gurar' - ImageIndex = 22 - OnExecute = acToolConfigExecute + ShortCut = 32881 end object acToolListRep: TAction Category = 'Tool' @@ -1963,6 +2074,26 @@ object frmPrincipal: TfrmPrincipal ImageIndex = 18 OnExecute = acToolListRepExecute end + object acToolFindDec: TAction + Category = 'Tool' + Caption = 'Find Declaration' + ImageIndex = 32 + OnExecute = acToolFindDecExecute + end + object acToolRamExp: TAction + Category = 'Tool' + Caption = '&RAM Explorer' + ImageIndex = 34 + OnExecute = acToolRamExpExecute + ShortCut = 123 + end + object acToolASMDebug: TAction + Category = 'Tool' + Caption = 'ASM &Debugger' + ImageIndex = 35 + OnExecute = acToolASMDebugExecute + ShortCut = 16507 + end object acArcNewProj: TAction Category = 'Arc' Caption = 'New &Project' @@ -2013,19 +2144,6 @@ object frmPrincipal: TfrmPrincipal ImageIndex = 6 OnExecute = acArcQuitExecute end - object acToolFindDec: TAction - Category = 'Tool' - Caption = 'Find Declaration' - ImageIndex = 32 - OnExecute = acToolFindDecExecute - end - object acToolRamExp: TAction - Category = 'Tool' - Caption = '&RAM Explorer' - ImageIndex = 34 - OnExecute = acToolRamExpExecute - ShortCut = 123 - end object acEdPaste: TEditPaste Category = 'Edit' Caption = '&Pegar' @@ -2060,39 +2178,63 @@ object frmPrincipal: TfrmPrincipal OnExecute = acViewAsmPanExecute ShortCut = 115 end - object acToolASMDebug: TAction + object acToolTestUnit: TAction Category = 'Tool' - Caption = 'ASM &Debugger' - ImageIndex = 35 - OnExecute = acToolASMDebugExecute - ShortCut = 16507 + Caption = 'Test Device Units' + OnExecute = acToolTestUnitExecute end - object acToolExt1: TAction + object acToolTestPic10: TAction Category = 'Tool' + Caption = 'Test PIC10 compiler' + OnExecute = acToolTestPic10Execute + end + object acToolConfig: TAction + Category = 'Tool' + Caption = '&Confi&gurar' + ImageIndex = 22 + OnExecute = acToolConfigExecute + end + object acToolSelPIC10: TAction + Category = 'Comp' + Caption = 'Baseline Compiler' + OnExecute = acToolSelPIC10Execute + end + object acToolSelPIC16: TAction + Category = 'Comp' + Caption = 'Mid-range Compiler' + OnExecute = acToolSelPIC16Execute + end + object acToolSelPIC17: TAction + Category = 'Comp' + Caption = 'Enhanced Mid-range Compiler' + OnExecute = acToolSelPIC17Execute + end + object acExtTool1: TAction + Category = 'Ext' Caption = 'External Tool 1' ImageIndex = 33 OnExecute = acToolExt1Execute end - object acToolExt2: TAction - Category = 'Tool' + object acExtTool2: TAction + Category = 'Ext' Caption = 'External Tool 2' ImageIndex = 33 OnExecute = acToolExt2Execute end - object acToolExt3: TAction - Category = 'Tool' + object acExtTool3: TAction + Category = 'Ext' Caption = 'External Tool 3' ImageIndex = 33 OnExecute = acToolExt3Execute end - object acToolExt4: TAction - Category = 'Tool' + object acExtTool4: TAction + Category = 'Ext' Caption = 'External Tool 4' ImageIndex = 33 OnExecute = acToolExt4Execute end - object acToolExt5: TAction - Category = 'Tool' + object acExtTool5: TAction + Category = 'Ext' Caption = 'External Tool 5' ImageIndex = 33 OnExecute = acToolExt5Execute @@ -2106,276 +2248,24 @@ object frmPrincipal: TfrmPrincipal Caption = '&Archivo' object MenuItem3: TMenuItem Action = acArcNewFile - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0003150015241300133413001335130013351300133513001335130013351300 - 1335130013351300133513001335140014310F000F1000000000000000000000 - 0009D4B1A2FFD5BFBBFFD5BFBBFFD5BFBCFFD5BFBCFFD5BFBCFFD5BFBCFFD5BF - BCFFD5C0BCFFD6C0BCFFD4BEBAFFC6A19AFF1600162E00000001000000000000 - 000AEBD8C8FFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB - EBFFEBEBEBFFECEBECFFEAEAEAFFD4BDB9FF1400143100000001000000000000 - 000AEBD9C8FFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECEC - ECFFECECECFFECECECFFEBEBEBFFD4BDB8FF1400143100000001000000000000 - 000AEBD8C6FFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB - EBFFEBEBEBFFEBEBEBFFEAEAEAFFD4BCB7FF1400143100000001000000000000 - 000AEBD7C5FFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB - EBFFEBEBEBFFEBEBEBFFEAEAEAFFD3BBB6FF1400143100000001000000000000 - 000AEBD8C5FFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECEC - ECFFECECECFFECECECFFEAEAEAFFD3BBB5FF1400143100000001000000000000 - 000AEDDAC8FFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEE - EEFFEEEEEEFFEEEEEEFFECECECFFD3BCB7FF1400143100000001000000000000 - 000AEEDCCAFFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0 - F0FFF0F0F0FFF0F0F0FFEEEEEEFFD4BDB9FF1400143100000001000000000000 - 000AEFDDCCFFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0 - F0FFF0F0F0FFF0F0F0FFEEEEEEFFD5BEBAFF1400143100000001000000000000 - 000AEFDECEFFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1 - F1FFF1F1F1FFF1F1F1FFF0EFF0FFD5BFBCFF1400143100000001000000000000 - 000AF1E1D1FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2 - F2FFF2EEEAFFF2E2D2FFF0E0D1FFD6B6A9FF1300132800000000000000000000 - 000AF2E3D6FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4 - F4FFF3E4D5FFF7E0CEFFF1D6C4FFB68F7C891C001C0900000000000000000000 - 000AF5E7DBFFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7 - F7FFF6E8DBFFF1D7C4FFBB947E891900190A0000000000000000000000000000 - 0007F4DECAFFF6EADFFFF6EADFFFF6EADFFFF6EADFFFF6EADFFFF6EADFFFF6EA - DFFFF1DBC9FFC09881861900190A000000000000000000000000000000000000 - 0001000000070000000A0000000A0000000A0000000A0000000A0000000A0000 - 000A0000000A0000000400000000000000000000000000000000 - } end object MenuItem25: TMenuItem Action = acArcNewProj - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000100000002000000040000000600000006000000040000 - 0002000000010000000000000000000000000000000000000000000000000000 - 000000000002000000040000000A000000120000001800000016000000110000 - 0008000000020000000100000000000000000000000000000000000000010000 - 000200000008000000100000001E0000002E0000003800000037989898C50000 - 001B0000000A0000000400000001000000000000000000000000000000030000 - 0009000000160000002800000040000000560D0D0D7219191998CACACADA0000 - 00397E7E7E6D0000000E00000004000000010000000000000000000000060000 - 00140000002C00000047000000641E1E1EAE393939F8202020FFB0B0B0FE4949 - 4980AEAEAECE0000002500000010000000060000000200000000000000095858 - 584E6E6E6EA40A0A0A76222222E02D2D2DFF363636FF333333FF414141FF3232 - 32E9D0D0D0ED1010104B999999C4000000160000000600000000000000087B7B - 7B5B4E4E4EE2181818FC272727FF303030FF232323FF242424FF343434FF2121 - 21FF787878FF5B5B5BAACECECED6353535438686864C00000000000000040B0B - 0B8A0F0F0FFF2A2A2AFF272727FF202020FF252525FF2A2A2AFF2F2F2FFF3B3B - 3BFF353535FF131313FCB4B4B4F97878789CBABABA8E00000000000000022323 - 23892A2A2AFF1E1E1EFF212121FF262626FF2A2A2AFF303030FF353535FF3A3A - 3AFF424242FF444444FF343434FF858585E6D1D1D19800000000000000001C1C - 1C361C1C1CE7212121FF262626FF2B2B2BFF303030FF353535FF3A3A3AFF4040 - 40FF454545FF4A4A4AFF535353FF363636FF979797F200000009000000000000 - 00002424241C262626CE2C2C2CFF303030FF363636FF3B3B3BFF404040FF4545 - 45FF4A4A4AFF505050FF545454FF606060FF353535FF00000032000000000000 - 0000000000003333330A303030AD363636FF3C3C3CFF404040FF464646FF4B4B - 4BFF505050FF555555FF595959FF5E5E5EFF696969FE6868682C000000000000 - 00000000000000000000000000023B3B3B81414141FE464646FF4C4C4CFF5050 - 50FF555555FF5A5A5AFF5F5F5FFF626262D96767674000000000000000000000 - 000000000000000000000000000000000000454545584B4B4BF7515151FF5656 - 56FF5A5A5AFF5E5E5EFA616161835F5F5F080000000000000000000000000000 - 0000000000000000000000000000000000000000000051515135565656E45B5B - 5BFF5F5F5FC65C5C5C2C00000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000005E5E5E1B6060 - 60557F7F7F020000000000000000000000000000000000000000 - } end object MenuItem4: TMenuItem Action = acArcOpen - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000048B6B6075FBF - CF10000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000004E93A13461D2 - EFFE60D6F5E05ED4F6B25CD2F7845AD0F35754C2E62A3FBFFF04000000000000 - 00000000000000000000000000000000000000000000000000005599AA3C62C7 - E0FF67DCFAFF64DAF9FF62D7F8FF5FD6F8FF5CD3F8FF58D0F6F657CEF5CD52CC - F5A050C9F3724EC3F04445B9E716000000000000000000000000569DAC4460BA - CFFF6CE0FCFF6ADEFCFF67DCFCFF64DAFAFF61D8FAFF5ED6FAFF5CD4F9FF59D2 - F8FF57CFF7FF54CCF7FF51C9F5F955BBDD1E00000000000000005AA1B14C5DAD - BEFF72E4FBFF6FE2FBFF6CE0FCFF6ADEFBFF67DCFBFF64DAFAFF61D8FAFF5ED6 - FAFF5BD4FAFF58D2FAFF55D0FAFF53C9F19300000000000000005BA3B05460AC - BCFF71DAEDFF74E6FCFF72E4FCFF6FE2FCFF6CE0FCFF6ADEFCFF67DCFCFF64DA - FBFF62D8FAFF5ED6FAFF5CD4FAFF59D1F7F658C7DD170000000062B4C55D68C0 - D1FF6ED0E0FF7AE9FBFF77E8FCFF75E6FBFF72E4FCFF6FE2FBFF6DE0FCFF6ADE - FBFF67DCFBFF64DAFAFF62D8FAFF5ED6FAFF5BD0F188000000006FD1E36575E0 - F3FF72DAEBFF7BE4F5FF7AE5F6FF79E5F7FF76E5F8FF75E6FCFF72E4FCFF73E1 - F9FF6FE0FAFF6ADEFCFF67DDFCFF64DAFBFF61D6F7F15AC3D21170D7E96D78E8 - FBFF76E6FCFF74E5FBFF72E4FAFF71E2F9FF72E0F8FF71DEF4FF6FDDF5FF69D6 - F0FF6CD5EEFF6ED5EDFF6CD3ECFE75DEF58771DDF8A965D2EC4473D9E9757BEA - FCFF78E8FCFF76E7FCFF74E6FCFF72E4FCFF70E2FCFF6DE1FCFF6BDFFCFF68DE - FCFF66DCFCFF64DAFAFF61D7F8FF7FFFFF04000000000000000073D6E3527CE8 - F8E67AE8F8FC79E9FBFF77E8FCFF75E6FBFF73E4FCFF70E3FBFF6EE1FCFF6CDF - FBFF69DEFCFF67DCFBFF64DAFAFF66CCE50A0000000000000000000000000000 - 000055D4D40677DDEE1E76E4F13A76E1F65673E2F3737EE2F4F89FE8F8FF90E6 - F9FF81E3FAFF71DCF3FF66DBF9FD6AD4D40C0000000000000000000000000000 - 0000000000000000000000000000000000000000000087DCEA86BEEAF1BFC3EB - F2D9C7EAF2F2BFB989FF69D7EF82000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000007FDADA0E71E2E209000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem5: TMenuItem Action = acArcSave - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 20000000000000040000640000006400000000000000000000000C0C0C001616 - 14920E73CB9F0F74CCA00F74CCA00F74CCA00F74CCA00F74CCA00F74CCA00F74 - CCA00F74CCA00F74CCA00F74CCA00C71C99D161414920C0C0C00171715802928 - 26FF0380EEFF0380EEFF0380EEFF0380EEFF0380EEFF0380EEFF0380EEFF0380 - EEFF0380EEFF0380EEFF0380EEFF0380EEFF292827CF171715801B1B19802B2A - 28FFFAE6CFFFFAE6CFFFFAE5CFFFFAE5CFFFFAE5CFFFFAE6CFFFFAE6CFFFFAE6 - CFFFFAE5CFFFFAE6CFFFFAE6CFFFFBE6CFFF2C2B28CF1B1B1980211F1F802F2E - 2CFFEEE2D3FFEEE2D3FFEEE2D3FFEEE2D3FFEEE2D3FFEEE2D3FFEEE2D3FFEEE2 - D3FFEEE2D2FFEEE2D3FFEEE2D3FFEEE2D3FF2F2E2CFF211F1F80252523803332 - 2FFFFCE7D1FFFCE8D1FFFCE7D1FFFCE7D1FFFCE7D1FFFBE7D1FFFBE7D1FFFCE7 - D1FFFCE7D1FFFCE7D1FFFCE7D2FFFCE7D1FF33312FFF252323802B2929803735 - 33FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3 - D5FFEEE3D5FFEEE3D5FFEEE3D5FFEEE3D5FF373633FF2B2927802F2F2D803C3A - 38FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9 - D4FFFCE9D4FFFCE9D4FFFCE9D4FFFCE9D4FF3B3A38FF2F2D2D8035333380403E - 3CFFEEE4D6FFEEE4D6FFEEE4D6FFEEE4D7FFEEE4D6FFEEE4D6FFEEE4D7FFEEE4 - D6FFEEE4D6FFEEE4D6FFEEE4D6FFEEE4D6FF403E3CFF35333180393737804543 - 41FFF8E6D2FFFCEAD6FFFCEAD6FFFCEAD6FFFCEAD6FFFCEAD6FFFCEAD6FFFCEA - D6FFFCEAD6FFFCEAD6FFFCEAD6FFF6E5D1FF454341FF393737803D3B3B804947 - 45FF4A4745FF4A4745FF494745FF494745FF494745FF4A4745FF494745FF4947 - 45FF4A4745FF494745FF4A4745FF4A4745FF4A4745FF3D3B3B80413F3D804E4C - 4AFF514E4BFF4E4C49FFBCBCA2FFBDBDA2FFBDBDA2FFBDBDA2FFBEBEA5FFBFBF - ACFFBFBFAAFFB4B49BFF4B4846FF4E4B49FF4E4C4AFF413F3D80454341805250 - 4EFF524F4DFF4D4A48FFE7E7C8FFEAEACAFFEAEACAFFEAEACAFFC3C2A9FF4E4C - 4AFF75746AFFE6E6C7FF4D4A48FF52504EFF52504EFF43414180474543805653 - 51FF54514EFF504D4BFFE7E7CCFFECECD1FFECECD1FFECECD1FFC4C3AEFF5351 - 4EFF79786FFFE8E8CEFF504D4BFF565351FF565351FF47434380494745805957 - 55FF555350FF52504EFFE6E6CFFFEFEFD9FFEFEFD9FFEFEFD9FFC4C4B3FF5856 - 54FF7E7C75FFEBEBD6FF52504EFF5A5754FF5A5655FF494745804B4947805C59 - 58FF575451FF545250FFE4E4D1FFF1F1E0FFF1F1E0FFF1F1E0FFC4C4B7FF5452 - 50FF7C7A74FFEDEDDDFF545250FF5C5A58FF5C5A57FF4B494780494946505250 - 4EBF4D4A49BF4C4948BFE1E1D4FFE9E9DDFFE9E9DDFFE9E9DDFFE9E9DDFFE9E9 - DDFFE9E9DDFFE7E7DBFF4D4A49BF52504EBF514E4EB63838381B - } end object MenuItem6: TMenuItem Action = acArcSaveAs - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000002020 - 1574224158851A48718919446B8E18426591183F6294173E5F96173D5D96173D - 5E95183E60921A42628E1B44658A293E48863232207500000002000000003939 - 32FF5581ADFF589EE6FF569AE1FF5497DCFF5293D7FF5090D2FF4E8CCDFF4C89 - C8FF4A85C3FF4882BFFF4680BBFF4D6980FF454539FF00000000000000003838 - 2FFFA9A9A7FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1 - D1FFC9C9C9FFC9C9C9FFC9C9C9FF85857FFF424235FF00000000000000002323 - 17FFA8A8A5FF8BA7B1FFC6C6C6FFC6C6C6FFC6C6C6FFC2C2C2FFC0C0C0FFBEBE - BEFFBDBDBDFFBCBCBCFFC3C3C3FF84847EFF343422FE00000000000000002626 - 19FFABABA8FFE7E7E7FF8BA7B1FF8BA7B1FF3A7F95FFD3D4D5FFD4D4D4FFD1D1 - D1FFCDCDCDFFC9C9C9FFC6C6C6FF8A8A83FF363623FE00000000000000002828 - 1BFFAEAEABFFE3E3E3FF8BA7B1FF8BA7B1FF295360FF3A7F95FFBBC2C4FFC2C2 - C2FFBFBFBFFFBCBCBCFFC3C3C3FF8D8D86FF383826FE00000000000000002929 - 1BFFB1B1AEFFF0F0F0FF7CBED2FF295360FF295360FF215465FF68A5B8FFD6D8 - D9FFD6D6D6FFD2D2D2FFCFCFCFFF909089FF393926FE00000000000000002B2B - 1DFFB4B4B0FFECECECFFDBDBDBFF7CBED2FF295360FF295360FF245160FF66A8 - BDFFC5C6C7FFC4C4C4FFCBCBCBFF92928BFF3C3C27FE00000000000000002C2C - 1DFEAEAEA9FFF7F7F7FFF5F5F5FFF2F2F2FF7CBED2FF295360FF295360FF2852 - 5FFF72B6CBFFDCDCDCFFD9D9D9FF919188FF3D3D28FE00000000000000002E2E - 1FFE363626FF454536FF464637FF474738FF484838FF7CBED2FF295360FF2953 - 60FF295360FF377986FF4F4F3DFF41412CFF3F3F2AFD00000000000000003131 - 20FE383828FF3E3E2EFF3D3D2DFF464639FF49493AFF4A4A3BFF7CBED2FF2953 - 60FF295360FF265563FF2C656BFF40402AFF42422BFD00000000000000003333 - 22FE464636FF484830FF60604DFFCECECEFFE2E2E2FFEFEFEFFFF5F5F5FF7CBE - D2FF295360FF295360FF235868FF2C656BFF43432CFD00000000000000003434 - 23FE464636FF4A4A31FF636350FFC9C9C9FFDDDDDDFFEBEBEBFFF1F1F1FF9393 - 93FF7CBED2FF295360FF295360FF295360FF2C656BFF00000000000000003535 - 23FE474736FF4B4B32FF646451FFC3C3C3FFD5D5D5FFE5E5E5FFEBEBEBFF9191 - 91FF383838FF7CBED2FF295360FF295360FF295360FF2C656BFF000000003838 - 25F5464636F94A4A34F5636352F7C0C0C0FFCBCBCBFFD7D7D7FFDCDCDCFFAFAF - AFFF7E7E7EFFAFAFAEF07CBED2FF295360FF295360FF0E2E38D8000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000007CBED2FF0D2D37E0282C2C39 - } end object MenuItem28: TMenuItem Action = acArcCloseFile - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000001E6BA072145C89971A5F99220000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000081D8DD0A15ABE1E70AC4FAFF0BABE0F60C678E9A0284A822000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00004CA4C3631BDAFEFF12C7F9FF03CEFFFF02CDFEFF0BABE0F60C658B950188 - AB1C000000000000000000000000000000000000000000000000000000000000 - 00002BA9D2CD2CE5FFFF22D0F9FF07D0FEFF05CFFFFF03CDFEFF07C3F0FF2D99 - BBF416607E870093B91000000000000000000000000000000000000000005EAD - C23A44E5FBFE3FEDFFFF35E1FCFF12CCFBFF0FC5EDFF29BCDBFF44C0D9FF49C3 - DDFF30BEDDFE0C8FB6E40745425C000000000000000000000000000000003FA1 - C2A65EF7FFFF42D1CEFF56BAB8FF50AEC5FF47C5DFFF49C8E4FF49C7E3FF49C6 - E2FF47C3DDFF0BB2C4FF0A9A8FEE1280AD6400000000000000004694C11A5FDB - F2F773F5F7FF669253FF3E7E2EFF7AA3A6FF4ACCEAFF4ACBE9FF4ACAE8FF4AC9 - E7FF4AC9E5FF2AA696FF14AC7CE214B4E7A600000000000000002F80B57E88FD - FEFF82FDFEFF9DB282FF1DA52CFF1C912FFF40AFC0FF4ACEEDFF4ACEEDFF4DCF - ECFF51D1EAFF31AA6FFF22BA82E221DDFDB357ACC7380000000045A7DFB68CFA - FDFF90FEFFFF82D2B8FF2AB440FF2EBA45FF29A43EFF82BDC5FF59D0EEFF58D9 - F0FF50C6CAFF3AC35AFF32C291E439EAFEB338A2C776000000000000000067CE - F45863D0F4D571DDD3FE38C555FF3CCB5BFF3ECE5FFF5EAF68FFB0B9B1FF6DB9 - BAFF47C977FF4CDF74FF57C5A2FB53EEF7BA47D0EFAA5BABD409000000000000 - 000000000000317C567455A243DA6DC77AFF4DE074FF4FE378FF51E37BFF54E7 - 7FFF56EC84FF43CA66FF7EE1E2FF7BEBE8DA6EF7FEB3398AC83A000000000000 - 00000000000031791D3962DC7A11E3C9A4DE64C274FF56EB83FF5DF48DFF5FF6 - 90FF52E77DFF7FBA7EFFDAE4ECFF9CD6E2F97DF3F8B748A0CC6E000000000000 - 0000000000000000000000000000969D506CF8F7F3FF87C089FF3AB24CFF2CAC - 3FFF69B06AFFF7F4EFFFFDF7F3FFF7DDCBF46A8FAC6740A0E45D000000000000 - 0000000000000000000000000000C7CDAE0AF6D8C0E8FFFDFCFFFCFBF9FFF7F8 - F4FFFEFCFAFFF7DDC8ECF2C9A783F8E3D1160000000000000000000000000000 - 000000000000000000000000000000000000F2C7A47CFEFEFEFFFEFDFDFFF6D9 - C2E3F3CBAB73FAEADC0D00000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F2C9A712EFBB8FC7ECB07D630000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem27: TMenuItem Action = acArcCloseProj - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000001E6BA072145C89971A5F99220000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000081D8DD0A15ABE1E70AC4FAFF0BABE0F60C678E9A0284A822000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00004CA4C3631BDAFEFF12C7F9FF03CEFFFF02CDFEFF0BABE0F60C658B950188 - AB1C000000000000000000000000000000000000000000000000000000000000 - 00002BA9D2CD2CE5FFFF22D0F9FF07D0FEFF05CFFFFF03CDFEFF07C3F0FF2D99 - BBF416607E870093B91000000000000000000000000000000000000000005EAD - C23A44E5FBFE3FEDFFFF35E1FCFF12CCFBFF0FC5EDFF29BCDBFF44C0D9FF49C3 - DDFF30BEDDFE0C8FB6E40745425C000000000000000000000000000000003FA1 - C2A65EF7FFFF42D1CEFF56BAB8FF50AEC5FF47C5DFFF49C8E4FF49C7E3FF49C6 - E2FF47C3DDFF0BB2C4FF0A9A8FEE1280AD6400000000000000004694C11A5FDB - F2F773F5F7FF669253FF3E7E2EFF7AA3A6FF4ACCEAFF4ACBE9FF4ACAE8FF4AC9 - E7FF4AC9E5FF2AA696FF14AC7CE214B4E7A600000000000000002F80B57E88FD - FEFF82FDFEFF9DB282FF1DA52CFF1C912FFF40AFC0FF4ACEEDFF4ACEEDFF4DCF - ECFF51D1EAFF31AA6FFF22BA82E221DDFDB357ACC7380000000045A7DFB68CFA - FDFF90FEFFFF82D2B8FF2AB440FF2EBA45FF29A43EFF82BDC5FF59D0EEFF58D9 - F0FF50C6CAFF3AC35AFF32C291E439EAFEB338A2C776000000000000000067CE - F45863D0F4D571DDD3FE38C555FF3CCB5BFF3ECE5FFF5EAF68FFB0B9B1FF6DB9 - BAFF47C977FF4CDF74FF57C5A2FB53EEF7BA47D0EFAA5BABD409000000000000 - 000000000000317C567455A243DA6DC77AFF4DE074FF4FE378FF51E37BFF54E7 - 7FFF56EC84FF43CA66FF7EE1E2FF7BEBE8DA6EF7FEB3398AC83A000000000000 - 00000000000031791D3962DC7A11E3C9A4DE64C274FF56EB83FF5DF48DFF5FF6 - 90FF52E77DFF7FBA7EFFDAE4ECFF9CD6E2F97DF3F8B748A0CC6E000000000000 - 0000000000000000000000000000969D506CF8F7F3FF87C089FF3AB24CFF2CAC - 3FFF69B06AFFF7F4EFFFFDF7F3FFF7DDCBF46A8FAC6740A0E45D000000000000 - 0000000000000000000000000000C7CDAE0AF6D8C0E8FFFDFCFFFCFBF9FFF7F8 - F4FFFEFCFAFFF7DDC8ECF2C9A783F8E3D1160000000000000000000000000000 - 000000000000000000000000000000000000F2C7A47CFEFEFEFFFEFDFDFFF6D9 - C2E3F3CBAB73FAEADC0D00000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F2C9A712EFBB8FC7ECB07D630000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem26: TMenuItem Caption = '-' @@ -2391,444 +2281,48 @@ object frmPrincipal: TfrmPrincipal end object mnExit: TMenuItem Action = acArcQuit - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000A35C0BDCD390 - 1DCED2911D72D2901B2ED7931D1ADA9124070000000000000000000000000000 - 0000000000000000000000000000000000009B561B4A1F191C51A25D0BE7D391 - 1CFFD2901CFFD2901CFFD2901BDFD18F1BB9D2911C90AA621C58000000000000 - 0000000000000000000000000000000000009D581FE11F1A1CFF93580CFFD392 - 1EFFD2901DFFD2901DFFD2901DFFD2901DFFD3921DFFAD631FFF000000000000 - 0000000000000000000000007F0400000000A35D22DD1F1A1CFF985B0CFFD592 - 1FFFD4911FFFD4911FFFD4911FFFD4911FFFD5921EFFB16923FF000000000000 - 000000000000000000001613CEB82424DA07AF6A21DA1F1B1DFF9C5F0EFFD594 - 21FFD49220FFD49220FFD49220FFD49220FFD59420FFB46E27FF000000000000 - 000000000000000000001919D9FF171BEAB894583BEA221B1BFFA06111FFCC8D - 25FFD69523FFD59524FFD59524FFD59524FFD69624FFB8722BFF2835ECFF2330 - EDFF232FEDFF222EEDFF2430F0FF2433F5FF2328D6FF131337FFAA7837FFCECB - C5FFCA871FFFD79829FFD79829FFD79829FFD89928FFBD782EFF5765F1FF2B43 - F4FF2C43F4FF2B42F4FF2B40F4FF2A3FF4FF293DF5FF3D4BDFFF916457FFE0B6 - 62FFDCA542FFD99E32FFD89B2EFFD89B2FFFD99D2FFFC07D32FF5E6FF3FF3A56 - F5FF3B55F5FF3B54F5FF3851F4FF2F49F4FF5B70F7FF2A2CBBFFB27A30FFE1B4 - 58FFE0B357FFE1B45AFFDDAA48FFDAA13AFFDBA238FFC68436FF535AF0FF5E69 - F2FF5D68F2FF5E69F2FF4B5DF4FF6D88FAFF755FACFF1B1821FFB6823AFFE4B9 - 64FFE3B762FFE3B762FFE3B863FFE3B55FFFE1AD4EFFCB893AFF000000000000 - 00000000000000000000444AF2FF3539F9DCC98A2BD2221C1BFFBD8942FFE7BE - 6FFFE6BD6EFFE6BD6EFFE6BD6EFFE6BD6EFFE7BE71FFCF9341FF000000000000 - 000000000000000000001D18F0C62412EC0EC98C39DC211C1BFFC39149FFEAC6 - 7BFFE9C57AFFE9C57AFFE9C57AFFE9C57AFFEAC67CFFD49847FF000000000000 - 000000000000000000000000000000000000C99040DD211D1BFFC89852FFEECC - 89FFEDCB88FFEDCB88FFEDCB88FFEDCB88FFEECC8AFFD89F4BFF000000000000 - 000000000000000000000000000000000000CE9744DD221E1BFFD5A75FFFF6DA - 9BFFF3D697FFF1D596FFF1D596FFF1D596FFF2D698FFDCA550FF000000000000 - 000000000000000000000000000000000000D19C48DD32281FFF4D4030FF8872 - 54FFC4AB7DFFE2CA97FFEED59DFFF4DAA1FFF6DEA6FFE0AC57FF000000000000 - 000000000000000000000000000000000000E2AE50DDC69949FFC39648FFC094 - 47FFBE9346FFBB9045FFD7A651FFE4B45BFFE8BA64FFE3AF52FF - } end end object mnEdit: TMenuItem Caption = '&Edicion' object MenuItem9: TMenuItem Action = acEdUndo - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000007F - 000400711C09007F120E0072191400751D1A00751D1A0075130D007F00020000 - 00000000000000FF0001007F0002000000010000000000000000007F00020074 - 151800751B41007519590076195A00751A570076184900741A3000721A1D007A - 1E1900761B1C007317210077172000791815007F2A0600000000000000000055 - 0003007415180075183F00731A4D0073174000731B3700731B37007819330074 - 1B2E007219280073181F0072191400711C09007F000200000000000000000000 - 000000000001007F2A061E983D1914B4445926C45FA10CC8672A00550003007F - 0002007F000200000001000000000000000000000000000000000000000039B2 - 592824BA506F18BE4FBA10C04EF60ABF4BFD1ED26FFF0CC36151000000000000 - 000000000000000000000000000055AA5503000000000000000029BA596F1FC3 - 57F90AC14CFD07BF48FE06BF46FF0DBF46FF1ACE6EE000AA5503000000000000 - 000000000000A2E7B90B2FAA4C9D07A035E00CBF5914000000001FAF5A3044C8 - 6AFD19BE48FF05B736FF04B031FF04A92DFF16AA38E247C1674FA9E2C60985E6 - A9153ABA5E6419A63EDE039527FF049627FF09AD41B600FF00010000000062C7 - 7ACA5AC870FF16B93DFF05B734FF06B836FF06B737FF05B236FF10AF3EFE0BA8 - 38FD05A433FE05A633FF05AE36FF05B839FF07B53CF514BA5925000000006BCB - 896892DCA5FF6BD789FF19D154FF07D44CFF07D54EFF07D34EFF06CB49FF06C3 - 44FF05C041FF05C340FF05CF49FF06CD49FB1BC6597A00000000000000001FAF - 5F10B1E9C3F49EEAB7FF5EE48EFF24E676FF08E468FF09E467FF08E163FF08DD - 5EFF08DA58FF08D651FF0CCA46F827D7627A00FFFF0100000000000000000000 - 0000B6E7C7A291EBB7FF0BCB62B731CD63850DCA4FD409C949FD08C645FF08C0 - 3EFE0DC03DEB1AC547A13FD96A30000000000000000000000000000000000000 - 00008CD0AE3C3FD686FE0DEC8637000000000000000000A9380911AF341D28BB - 431300FF00010000000000000000000000000000000000000000000000000000 - 0000007F7F020FB7563200000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem11: TMenuItem Action = acEdRedo - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000001007F000200FF00010000000000000000007F0002006D120E0075 - 1D1A00751D1A00721914006D120E00711C0900AA00030000000000000001006D - 240700731716007317210077172000761B1C007A1E190077191E007519320075 - 1B4A00751A570075195B00731A580075183F00731716007F0002000000000055 - 0003007F190A007918150073181F0072192800711B2F0075183400731B370073 - 1B3700751B4100771A4D0075193D00731716007F000200000000000000000000 - 0000000000000000000000000001007F0002007F00020099330519B651C51CC0 - 5AA323D775660CD26C2800663305000000010000000000000000000000000000 - 000000000000000000000000000000000000000000000000000009B7488C0BC1 - 49FE0DC349FD16CB55FD16C957DB18D2629B1CCF6A5B08B4521F000000000FA3 - 2B880A9C2C4B00000000000000000000000000000000000000000AAC40470ABA - 39FE0ABB38FE0ABB36FE0ABB35FE11BD3AFC1EC04AFD08A8415E0A98255F069C - 27FD059E2AFD099D29A40F962E3100FF0001009F3F080A9F2B5D07A62BEA07AD - 2EFE09B734FE0CC33DFE1FCD51FE3CD369FC1DCC65E200CC66050B9B24DD069B - 25FE059B24FE059C24FE05A027FE06A22BF506A92FFA07B136FE09B93DFE0BC6 - 47FE0DD554FE2DE36FFE57EB8FFD53E089FD11E47E7300000000129E2C45099F - 27F805A62DFE05B734FE06C43DFE07C542FE07C644FE08CA49FE09D150FE0BDF - 60FE37EB83FE71F4AAFE92F5C0FD31E283EF12C86D0E0000000000000000098F - 234E0AA82EEE09C441FE09DA56FE09E364FE09E669FE0AE76DFE0EEB74FE45EE - 90FE63EA99FDAAF6CAFF90E8B1FE10D974880000000000000000000000000000 - 00001291361C10A4308F0CB035DE0CC143FA11CF52FC1BD960EB33E074C736D9 - 728828C35B38C6EDD2F344BD6FF809C4621A0000000000000000000000000000 - 00000000000000000000000000001F7F3F081C8D380900000000000000000000 - 00000000000084CA9C87119B4073000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem10: TMenuItem Caption = '-' end object MenuItem12: TMenuItem Action = acEdCut - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00020D8C0A1C27A69F353F - C9F7222DAFB9030D8C1CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00050F8D1F06108E26010B8A03FFFFFF00121C9B70404BD9FF2C35 - BFDD3D47D1FF1D27A9A4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000F199763323DC7F83741CFFF1F29ABB0000A8618232DB4AF3540CCFD0009 - 85181C27A895343EC5F8040E8C14FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF002F3ABDDE353FC9E52530B3C23F4ADDFF1F2AACC22430B2CB323CC6F2000A - 8603111B9D773741C8FF08128E20FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00323CC3EC232EADAFFFFFFF001A25A8994250D2FFCBA375FE414FD6FF1621 - A39D2F39C0D42E38BEDF020D8B0AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF001D28A99C3B46CCFF0812903A071190533B48D4FFDBBD9CFFEECCA6FF404C - DEFF3A43D1FF0F199869FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00030D8C1F2C35B9D73C46CFFF333ECAF23F4CD7FFD8BC9AFFF6EAE1FFBB92 - 5ABF9462183B91611A01FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00030D8C1F1B26A7992A34BACC111C9D89BB9869CCF0E0D0FFB791 - 5FC58F5D140BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000B8802FFFFFF00B48E5A90F6EADDFFE1CD - B4FFB18D5DBFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B38C5789F1E2D4FFCEB2 - 8EF4F5EBE0FFA67F4A9DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B1895384EEDFCEFF9766 - 2065C2A37CDAE9D8C5FDA9824E7BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AF87507CE7D5C1FF9565 - 1F2B8F5C121BC5A783E7D5BC9DE1B5936462FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AC834B75DEC9AFFF9564 - 1D1FFFFFFF0092601726C3A47CEBB59063CBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AA81476FD6BD9FF79361 - 1910FFFFFF00FFFFFF009666202CA9804BCBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A87D4269CCB08BE0915D - 1409FFFFFF00FFFFFF00FFFFFF0092601706FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009A6B2731AA7E43A19260 - 1805FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } end object MenuItem13: TMenuItem Action = acEdCopy - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000000000000000000000000000000000000AA745F1877564353070700220000 - 0007000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FF000001EFAE8EC5FAD7C4FFEABDA3F3C494 - 77CAA37B628C5742344900000019000000040000000000000000000000000000 - 0000000000000000000000000000E395704BFADED0FFFFFAF9FFFFFFFEFFFFFC - FAFFFDEBE0FFFBDBC5FFE2BB9FEAC0977ABB9677627A0B000016000000000000 - 0000BA8468387F5C4A600D0D0627E79D7DB1FFFCF9FFFEE2D7FFFCCEBEFFFCCF - BEFFFDDDD1FFFFF9F7FFFFFFFFFFFFF9F5FFFAD0B1FC8A6F593900000000D08B - 7316F3BCA1EFFBDCCAFFEDA183F6EEB49EFBFFF1EAFFFDD1C1FFFEECE4FFFFFD - FBFFFEF0EAFFFDD4C6FFFEE6DDFFFDF0E7FFD5A2828D0000000000000000EA9A - 7786FDF2EDFFFEF2EEFFF6B098FFF5CAB9FFFFF5EDFFFFF3ECFFFDDBCDFFFCCD - BBFFFCCEBDFFFDD8CAFFFFFDFBFFEFC1A8F554422F1B00000000FF7F7F02F0B6 - 9EE5FFFCFAFFFDDED2FFF19576FFF8D8CAFFFEDCCAFFFCC9B3FFFCCBB7FFFEDE - D1FFFFF7F1FFFEF2EBFFFEF8F5FFCE8F71B90000000100000000E1825A33F6CF - BFFFFEE8DEFFFDD0C0FFED9071FFFBE1D3FFFDD2BCFFFEDAC7FFFFEEE1FFFEE0 - D0FFFDCCB7FFFDD9CAFFFBE6DBFFB274587F0000000000000000E078546CFBE4 - D9FFFFF3EAFFFFF5EEFFEA8D70FFFDE4D2FFFFE0C8FFFED2B9FFFCC4AAFFFCC6 - AEFFFDCCB6FFFEE8DBFFF8D5C5FF8D5742550000000000000000E0745095FEF1 - E7FFFDD6C2FFFCC9B3FFE98668FFFEE1CBFFFFD8B9FFFFDDC1FFFFE1C8FFFFE5 - CFFFFFE5D1FFFEE1CFFFF5C6B4FF5734273A0000000000000000E27C5CB0FFED - DFFFFDCAB2FFFED7C4FFEFAE98FFE7937CFFF1B7A1FFFCDAC5FFFFE1C8FFFFDC - C0FFFFE0C7FFFFE4CEFFF1BAA6FF2217112C0000000000000000E28064BCFFE5 - D0FFFFE1C9FFFED5BDFFFCC4AAFFFCC4ABFFF4A78CFFEC9F85FFE69279FEEAA5 - 90FBF5C7B3FFFEE5D3FFEDAC95FE180C06290000000000000000E27D62BDFFDE - C2FFFFD8B8FFFFDCC0FFFFE1C9FFFFE4CFFFFFE6D3FFFFE8D8FFE1A994F15A25 - 1622DD643F4CDF6D4B91DC6D4ABB1111000F0000000000000000D7532F80E691 - 7AEBF0B49EFFFBD7C2FFFFE2CAFFFFDDC1FFFFE0C7FFFFE7D3FFD69983E80000 - 000F00000000000000000000000000000000000000000000000000000000FF7F - 0002D6563232D8593577E27E63BBEBA48EF6F5C4B0FFFDE5D6FFD1866DE60000 - 000E000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000E2543809DA633E45DF684489D064448E0000 - 0003000000000000000000000000000000000000000000000000 - } end object MenuItem14: TMenuItem Action = acEdPaste - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 200000000000000400006400000064000000000000000000000000000000000F - 1E110035545100131C350000000F000000010000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000598C282883 - C0E94DB0E9FF3F9FD6FC2C80AEDD155A81A700304C6400060C28000000090000 - 000000000000000000000000000000000000000000000000000005629A6543A1 - E8FF57BAF4FF5ABEF7FF59BDF4FF57BCF1FF76B4D4FF7194A7F7387798D10D4E - 73960021344D000000080000000000000000000000000000000005649C6544A3 - E9FF54B6F3FF58BBF5FF399CD4FF3389B9FFE8BDA8FFFCE7DCFFFAD6C1FFDCC8 - B9FF9AA3A4FC73675F962B211C350000000F000000010000000005649C6545A4 - E9FF51B2F0FF55B7F3FF3799D2FF87919BFFFDF2ECFFFEE3DAFFFFF7F4FFFFFF - FFFFFEF8F4FFFDE8DAFFF7D6BEFBD6AF92DDA5846A9C0000000F05649C6546A4 - EAFF4DADEEFF52B3F1FF3597D1FFD3AC9FFFFFFCF9FFFEF1ECFFFDD6C7FFFCCE - BEFFFCCFBFFFFDE2D8FFFFFCFCFFFFFAF6FFEEBC98C80000000807649C6546A5 - EAFF48A8EBFF4EAFEFFF4D94C3FFF5C7B5FFFEEBE2FFFCCDBBFFFDD3C3FFFEEE - E7FFFFFDFBFFFEEBE4FFFEF3EEFFF5D0BAF98E70582B0000000007649C6547A5 - EAFF44A2E8FF4AA9ECFF748FABFFF9DACDFFFEE3D5FFFFEFE6FFFFF3ECFFFDDA - CCFFFCCDBBFFFDD8CAFFFEF8F4FFD19777B3000000010000000007649C6547A6 - EAFF3E9BE5FF45A3E9FF8D8695FFFCE7DBFFFEE5D6FFFDCEB9FFFCC9B4FFFCCB - B8FFFDDDD0FFFFF6F1FFFADFD2FFAB735868000000000000000007649C6547A6 - EAFF3894E1FF3F9DE6FF9D8087FFFEEBDDFFFDCAB1FFFCC5ADFFFDD7C4FFFFEF - E3FFFEE2D4FFFEE3D6FFF6CAB6FF55372D33000000000000000007679C6546A5 - EAFF318BDEFF3694E4FFA37C82FFFFE6D1FFFFDEC4FFFFE2CBFFFED7C0FFFDC5 - ACFFFCC6AEFFFEE4D5FFE8B5A0F500000018000000000000000007659C6248A7 - EBFF2482DEFF05C2FFFF28B1DFFF79C6E2FFBFC2C7FFF8D8BDFFFFDEC3FFFFE2 - CBFFFFE6D2FFFFEBDBFFD9A08BE80000000F000000000000000000649A1C3C9E - D5EF3492E3FF42C9FEFF23DDFFFF00DDFFFF00E1FFFF0CCEFBFF4AC9EAFF90C4 - DAFFEDD8C8FFFFE5D0FFD0907AE30000000C0000000000000000000000000060 - 951D1A7BAF741E86CDB831AAEEF500BAFFFF00C7FFFF00D3FFFF09E1FFFF01E5 - FFFFB09AAAFFF2BDAAFFCB7559DF0000000A0000000000000000000000000000 - 00000000000000000000289FFC5847C3FEFE2CBFFFFF07B3FFFF2BB3F6FF4DBA - F8FF3C9DDDFE5B697E91D265443F000000000000000000000000000000000000 - 0000000000000000000000000000007FFE2A31A6FE7154C3FEB0238DDD6C0361 - 964C005990250000000000000000000000000000000000000000 - } end object MenuItem15: TMenuItem Caption = '-' end object MenuItem16: TMenuItem Action = acEdSelecAll - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000DDDDDD53E6E6E6FFE8E8E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFE9E9 - E9FFE9E9E9FFE8E8E8FFE5E5E5FFDEDEDE470000000000000000000000000000 - 0000E5E5E5AAF4F4F4FFF5F5F5FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 - F6FFF6F6F6FFF5F5F5FFF8F8F8FFE6E6E6940000000000000000000000000000 - 0000E5E5E5AAF5F5F5FFF6F6F6FFF7F7F7FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8 - F8FFF8F8F8FFF6F6F6FFF9F9F9FFE6E6E6940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF7F7F7FFF8F8F8FFFAFAFAFFE8E8E8FFF9F9F9FFFAFA - FAFFF9F9F9FFF8F8F8FFFAFAFAFFE6E6E6940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFFAFAFAFFFBFBFBFFE8E8E8FFFCFCFCFFFCFC - FCFFFAFAFAFFF8F8F8FFFAFAFAFFE8E8E8940000000000000000000000000000 - 0000E8E8E8AAF6F6F6FFF8F8F8FFFAFAFAFFFCFCFCFFECECECFFEAEAEAFFFDFD - FDFFFBFBFBFFF9F9F9FFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E8E8E8AAF6F6F6FFF8F8F8FFFBFBFBFFFCFCFCFFFEFEFEFFDADADAFFFDFD - FDFFFCFCFCFFFAFAFAFFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFFAFAFAFFFCFCFCFFE8E8E8FFDCDCDCFFFCFC - FCFFFBFBFBFFF9F9F9FFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFF9F9F9FFFAFAFAFFFCFCFCFFFCFCFCFFFBFB - FBFFFAFAFAFFF8F8F8FFFAFAFAFFE8E8E8940000000000000000000000000000 - 0000E5E5E5AAF5F5F5FFF6F6F6FFF8F8F8FFF9F9F9FFFAFAFAFFFAFAFAFFF9F9 - F9FFF8F8F8FFF7F7F7FFF9F9F9FFE6E6E6940000000000000000000000000000 - 0000E0E0E095F1F1F1FFF4F4F4FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 - F6FFF6F6F6FFF5F5F5FFF2F2F2FFE0E0E07F0000000000000000000000000000 - 000000000000DDDDDD6ADDDDDD6ADFDFDF6AE2E2E26AE4E4E46AE4E4E46AE2E2 - E26AE2E2E26ADDDDDD6ADDDDDD6A000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end end object mnFind: TMenuItem Caption = '&Buscar' object MenuItem1: TMenuItem Action = acSearFind - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 00070000000E0000000D00000005000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000131010 - 106D422F27A65D514C9F24242462000000170000000000000000000000000000 - 00000000000400000026000000460000004600000024000000030D0D0D625E3D - 27FDC3AA83FFCEB490FF81634EFD1C1C1C860000000600000000000000000000 - 00000A0A0A315A3D2ED0A28264FE98775CFE352219C900000024311B0DA4B295 - 5AFFF0E79CFFF1E99EFFD1BD7DFF3C281EDA0000000B00000000000000000000 - 00042F201795AB8953FFEDE499FFF1E99EFFB2955DFF21150E7927160DA8A073 - 2CFFD8B346FFDCB646FFBA903BFF2F2118E10000000D00000000000000000000 - 0007371E0FCBB18633FFDCB646FFDCB646FFC0963AFF4122119311111173563E - 31FF955E2DFFAB6F32FF634733FF232323EC0000000F00000000000000000000 - 000A131212D46D3F1AFFA46012FFAE6713FF844D1EFF1B1717820F0F0F203333 - 33FE7E7E7EFFA5A5A5FF606060FF272727F70000001200000000000000000000 - 000D1C1C1CE0404040FF7E726CFFA69992FF535353FF1010103D000000082323 - 23DF565656FF939393FF616161FF282828FE0000001600000000000000000000 - 00101E1E1EEF535353FF7F7F7FFF666666FF232323F40000000E000000022525 - 25A8565656FF7A7A7AFF3C3C3CFF1B1B1BFF0202026D000000400000003F0000 - 0056181818FC3D3D3DFF707070FF5D5D5DFF242424C300000004000000002626 - 2672565656FF7B7B7BFF484849FF1F2020FF121212FB202020EE171717EE1414 - 14F6181819FF3D3D3EFF6D6D6DFF5D5D5DFF2727278600000000000000001C1C - 1C36565656FF848484FF646466FF414242FF1F1F1FFF242424FF1C1C1CFF2F2F - 2FFF535455FF727374FF787878FF5D5D5DFF2424244500000000000000000000 - 0008575757EA929292FF646466FF414242FF1F1F1FFF252626FF202020FF3030 - 30FF535455FF727374FF7E7E7EFF5C5C5CE70000000900000000000000000000 - 00005A5A5A22303030C6242525FF393939B6272727992727279C2020209C3535 - 35994A4A4BB23D3E3EFF292929EC606060450000000000000000000000000000 - 0000000000000000006C303030FF636365AE0000000000000000000000000000 - 000077797B7A585859FF141414AC000000000000000000000000000000000000 - 00000000000000000014303232A8707070560000000000000000000000000000 - 00007F85852E575758AF1A1A1A4D000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem2: TMenuItem Action = acSearFindNxt - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000A000000120000001100000008000000000000000000000000000000000000 - 0000000000000000000800000011000000120000000A000000000000000F5456 - 5190747673EE747673EE4C4D4890000000120000000000000000000000000000 - 00000000001254545190747673EE747673EE4D4D4A900000000F474744646264 - 63FF3A3A3AFF5B5B5BFF7A7C7BFF3E3E396A0000000900000000000000000000 - 000943433E6A626463FF3A3A3AFF5B5B5BFF7A7C7BFF42423D6370716DA62121 - 21FF999999FF8E8E8EFF545454FF5E5F5BC822221E3B00000009000000092323 - 1F39636460C8212121FF999999FF8E8E8EFF545454FF686966A660605C8F3C3D - 3CFF888888FF494949FF4E504FFF636562FF636460F206060628060606266467 - 63F06D6F6CFF3C3D3CFF888888FF494949FF4E504FFF5557528F34342E2C7F83 - 80FA4F5250FF4F5150FF676B69FF4E514DFF5F625FFF474741B2484843B16569 - 66FF545653FF8F9492FF4F5250FF4F5150FF626562FA34342E2C000000004D4D - 485C6F726EFC5F625EFF5E605CFF535755FF656866FF60625EFF5F615EFF7175 - 72FF535755FF6B6D6AFF767A76FF585A56FD3C3C365D00000000000000000000 - 000055534F80767976FF878B88FFA6ACA9FF60625FFF888C8AFF707472FF8083 - 7FFF919794FF636663FF565855FF48484385000000000055AA03000000000000 - 0000000000003A3A270D3538355B676965FF52524DE96E6F6BD73C6089F05894 - CFFF5F9BD4FF5997D3F461A4E6ED62AAEDF462ADEEFC60A1E7FF000000000000 - 00000000000000000000238DE7413C759E822249743B000000000000FF013685 - DFA068BDFAFF3EAFFCFF3EAFFCFF3EAFFCFF58BAFCFF88BBEEFD000000000000 - 000000000000000000002E92EB9E57B7FAAA0D69D34D00000000000000000055 - AA035D9DE3D84CB5FCFF3EAFFCFF50B7FCFFA0D8FEFF7EB2EAF1000000000000 - 00000000000000000000429BEBD243B1FBEE64AAECD3045ECD3E0761CE4461A0 - E6B86ABEFAFF3EAFFCFF54B8FCFF9FD7FEFFA8DBFEFF7DB1EADC000000000000 - 000000000000000000004994E39552B7FCFF4DB5FCFF71C1FAFF70C1FBFF4EB6 - FCFF3EAFFCFF53B8FCFF9FD7FEFFADDDFEFFA8DBFEFF85B5EBC3000000000000 - 00000000000000000000005FC9186CB0EFE64DB5FCFF3EAFFCFF3EAFFCFF3EAF - FCFF3EAFFCFF5ABAFCFFA8D6FAFF6CA4E5D8B4DDFBFF7CAFE9BA000000000000 - 0000000000000000000000000000005CCD2462A4E8C36EBAF6FF70C4FDFF6DC2 - FDFF6FBEF9FF6DADECE22F7CD85C007FFF024E8FDDA25594DFAC000000000000 - 00000000000000000000000000000000000000000000005BCE2A116BD3581670 - D75B005FD1380055FF030000000000000000007F7F02005BCD43 - } end object MenuItem45: TMenuItem Action = acSearFindPrv - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000A000000120000001100000008000000000000000000000000000000000000 - 0000000000000000000800000011000000120000000A000000000000000F5456 - 5190747673EE747673EE4C4D4890000000120000000000000000000000000000 - 00000000001254545190747673EE747673EE4D4D4A900000000F474744646264 - 63FF3A3A3AFF5B5B5BFF7A7C7BFF3E3E396A0000000900000000000000000000 - 000943433E6A626463FF3A3A3AFF5B5B5BFF7A7C7BFF42423D6370716DA62121 - 21FF999999FF8E8E8EFF545454FF5E5F5BC822221E3B00000009000000092323 - 1F39636460C8212121FF999999FF8E8E8EFF545454FF686966A660605C8F3C3D - 3CFF888888FF494949FF4E504FFF636562FF636460F206060628060606266467 - 63F06D6F6CFF3C3D3CFF888888FF494949FF4E504FFF5557528F34342E2C7F83 - 80FA4F5250FF4F5150FF676B69FF4E514DFF5F625FFF474741B2484843B16569 - 66FF545653FF8F9492FF4F5250FF4F5150FF626562FA34342E2C000000004D4D - 485C6F726EFC5F625EFF5E605CFF535755FF656866FF60625EFF5F615EFF7175 - 72FF535755FF6B6D6AFF767A76FF585A56FD3C3C365D00000000000000000000 - 000055534F80767976FF878B88FFA6ACA9FF60625FFF888C8AFF707472FF8083 - 7FFF919794FF636663FF565855FF48484385000000000055AA03000000000000 - 0000000000003A3A270D3538355B676965FF52524DE96E6F6BD73C6089F05894 - CFFF5F9BD4FF5997D3F461A4E6ED62AAEDF462ADEEFC60A1E7FF000000000000 - 00000000000000000000238DE7413C759E822249743B000000000000FF013685 - DFA068BDFAFF3EAFFCFF3EAFFCFF3EAFFCFF58BAFCFF88BBEEFD000000000000 - 000000000000000000002E92EB9E57B7FAAA0D69D34D00000000000000000055 - AA035D9DE3D84CB5FCFF3EAFFCFF50B7FCFFA0D8FEFF7EB2EAF1000000000000 - 00000000000000000000429BEBD243B1FBEE64AAECD3045ECD3E0761CE4461A0 - E6B86ABEFAFF3EAFFCFF54B8FCFF9FD7FEFFA8DBFEFF7DB1EADC000000000000 - 000000000000000000004994E39552B7FCFF4DB5FCFF71C1FAFF70C1FBFF4EB6 - FCFF3EAFFCFF53B8FCFF9FD7FEFFADDDFEFFA8DBFEFF85B5EBC3000000000000 - 00000000000000000000005FC9186CB0EFE64DB5FCFF3EAFFCFF3EAFFCFF3EAF - FCFF3EAFFCFF5ABAFCFFA8D6FAFF6CA4E5D8B4DDFBFF7CAFE9BA000000000000 - 0000000000000000000000000000005CCD2462A4E8C36EBAF6FF70C4FDFF6DC2 - FDFF6FBEF9FF6DADECE22F7CD85C007FFF024E8FDDA25594DFAC000000000000 - 00000000000000000000000000000000000000000000005BCE2A116BD3581670 - D75B005FD1380055FF030000000000000000007F7F02005BCD43 - } end object MenuItem17: TMenuItem Action = acSearReplac - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000200000005000000090000000D00000010000000125F5F5F209494943C9A9D - A0595986BA77D1D1D1978383834200000001000000000000000000000002A9A9 - A948B6B6B670C3C3C392CDCDCDB3CACACAD2C1C1C1F0A9B1BAFF729ECBFF87B7 - E1FF6D94BCFFE4E4E4FF8E8E8E7F0000001D000000030000000000000000DDDD - DDECEAEAEAFFE2E2E2FFD5D5D5FFCACACAFFB1BAC3FF3893E0FF9CCBE9FFC9E9 - F5FF92B7DCFFE1E1E1FFBDBDBD7D00000006005555030000000000000000DDDD - DDDDE6E6E6FFDFDFDFFFD9D9D9FFC4CDD7FF3B97E4FF09A8FFFF46C9FAFFA3D4 - F2FFC0CEDDFFE1E1E1FFD0D0D0891A669F682486C9F92378AA8E00000000DDDD - DDCFEBEBEBFFE9E9E9FFD3DCE7FF3E9BE8FF09A8FFFF02BAFFFF57C7F5FFA6C3 - DFFFE2E2E2FFE1E1E1FF7A94A8DE228FDDFE0199E1FF2693BEF100000000DCDC - DCC3EEEEEEFFD6DFEAFF3E9BE9FF08A8FFFF01BAFFFF58C7F5FF9BB6D1FFBFBF - BFFFB6B6B6FFA0A0A0FFB7BABDFF1D8BBFFF25A3CDFB1767975600000000DCDC - DCB9D7E0EBFF3E9CEAFF08A9FFFF01BAFFFF56C5F2FF909EAEFFC5B6A9FFC3B7 - ACFFC3BDB8FFBFBFBFFFC6C6C6FF979B9CFF2F637D6C0000000000000000B6C6 - D5B35497DCFF08A9FFFF01BBFFFF58C5F2FFB5B7BDFFEDDAC8FFECDED2FFEBDD - D2FFEBDDD2FFBAB1AAFFB9B9B9FE6D6D6D9A000000010000000000000000334C - CCD65A4DCCFF23BEF8FF5BC9F5FF9DA2AAFFF0DCC9FFF1E4DAFFEEE0D5FFEDE0 - D5FFF2E9E2FFF0E6DEFFC1BDB9F58B8B8B820000000000000000000000004152 - DBE9400DEDFF8C90EEFFAFC1D5FFD2BBA6FFF7EEE5FFF8F1ECFFF3E9E1FFEFE1 - D6FFF2E7DEFFF2E8E0FFBBB3ADFAAFAFAFB600000000000000000000000092AE - D6B591ABE9FFBFCFE7FFBFBFBFFFD5BFABFFF8EFE8FFF8F2EDFFF7F0EAFFF0E2 - D8FFEFE1D6FFEFE1D6FFBAB1AAFAB0B0B0BA000000000000000000000000DFDF - DFBDEFEFEFFFEFEFEFFFC4C4C4FFC8B6A5FFF6E9DDFFF8F2ECFFF6EFE9FFF0E2 - D8FFEFE1D6FFF0E2D7FFC2BBB7F79494948D000000000000000000000000E0E0 - E0CBEFEFEFFFEFEFEFFFC1C1C1FFCECBC8FFDBC2ABFFF7E5D6FFEADDD1FFE7D8 - CDFFEFE0D3FFC5B9AEFFC2C2C1F552525228000000000000000000000000E3E3 - E3DEEFEFEFFFEFEFEFFFEEEEEEFFB6B6B6FFCECBC9FFC6B5A5FFCEB9A6FFC6B4 - A3FFC1B6ADFFC8C7C7FF7B7B7B6700000000000000000000000000000000D9D9 - D9F4EAEAEAFFEFEFEFFFF4F4F4FFF2F2F2FFC4C4C4FFC0C0C0FFC0C0C0FFC0C0 - C0FFAEAEAEE68080805D0000000000000000000000000000000000000000B6B6 - B607BFBFBF20B9B9B93BBDBDBD55CCCCCC6FD7D7D789D0D0D0A3C9C9C993BCBC - BC51D4D4D4060000000000000000000000000000000000000000 - } end end object mnView: TMenuItem @@ -2853,481 +2347,67 @@ object frmPrincipal: TfrmPrincipal Caption = 'Herramientas' object MenuItem18: TMenuItem Action = acToolCompil - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 00100000001A0000001A0000001A0000001A00000017000000110000000B0000 - 0007000000070000000700000007000000070000000700000007000000050000 - 00200000003301390074015800CC013900740000002E00000022000000150000 - 000E0000004E000000C90000004E0000002D000000C900000040000000000118 - 00000245005C025C00CC30DA1FFF025C00CC0245005C01180000000000000000 - 0000000000C300000000000000C300000000000000C30000001E056700000362 - 005C036100CC35D324FF22CB11FF32D221FF036100CC0362005C044D00000101 - 0100010101BD01010100010101BD01010100010101BD0101011D0568005C0567 - 00CC3CCB2BFF22BC11FF22BC11FF22BC11FF36C725FF056700CC0568005C0335 - 010001010142010101BA0101014201010121010101BA0101011C076E01CD56CC - 47FF55CB45FF3BBC2AFF22AD11FF39BA29FF4EC63FFF4CC53DFF066D00CC066D - 0000010101000101010001010100010101000101010001010100087300990874 - 00CC046500C847B738FF22A011FF32AF21FF046500C8087400CC08730099043A - 01000101013C010101B70101012001010140010101B701010140087400000977 - 00000A7A00CC49B43AFF229911FF35AC24FF0A7A00CC0977000008740000031E - 01000101011C010101B501010100010101B501010100010101B50A7C00000B82 - 00000B8200CC5ECA4FFF35AC24FF3FB62EFF0B8200CC0B820000075B01000101 - 01000101011B010101B301010100010101B301010100010101B30D8900000D89 - 00000D8900CC64CF55FF44BB33FF53CA42FF0D8900CC0D890000074501000101 - 01000101013A010101B2010101000101013F010101B20101013F0F8F00000F8F - 00000F8F00CC66D156FF44BB33FF55CC44FF0F8F00CC0F8F00000F8F00000101 - 0100010101000101010001010100010101000101010001010100109600001096 - 0000109600B868D359E747BE36E759D048E7109600B910960000094C01000101 - 01000101013E010101AF0101013E0101011F010101AF01010131129C0000129C - 0000129C00926ED95EB74EC53DB65ED54DB7129C0092129C00000A4F01000101 - 0100010101AD01010100010101AD01010100010101AD0101011A13A1000013A1 - 000013A1006673DE647F56CD457E65DC547E13A1006513A100000A5201000101 - 0100010101AC01010100010101AC01010100010101AC0101011A14A6000014A6 - 000014A6003A78E369485FD64E496AE1594914A6003B14A600000B5401000101 - 01000101013C010101AB0101013C0101011E010101AB0101011A15A9000015A9 - 000015A9001B7CE76D2165DC54226EE55D2215A9001B15A9000015A900000101 - 0100010101000101010001010100010101000101010001010100 - } end object MenuItem24: TMenuItem Action = acToolComEjec - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 00000000000000000000000000000099000A0000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000008D0009009800B9049A05FE009900C90093001A000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000009800611CAB29FF4DD27AFF32BA49FF009800D80093001A0000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000009900782EB640FF45D375FF4ED57CFF39BD4FFF009800D80093 - 001A000000000000000000000000000000000000000000000000000000000000 - 0000000000000099007833B844FF53D981FF54D981FF5EDB89FF41C055FF0098 - 00D80093001A0000000000000000000000000000000000000000000000000000 - 0000000000000099007839BA48FF64DF8EFF65E08FFF66E090FF6EE296FF48C3 - 5AFF009800D80093001A00000000000000000000000000000000000000000000 - 000000000000009900783FBD4DFF75E69CFF77E69DFF79E79EFF79E79EFF7EE8 - A2FF4FC660FF009800D8009B0012000000000000000000000000000000000000 - 0000000000000099007845BF52FF86ECA9FF89EDABFF8BEDADFF8BEDADFF89ED - ABFF8BEDADFF3BB945FF0099006C000000000000000000000000000000000000 - 000000000000009900784AC156FF97F1B6FF9AF2B8FF9DF2BAFF9DF2BAFF9BF2 - B8FF9DF2BAFF34B53DFF009A0065000000000000000000000000000000000000 - 0000000000000099007850C25AFFA6F6C1FFABF6C5FFAEF6C7FFAEF6C7FFB0F6 - C8FF4EC157FF009900C400A90009000000000000000000000000000000000000 - 0000000000000099007855C35EFFB4F9CCFFB9F9CFFFBDFAD2FFC1FAD4FF55C2 - 5DFF009900C4009C000D00000000000000000000000000000000000000000000 - 0000000000000099007858C461FFBFFCD4FFC6FCD8FFCDFCDDFF5AC361FF0099 - 00C4009C000D0000000000000000000000000000000000000000000000000000 - 000000000000009900785BC463FFC8FDDAFFD2FDE1FF5EC463FF009900C4009C - 000D000000000000000000000000000000000000000000000000000000000000 - 0000000000000099005833B137FFC0F5CEFF5CC362FF009900C4009C000D0000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000AA00030098009A009800E9009800A9009C000D000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem19: TMenuItem Action = acToolPICExpl - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000100000002000000040000000600000006000000040000 - 0002000000010000000000000000000000000000000000000000000000000000 - 000000000002000000040000000A000000120000001800000016000000110000 - 0008000000020000000100000000000000000000000000000000000000010000 - 000200000008000000100000001E0000002E0000003800000037989898C50000 - 001B0000000A0000000400000001000000000000000000000000000000030000 - 0009000000160000002800000040000000560D0D0D7219191998CACACADA0000 - 00397E7E7E6D0000000E00000004000000010000000000000000000000060000 - 00140000002C00000047000000641E1E1EAE393939F8202020FFB0B0B0FE4949 - 4980AEAEAECE0000002500000010000000060000000200000000000000095858 - 584E6E6E6EA40A0A0A76222222E02D2D2DFF363636FF333333FF414141FF3232 - 32E9D0D0D0ED1010104B999999C4000000160000000600000000000000087B7B - 7B5B4E4E4EE2181818FC272727FF303030FF232323FF242424FF343434FF2121 - 21FF787878FF5B5B5BAACECECED6353535438686864C00000000000000040B0B - 0B8A0F0F0FFF2A2A2AFF272727FF202020FF252525FF2A2A2AFF2F2F2FFF3B3B - 3BFF353535FF131313FCB4B4B4F97878789CBABABA8E00000000000000022323 - 23892A2A2AFF1E1E1EFF212121FF262626FF2A2A2AFF303030FF353535FF3A3A - 3AFF424242FF444444FF343434FF858585E6D1D1D19800000000000000001C1C - 1C361C1C1CE7212121FF262626FF2B2B2BFF303030FF353535FF3A3A3AFF4040 - 40FF454545FF4A4A4AFF535353FF363636FF979797F200000009000000000000 - 00002424241C262626CE2C2C2CFF303030FF363636FF3B3B3BFF404040FF4545 - 45FF4A4A4AFF505050FF545454FF606060FF353535FF00000032000000000000 - 0000000000003333330A303030AD363636FF3C3C3CFF404040FF464646FF4B4B - 4BFF505050FF555555FF595959FF5E5E5EFF696969FE6868682C000000000000 - 00000000000000000000000000023B3B3B81414141FE464646FF4C4C4CFF5050 - 50FF555555FF5A5A5AFF5F5F5FFF626262D96767674000000000000000000000 - 000000000000000000000000000000000000454545584B4B4BF7515151FF5656 - 56FF5A5A5AFF5E5E5EFA616161835F5F5F080000000000000000000000000000 - 0000000000000000000000000000000000000000000051515135565656E45B5B - 5BFF5F5F5FC65C5C5C2C00000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000005E5E5E1B6060 - 60557F7F7F020000000000000000000000000000000000000000 - } end object MenuItem43: TMenuItem Action = acToolRamExp - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DEB41237DCB2 - 0F43DDB2111EDCB00B58DAAE08B5DAAE08B5DAAE08B5DAAE08B5DAAE08B5DAAE - 08B5DAAE08B5DAAE08B5DCB00B58D8B11721DCB20F43DCB51334DAAF07D3DAAE - 04FFDBAE0872D9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CD9B0087BDAAE04FFDBAF07C7E7B92E0BD7C4 - 270DFFD45506D9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CDAB64807D7C4270DE5CC330ADAAF0C6ADBAF - 0780DBB20D39D9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CD9B00C3EDBAF0780DBAF0C64DBAF08ADD9AE - 06D2DBB20A5DD9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CDBB00A65D9AE06D2DBAF09A4FFFFFF00FFFF - FF00FFFFFF00D9AE087CDAAE07D8DAAF07D3DAAF08CBDAAE04FFDBAE07CFDAAE - 08D8DAAF07D3DAAE07D8D9AE087CFFFFFF00FFFFFF00FFFFFF00DAAF0A94DBAE - 07B2D8AF0C50D9AE087CDBB10F81DAB00D98DAB00A98DBB00B96D9AF08B3DBB1 - 1190DCB31470DBB10E9ED9AE087CDBB10B56DBAE07B2DAAE0A8CDBAF0980D9AE - 089BDDB10B45D9AE087CDCB10EA2DAB10D94DAAE05E4DCB41560DAAE05FADFB8 - 2350D9AE05F6DDB41B5CD9AE087CD9B00D4BD9AE089BDBB10C79FFFFFF00FFFF - FF00FFFFFF00D9AE087CD9AF09BADAAE06D4DAAE04FFDAAF06D4DAAE04FFDAAF - 07D3DAAE04FFDAAF07D6D9AE087CFFFFFF00FFFFFF00FFFFFF00DAAE0ABFDAAF - 06E6D9AF0967D9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CDCB00B6FDAAF06E6DBAF0BB4DBB10E56DCB0 - 0C68D9B3102FD9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CDCB41433DCB00C68D9B10F52DDB12117E2BC - 1C1BD7B0270DD9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CDAB6240EE2BC1C1BDCB92216DAAF07D3DAAE - 04FFDBAE0872D9AE087CDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE04FFDAAE - 04FFDAAE04FFDAAE04FFD9AE087CD9B0087BDAAE04FFDAAF07C9DEB3152FDBB2 - 1139D7B01D1ADAAF094DD9AE049ED9AE049ED9AE049ED9AE049ED9AE049ED9AE - 049ED9AE049ED9AE049EDAAF094DDAB61B1CDBB21139DCB5162DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } end object MenuItem47: TMenuItem Action = acToolASMDebug - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FEFEFF00FEFE - FF00FEFEFF00FEFEFF00FAFBFC00FDFCFE00FEFEFF00071246130919391C0001 - 130DFDFDFE00FEFEFF00FEFEFF00FEFEFF00FEFEFF00FEFEFF00FEFEFF00FEFE - FF00FEFEFF00F0F4F800F6F8FB00FAFCFD000108333201072D6F010728780000 - 0C5600031119FAFBFD00FEFEFF00FEFEFF00FEFEFF00FEFEFF00FEFEFF00FEFE - FF00D8E1EE00E3EAF400ECF3F900020A5379081F9AE90B29B8FF0C2EBDFF103A - B7EE020F50A900000730F0F3F700FEFEFF00FEFEFF00FEFEFF00FCFCFD00ADBF - D500BBCDE300CFDCEC00010A6F6F081EC5FF0D2CD5FF1044E3FF0A25BAFF1D63 - F4FF2A6AECFF071E6AB300000419D7E2E900FEFEFF00FEFEFF00F7F9FF0087A3 - E8009FBBF200000665150310B9F20512ABFF0312C0FF0D3BE0FF0517B5FF195C - F1FF2F68EAFF3676E6FF010B337500000001FEFEFF00FEFEFF00EFF3F9006484 - B5007D99C2000116BB720119D1FF051662FF1845D8FF0B38E2FF020DB1FF0A1C - 67FF1A41BEFF3B7DF8FF163E95CE0000001084A1B700839EB600426280005B7A - 910077919D000014BDDD0022DFFF164FEEFF174BEAFF0A3BE5FF020EB9FF0744 - F0FF0033EEFF2365F5FF3575E9F6000000450510246B030A1D5402091A500C1B - 2FAC0E192159072BBFED003AF7FF1658F5FF1553F1FF0A41E9FF0113BEFF0845 - F1FF0030EEFF2162F1FF3776EDFA14242BAB3A56713D030D1F012A4766003753 - 71052A3E522F0024BEF70165FFFF165BE3FF155AEEFF0A49F1FF0019C3FF0746 - F3FF002FF0FF0739E7FF3978F1F810295806304F6E00294464006E89A3005F7B - 95006E849400011BACC53DA7FFFF174990FF1563EBFF094BF0FF0018C1FF0E52 - F4FF01085AFF143281FF3876EFE700000705213B5A00FEFEFF00030B25070004 - 0C4C080C1379152A50935CB5FFFC1C89FFFF2182E6FF3C5E8EFF020A27FF122A - 86FF0839E8FF0943F1FE1A326984132527B600020A12FEFEFF0008163315152B - 4D23415D79058A9FB0000012A2C43880DFFFC1C5C6FF273C56FF030916FF151A - 16FF384E7FFF0E2E93B300030F121326410600050F28FEFEFF003C5C7D006F8B - A3007691A90002061519111C287B22354AAD09152FFF0E213FFF0C1B32FF2A38 - 45FF303D49AC172D43291E39549B03081A2228436200FEFEFF00314F6F003856 - 7700425F81000D213D6E192F550DA7BACF0012254683243A5CF71B3252F80E1E - 3B8CC5D3DF00A5BBCA002542620C0A19357100030C01FEFEFF00304E6F003B59 - 7C00112544020A1935497691AD009AB3C700C5D2E000253E5E0E27416111DFE7 - EE00D3E0E900BFCFDD00ACC0D2000B1B3506040E2203FEFEFF00416080004D6C - 8C000D1E3E06030C210EFEFEFF00A3B7C900C9D4E000E0EAF000ECEFF400FEFE - FF00FEFEFF00C9D6E100B1C3D3009AB2C5008CA6BB00FEFEFF00 - } end object MenuItem44: TMenuItem Action = acToolListRep - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E3A3 - 73FFE3A373FFD4723E88FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00D26E3B24E3A373FFFFFFFF003232326B2B2B2BFF242424FF1E1E1EFF1717 - 17FF121212FF0C0C0CFF070707FF030303FFFFFFFF00FFFFFF00FFFFFF00FFFF - FF00E3A373FFD26E3B24FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E3A6 - 77FFE3A575FFE3A373FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E7AF - 86FFE5AC81FFE5AA7CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00DC8A - 5224E7B289FFFFFFFF00FFFFFF005E5E5E6B585858FF515151FF4A4A4AFF4343 - 43FF3C3C3CFF343434FF2D2D2DFF262626FFFFFFFF00FFFFFF00FFFFFF00FFFF - FF00DE8D5524E9B48DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDBF - 9DFFEBBC9AFFDE915824FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EEC3 - A2FFEEC3A2FFEEC1A2FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00EEC3A2FFFFFFFF00FFFFFF007777776B777777FF747474FF707070FF6B6B - 6BFF656565FF606060FF595959FF535353FFFFFFFF00FFFFFF00FFFFFF00EEC3 - A2FFEEC3A2FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E39F - 6C24EEC3A2FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } + end + object MenuItem51: TMenuItem + Caption = 'Select Compiler' + object MenuItem52: TMenuItem + Action = acToolSelPIC10 + end + object MenuItem53: TMenuItem + Action = acToolSelPIC16 + end + object MenuItem54: TMenuItem + Action = acToolSelPIC17 + end + end + object MenuItem55: TMenuItem + Action = acToolTestUnit + end + object MenuItem56: TMenuItem + Action = acToolTestPic10 end object MenuItem23: TMenuItem Action = acToolConfig - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000001000000020000000300000005000000080000000A0000 - 000C001E3D1905589D59043765370000000B0000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000097A - CF1B178DEFD62095F3FF1A90F1F70E83E1460000000000000000000000000000 - 00000000000000000000000000000000000000000000000000000975D71A178E - EFD91E94F3FF3DB0F7FF30A4F3FF168DEFB30000000000000000000000000000 - 000000000000000000000000000000000000000000000975D71A1C92F0D82298 - F7FF2097F5FF1D93F2FF1E94F2FF178DEC960000000000000000000000000000 - 000000000000000000000000000000000000097FD71A2498EFD92BA1F7FF2BA1 - F7FF2A9CF0FF2B9FF4FF2297F0CD0F78E1110000000000000000000000000000 - 00000000000000000000000000000000FF012598EABF35A4EFFF35A7F3FF35A5 - F0FF33A1E9FF2B9FF0CD0E7FD412000000000000000000000000000000000000 - 000000000000ABA1A131BFB4B46DBCB2B264B2BCC9E64CB2F2FF3DA7E6FF3DA9 - E9FF34A7F0CD0E7FD41200000000000000000000000000000000000000000000 - 0000C1B5B588D9D0D0FEDFD7D7FFE1D9D9FFE6E0E0FFD1E0EBFF4DB2EEFF3AAC - F1CD0E7FD412000000000000000000000000000000000000000000000000B8AC - AC41DDD5D5FEE5DEDEFFE7E1E1FFE9E2E2FFE7E0E0FFD9D0D0F6709EC34D0E7F - D41200000000000000000000000000000000000000000000000000000000CABE - BE87DDD5D5F9C9BFBF7DDFD9D9F3ECE7E7FFEDE9E9FFDED6D6FD8877770F0000 - 000000000000000000000000000000000000000000000000000000000000C1B5 - B579C0B6B65100000000C3BBBB3CE8E2E2F5F1EEEEFFDED8D8F97F7F7F0A0000 - 0000000000000000000000000000000000000000000000000000000000007F7F - 7F040000000000000000CBBFBF59ECE8E8FBF0ECECFFD1C8C8A4000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000BBB2B253E1DBDBFBE7E1E1FED4CBCBAEA391910E000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000091919107ADA2A22C9A91911C0000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem37: TMenuItem Caption = '-' end object MenuItem41: TMenuItem - Action = acToolExt1 - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF0000000002000000070000000A0000000C0000000E000000060000 - 0004000000030000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000F000000270000003000000032000000330000002D21201F8D2827 - 27C2323130C2252524C2333231C1282726BF1B1B1A8E00000013FFFFFF00FFFF - FF000000000A000000180000001A0000001B0000001A000000120A1220ED2521 - 1FFF272220FF221D1BFF282321FF231F1DFF13100FE60000000DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00071729EA1330 - 3FFF203D4AFF29424EFF26404BFF1D3844FF091920DDFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0012549DCC38AC - E6F519BBFFFF08B5FFFF06B8FFFF00ADF7FF0273BAD8FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00002E7B33093A - 84A12070B5B100A8FCFF00BDFFFF147BC4CB1BBEFF1EFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00004894AD16B1F6FF05B8F9FF144991B5FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0003539ED515AEF5FF14B9F4FE0F3D86BBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000057 - 8B020361AAED139DE2FF1EAEE4EF04337FB1FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000400002C013C - 72A90070B5FF2694C2FF138DBED9002E7BACFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000A324D02071623B60241 - 6DFF176E9BFF1E77A2FF03608FD9002E7BAC002E7B7DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000C0704040A33617B074589CD0471A2E101A5DDFF02AB - DFFF01AEE4FF01AFE5FF01B1E8F701AFE5FF01ACE2FC01317C9DFFFFFF000908 - 08050C0C0B391C1C1CAA2D2725B3425E6FFF01A5DFFF01A5DEFF01A5DDFF006F - AEFF00598BFF005889FF006DAAFF007AB8FF01A5DCFF044A94BBFFFFFF007C7B - 7BE06F6E6EFFBFBFC0FFC5C1C1FF2D577DFE00BBFFFF00B2F9FF01AFE4FF0050 - 72FF020F16FF03151EFF005C84FF003C5FFF01AFE4FF03559ED0FFFFFF009B99 - 990AA9A8A765676767DB64605FD54C7A9CF95AE7FDFF59E6FCFF5AE5F9FF5AE2 - F6FF5BDFF1FF5CDFF1FF5BE4F8FF5AE0F5FF5BE6FCFF035296BDFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000D508455035D9CA7035295BE0A66A2D50A67 - A3D70A67A3D70967A3D70A67A3D70A67A3D60666A3B100358035 - } + Action = acExtTool1 end object MenuItem40: TMenuItem - Action = acToolExt2 - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF0000000002000000070000000A0000000C0000000E000000060000 - 0004000000030000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000F000000270000003000000032000000330000002D21201F8D2827 - 27C2323130C2252524C2333231C1282726BF1B1B1A8E00000013FFFFFF00FFFF - FF000000000A000000180000001A0000001B0000001A000000120A1220ED2521 - 1FFF272220FF221D1BFF282321FF231F1DFF13100FE60000000DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00071729EA1330 - 3FFF203D4AFF29424EFF26404BFF1D3844FF091920DDFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0012549DCC38AC - E6F519BBFFFF08B5FFFF06B8FFFF00ADF7FF0273BAD8FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00002E7B33093A - 84A12070B5B100A8FCFF00BDFFFF147BC4CB1BBEFF1EFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00004894AD16B1F6FF05B8F9FF144991B5FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0003539ED515AEF5FF14B9F4FE0F3D86BBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000057 - 8B020361AAED139DE2FF1EAEE4EF04337FB1FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000400002C013C - 72A90070B5FF2694C2FF138DBED9002E7BACFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000A324D02071623B60241 - 6DFF176E9BFF1E77A2FF03608FD9002E7BAC002E7B7DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000C0704040A33617B074589CD0471A2E101A5DDFF02AB - DFFF01AEE4FF01AFE5FF01B1E8F701AFE5FF01ACE2FC01317C9DFFFFFF000908 - 08050C0C0B391C1C1CAA2D2725B3425E6FFF01A5DFFF01A5DEFF01A5DDFF006F - AEFF00598BFF005889FF006DAAFF007AB8FF01A5DCFF044A94BBFFFFFF007C7B - 7BE06F6E6EFFBFBFC0FFC5C1C1FF2D577DFE00BBFFFF00B2F9FF01AFE4FF0050 - 72FF020F16FF03151EFF005C84FF003C5FFF01AFE4FF03559ED0FFFFFF009B99 - 990AA9A8A765676767DB64605FD54C7A9CF95AE7FDFF59E6FCFF5AE5F9FF5AE2 - F6FF5BDFF1FF5CDFF1FF5BE4F8FF5AE0F5FF5BE6FCFF035296BDFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000D508455035D9CA7035295BE0A66A2D50A67 - A3D70A67A3D70967A3D70A67A3D70A67A3D60666A3B100358035 - } + Action = acExtTool2 end object MenuItem39: TMenuItem - Action = acToolExt3 - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF0000000002000000070000000A0000000C0000000E000000060000 - 0004000000030000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000F000000270000003000000032000000330000002D21201F8D2827 - 27C2323130C2252524C2333231C1282726BF1B1B1A8E00000013FFFFFF00FFFF - FF000000000A000000180000001A0000001B0000001A000000120A1220ED2521 - 1FFF272220FF221D1BFF282321FF231F1DFF13100FE60000000DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00071729EA1330 - 3FFF203D4AFF29424EFF26404BFF1D3844FF091920DDFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0012549DCC38AC - E6F519BBFFFF08B5FFFF06B8FFFF00ADF7FF0273BAD8FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00002E7B33093A - 84A12070B5B100A8FCFF00BDFFFF147BC4CB1BBEFF1EFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00004894AD16B1F6FF05B8F9FF144991B5FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0003539ED515AEF5FF14B9F4FE0F3D86BBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000057 - 8B020361AAED139DE2FF1EAEE4EF04337FB1FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000400002C013C - 72A90070B5FF2694C2FF138DBED9002E7BACFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000A324D02071623B60241 - 6DFF176E9BFF1E77A2FF03608FD9002E7BAC002E7B7DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000C0704040A33617B074589CD0471A2E101A5DDFF02AB - DFFF01AEE4FF01AFE5FF01B1E8F701AFE5FF01ACE2FC01317C9DFFFFFF000908 - 08050C0C0B391C1C1CAA2D2725B3425E6FFF01A5DFFF01A5DEFF01A5DDFF006F - AEFF00598BFF005889FF006DAAFF007AB8FF01A5DCFF044A94BBFFFFFF007C7B - 7BE06F6E6EFFBFBFC0FFC5C1C1FF2D577DFE00BBFFFF00B2F9FF01AFE4FF0050 - 72FF020F16FF03151EFF005C84FF003C5FFF01AFE4FF03559ED0FFFFFF009B99 - 990AA9A8A765676767DB64605FD54C7A9CF95AE7FDFF59E6FCFF5AE5F9FF5AE2 - F6FF5BDFF1FF5CDFF1FF5BE4F8FF5AE0F5FF5BE6FCFF035296BDFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000D508455035D9CA7035295BE0A66A2D50A67 - A3D70A67A3D70967A3D70A67A3D70A67A3D60666A3B100358035 - } + Action = acExtTool3 end object MenuItem38: TMenuItem - Action = acToolExt4 - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF0000000002000000070000000A0000000C0000000E000000060000 - 0004000000030000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000F000000270000003000000032000000330000002D21201F8D2827 - 27C2323130C2252524C2333231C1282726BF1B1B1A8E00000013FFFFFF00FFFF - FF000000000A000000180000001A0000001B0000001A000000120A1220ED2521 - 1FFF272220FF221D1BFF282321FF231F1DFF13100FE60000000DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00071729EA1330 - 3FFF203D4AFF29424EFF26404BFF1D3844FF091920DDFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0012549DCC38AC - E6F519BBFFFF08B5FFFF06B8FFFF00ADF7FF0273BAD8FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00002E7B33093A - 84A12070B5B100A8FCFF00BDFFFF147BC4CB1BBEFF1EFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00004894AD16B1F6FF05B8F9FF144991B5FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0003539ED515AEF5FF14B9F4FE0F3D86BBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000057 - 8B020361AAED139DE2FF1EAEE4EF04337FB1FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000400002C013C - 72A90070B5FF2694C2FF138DBED9002E7BACFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000A324D02071623B60241 - 6DFF176E9BFF1E77A2FF03608FD9002E7BAC002E7B7DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000C0704040A33617B074589CD0471A2E101A5DDFF02AB - DFFF01AEE4FF01AFE5FF01B1E8F701AFE5FF01ACE2FC01317C9DFFFFFF000908 - 08050C0C0B391C1C1CAA2D2725B3425E6FFF01A5DFFF01A5DEFF01A5DDFF006F - AEFF00598BFF005889FF006DAAFF007AB8FF01A5DCFF044A94BBFFFFFF007C7B - 7BE06F6E6EFFBFBFC0FFC5C1C1FF2D577DFE00BBFFFF00B2F9FF01AFE4FF0050 - 72FF020F16FF03151EFF005C84FF003C5FFF01AFE4FF03559ED0FFFFFF009B99 - 990AA9A8A765676767DB64605FD54C7A9CF95AE7FDFF59E6FCFF5AE5F9FF5AE2 - F6FF5BDFF1FF5CDFF1FF5BE4F8FF5AE0F5FF5BE6FCFF035296BDFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000D508455035D9CA7035295BE0A66A2D50A67 - A3D70A67A3D70967A3D70A67A3D70A67A3D60666A3B100358035 - } + Action = acExtTool4 end object MenuItem42: TMenuItem - Action = acToolExt5 - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF0000000002000000070000000A0000000C0000000E000000060000 - 0004000000030000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000000000F000000270000003000000032000000330000002D21201F8D2827 - 27C2323130C2252524C2333231C1282726BF1B1B1A8E00000013FFFFFF00FFFF - FF000000000A000000180000001A0000001B0000001A000000120A1220ED2521 - 1FFF272220FF221D1BFF282321FF231F1DFF13100FE60000000DFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00071729EA1330 - 3FFF203D4AFF29424EFF26404BFF1D3844FF091920DDFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0012549DCC38AC - E6F519BBFFFF08B5FFFF06B8FFFF00ADF7FF0273BAD8FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00002E7B33093A - 84A12070B5B100A8FCFF00BDFFFF147BC4CB1BBEFF1EFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00004894AD16B1F6FF05B8F9FF144991B5FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0003539ED515AEF5FF14B9F4FE0F3D86BBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000057 - 8B020361AAED139DE2FF1EAEE4EF04337FB1FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000400002C013C - 72A90070B5FF2694C2FF138DBED9002E7BACFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000A324D02071623B60241 - 6DFF176E9BFF1E77A2FF03608FD9002E7BAC002E7B7DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF000C0704040A33617B074589CD0471A2E101A5DDFF02AB - DFFF01AEE4FF01AFE5FF01B1E8F701AFE5FF01ACE2FC01317C9DFFFFFF000908 - 08050C0C0B391C1C1CAA2D2725B3425E6FFF01A5DFFF01A5DEFF01A5DDFF006F - AEFF00598BFF005889FF006DAAFF007AB8FF01A5DCFF044A94BBFFFFFF007C7B - 7BE06F6E6EFFBFBFC0FFC5C1C1FF2D577DFE00BBFFFF00B2F9FF01AFE4FF0050 - 72FF020F16FF03151EFF005C84FF003C5FFF01AFE4FF03559ED0FFFFFF009B99 - 990AA9A8A765676767DB64605FD54C7A9CF95AE7FDFF59E6FCFF5AE5F9FF5AE2 - F6FF5BDFF1FF5CDFF1FF5BE4F8FF5AE0F5FF5BE6FCFF035296BDFFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF000D508455035D9CA7035295BE0A66A2D50A67 - A3D70A67A3D70967A3D70A67A3D70A67A3D60666A3B100358035 - } + Action = acExtTool5 end end end object ImgActions32: TImageList Height = 32 Width = 32 - left = 336 + left = 344 top = 464 Bitmap = { 4C69240000002000000020000000000000000000000000000000000000000000 @@ -7943,283 +7023,31 @@ object frmPrincipal: TfrmPrincipal end object PopupEdit: TPopupMenu Images = ImgActions16 - left = 336 + left = 352 top = 400 object MenuItem36: TMenuItem Action = acToolFindDec - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6410074C73B000AFFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C64900B1C64900C1C740 - 0022FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C54900AFC75100FFC64C - 00D9C7420040FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C44900ADC75100FFC751 - 00FFC64D00ECC7440064FFFFFF00FFFFFF00FFFFFF00FFFFFF00B73E003EBB46 - 00A2BB4600A3BC4600A3BC4600A3BD4600A3BE4700A4BF4900D9C04E00FFC04E - 00FFC04E00FFC04C00F9C3440089C8390001FFFFFF00FFFFFF00B43D005AB849 - 00FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB849 - 00FFB84900FFB84900FFB84800FFBD4200ABC43C000FFFFFFF00BC410057CD54 - 00FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD54 - 00FFCD5400FFCD5400FFCD5400FFCD5400FFCA4B00C7C93E001DBF430055D75C - 00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C - 00FFD75C00FFD75C00FFD75C00FFD65A00FECE4D0094C5390002C1450053E164 - 00FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFE164 - 00FFE16400FFE16400FFDD6000F8D04F007AFFFFFF00FFFFFF00BE410014C549 - 0051C6490053C74A0055C74B0057C84B0059C84C005BD35600BFE16400FFE164 - 00FFE16400FFDC5F00EFCD4E0060FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35700A7E16400FFE164 - 00FFDA5D00E2C94B0048FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35600A4E16400FFD75A - 00D4C5490032FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D35600A2D45800C3C145 - 001FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C4470069BB3F0010FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } end object MenuItem8: TMenuItem Action = acEdUndo - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000007F - 000400711C09007F120E0072191400751D1A00751D1A0075130D007F00020000 - 00000000000000FF0001007F0002000000010000000000000000007F00020074 - 151800751B41007519590076195A00751A570076184900741A3000721A1D007A - 1E1900761B1C007317210077172000791815007F2A0600000000000000000055 - 0003007415180075183F00731A4D0073174000731B3700731B37007819330074 - 1B2E007219280073181F0072191400711C09007F000200000000000000000000 - 000000000001007F2A061E983D1914B4445926C45FA10CC8672A00550003007F - 0002007F000200000001000000000000000000000000000000000000000039B2 - 592824BA506F18BE4FBA10C04EF60ABF4BFD1ED26FFF0CC36151000000000000 - 000000000000000000000000000055AA5503000000000000000029BA596F1FC3 - 57F90AC14CFD07BF48FE06BF46FF0DBF46FF1ACE6EE000AA5503000000000000 - 000000000000A2E7B90B2FAA4C9D07A035E00CBF5914000000001FAF5A3044C8 - 6AFD19BE48FF05B736FF04B031FF04A92DFF16AA38E247C1674FA9E2C60985E6 - A9153ABA5E6419A63EDE039527FF049627FF09AD41B600FF00010000000062C7 - 7ACA5AC870FF16B93DFF05B734FF06B836FF06B737FF05B236FF10AF3EFE0BA8 - 38FD05A433FE05A633FF05AE36FF05B839FF07B53CF514BA5925000000006BCB - 896892DCA5FF6BD789FF19D154FF07D44CFF07D54EFF07D34EFF06CB49FF06C3 - 44FF05C041FF05C340FF05CF49FF06CD49FB1BC6597A00000000000000001FAF - 5F10B1E9C3F49EEAB7FF5EE48EFF24E676FF08E468FF09E467FF08E163FF08DD - 5EFF08DA58FF08D651FF0CCA46F827D7627A00FFFF0100000000000000000000 - 0000B6E7C7A291EBB7FF0BCB62B731CD63850DCA4FD409C949FD08C645FF08C0 - 3EFE0DC03DEB1AC547A13FD96A30000000000000000000000000000000000000 - 00008CD0AE3C3FD686FE0DEC8637000000000000000000A9380911AF341D28BB - 431300FF00010000000000000000000000000000000000000000000000000000 - 0000007F7F020FB7563200000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem30: TMenuItem Action = acEdRedo - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000001007F000200FF00010000000000000000007F0002006D120E0075 - 1D1A00751D1A00721914006D120E00711C0900AA00030000000000000001006D - 240700731716007317210077172000761B1C007A1E190077191E007519320075 - 1B4A00751A570075195B00731A580075183F00731716007F0002000000000055 - 0003007F190A007918150073181F0072192800711B2F0075183400731B370073 - 1B3700751B4100771A4D0075193D00731716007F000200000000000000000000 - 0000000000000000000000000001007F0002007F00020099330519B651C51CC0 - 5AA323D775660CD26C2800663305000000010000000000000000000000000000 - 000000000000000000000000000000000000000000000000000009B7488C0BC1 - 49FE0DC349FD16CB55FD16C957DB18D2629B1CCF6A5B08B4521F000000000FA3 - 2B880A9C2C4B00000000000000000000000000000000000000000AAC40470ABA - 39FE0ABB38FE0ABB36FE0ABB35FE11BD3AFC1EC04AFD08A8415E0A98255F069C - 27FD059E2AFD099D29A40F962E3100FF0001009F3F080A9F2B5D07A62BEA07AD - 2EFE09B734FE0CC33DFE1FCD51FE3CD369FC1DCC65E200CC66050B9B24DD069B - 25FE059B24FE059C24FE05A027FE06A22BF506A92FFA07B136FE09B93DFE0BC6 - 47FE0DD554FE2DE36FFE57EB8FFD53E089FD11E47E7300000000129E2C45099F - 27F805A62DFE05B734FE06C43DFE07C542FE07C644FE08CA49FE09D150FE0BDF - 60FE37EB83FE71F4AAFE92F5C0FD31E283EF12C86D0E0000000000000000098F - 234E0AA82EEE09C441FE09DA56FE09E364FE09E669FE0AE76DFE0EEB74FE45EE - 90FE63EA99FDAAF6CAFF90E8B1FE10D974880000000000000000000000000000 - 00001291361C10A4308F0CB035DE0CC143FA11CF52FC1BD960EB33E074C736D9 - 728828C35B38C6EDD2F344BD6FF809C4621A0000000000000000000000000000 - 00000000000000000000000000001F7F3F081C8D380900000000000000000000 - 00000000000084CA9C87119B4073000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end object MenuItem31: TMenuItem Caption = '-' end object MenuItem32: TMenuItem Action = acEdCut - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00020D8C0A1C27A69F353F - C9F7222DAFB9030D8C1CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00050F8D1F06108E26010B8A03FFFFFF00121C9B70404BD9FF2C35 - BFDD3D47D1FF1D27A9A4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF000F199763323DC7F83741CFFF1F29ABB0000A8618232DB4AF3540CCFD0009 - 85181C27A895343EC5F8040E8C14FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF002F3ABDDE353FC9E52530B3C23F4ADDFF1F2AACC22430B2CB323CC6F2000A - 8603111B9D773741C8FF08128E20FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00323CC3EC232EADAFFFFFFF001A25A8994250D2FFCBA375FE414FD6FF1621 - A39D2F39C0D42E38BEDF020D8B0AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF001D28A99C3B46CCFF0812903A071190533B48D4FFDBBD9CFFEECCA6FF404C - DEFF3A43D1FF0F199869FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00030D8C1F2C35B9D73C46CFFF333ECAF23F4CD7FFD8BC9AFFF6EAE1FFBB92 - 5ABF9462183B91611A01FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00030D8C1F1B26A7992A34BACC111C9D89BB9869CCF0E0D0FFB791 - 5FC58F5D140BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00000B8802FFFFFF00B48E5A90F6EADDFFE1CD - B4FFB18D5DBFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B38C5789F1E2D4FFCEB2 - 8EF4F5EBE0FFA67F4A9DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B1895384EEDFCEFF9766 - 2065C2A37CDAE9D8C5FDA9824E7BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AF87507CE7D5C1FF9565 - 1F2B8F5C121BC5A783E7D5BC9DE1B5936462FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AC834B75DEC9AFFF9564 - 1D1FFFFFFF0092601726C3A47CEBB59063CBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AA81476FD6BD9FF79361 - 1910FFFFFF00FFFFFF009666202CA9804BCBFFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A87D4269CCB08BE0915D - 1409FFFFFF00FFFFFF00FFFFFF0092601706FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009A6B2731AA7E43A19260 - 1805FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 - } end object MenuItem33: TMenuItem Action = acEdCopy - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 000000000000000000000000000000000000AA745F1877564353070700220000 - 0007000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FF000001EFAE8EC5FAD7C4FFEABDA3F3C494 - 77CAA37B628C5742344900000019000000040000000000000000000000000000 - 0000000000000000000000000000E395704BFADED0FFFFFAF9FFFFFFFEFFFFFC - FAFFFDEBE0FFFBDBC5FFE2BB9FEAC0977ABB9677627A0B000016000000000000 - 0000BA8468387F5C4A600D0D0627E79D7DB1FFFCF9FFFEE2D7FFFCCEBEFFFCCF - BEFFFDDDD1FFFFF9F7FFFFFFFFFFFFF9F5FFFAD0B1FC8A6F593900000000D08B - 7316F3BCA1EFFBDCCAFFEDA183F6EEB49EFBFFF1EAFFFDD1C1FFFEECE4FFFFFD - FBFFFEF0EAFFFDD4C6FFFEE6DDFFFDF0E7FFD5A2828D0000000000000000EA9A - 7786FDF2EDFFFEF2EEFFF6B098FFF5CAB9FFFFF5EDFFFFF3ECFFFDDBCDFFFCCD - BBFFFCCEBDFFFDD8CAFFFFFDFBFFEFC1A8F554422F1B00000000FF7F7F02F0B6 - 9EE5FFFCFAFFFDDED2FFF19576FFF8D8CAFFFEDCCAFFFCC9B3FFFCCBB7FFFEDE - D1FFFFF7F1FFFEF2EBFFFEF8F5FFCE8F71B90000000100000000E1825A33F6CF - BFFFFEE8DEFFFDD0C0FFED9071FFFBE1D3FFFDD2BCFFFEDAC7FFFFEEE1FFFEE0 - D0FFFDCCB7FFFDD9CAFFFBE6DBFFB274587F0000000000000000E078546CFBE4 - D9FFFFF3EAFFFFF5EEFFEA8D70FFFDE4D2FFFFE0C8FFFED2B9FFFCC4AAFFFCC6 - AEFFFDCCB6FFFEE8DBFFF8D5C5FF8D5742550000000000000000E0745095FEF1 - E7FFFDD6C2FFFCC9B3FFE98668FFFEE1CBFFFFD8B9FFFFDDC1FFFFE1C8FFFFE5 - CFFFFFE5D1FFFEE1CFFFF5C6B4FF5734273A0000000000000000E27C5CB0FFED - DFFFFDCAB2FFFED7C4FFEFAE98FFE7937CFFF1B7A1FFFCDAC5FFFFE1C8FFFFDC - C0FFFFE0C7FFFFE4CEFFF1BAA6FF2217112C0000000000000000E28064BCFFE5 - D0FFFFE1C9FFFED5BDFFFCC4AAFFFCC4ABFFF4A78CFFEC9F85FFE69279FEEAA5 - 90FBF5C7B3FFFEE5D3FFEDAC95FE180C06290000000000000000E27D62BDFFDE - C2FFFFD8B8FFFFDCC0FFFFE1C9FFFFE4CFFFFFE6D3FFFFE8D8FFE1A994F15A25 - 1622DD643F4CDF6D4B91DC6D4ABB1111000F0000000000000000D7532F80E691 - 7AEBF0B49EFFFBD7C2FFFFE2CAFFFFDDC1FFFFE0C7FFFFE7D3FFD69983E80000 - 000F00000000000000000000000000000000000000000000000000000000FF7F - 0002D6563232D8593577E27E63BBEBA48EF6F5C4B0FFFDE5D6FFD1866DE60000 - 000E000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000E2543809DA633E45DF684489D064448E0000 - 0003000000000000000000000000000000000000000000000000 - } end object MenuItem34: TMenuItem Action = acEdPaste - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 200000000000000400006400000064000000000000000000000000000000000F - 1E110035545100131C350000000F000000010000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000598C282883 - C0E94DB0E9FF3F9FD6FC2C80AEDD155A81A700304C6400060C28000000090000 - 000000000000000000000000000000000000000000000000000005629A6543A1 - E8FF57BAF4FF5ABEF7FF59BDF4FF57BCF1FF76B4D4FF7194A7F7387798D10D4E - 73960021344D000000080000000000000000000000000000000005649C6544A3 - E9FF54B6F3FF58BBF5FF399CD4FF3389B9FFE8BDA8FFFCE7DCFFFAD6C1FFDCC8 - B9FF9AA3A4FC73675F962B211C350000000F000000010000000005649C6545A4 - E9FF51B2F0FF55B7F3FF3799D2FF87919BFFFDF2ECFFFEE3DAFFFFF7F4FFFFFF - FFFFFEF8F4FFFDE8DAFFF7D6BEFBD6AF92DDA5846A9C0000000F05649C6546A4 - EAFF4DADEEFF52B3F1FF3597D1FFD3AC9FFFFFFCF9FFFEF1ECFFFDD6C7FFFCCE - BEFFFCCFBFFFFDE2D8FFFFFCFCFFFFFAF6FFEEBC98C80000000807649C6546A5 - EAFF48A8EBFF4EAFEFFF4D94C3FFF5C7B5FFFEEBE2FFFCCDBBFFFDD3C3FFFEEE - E7FFFFFDFBFFFEEBE4FFFEF3EEFFF5D0BAF98E70582B0000000007649C6547A5 - EAFF44A2E8FF4AA9ECFF748FABFFF9DACDFFFEE3D5FFFFEFE6FFFFF3ECFFFDDA - CCFFFCCDBBFFFDD8CAFFFEF8F4FFD19777B3000000010000000007649C6547A6 - EAFF3E9BE5FF45A3E9FF8D8695FFFCE7DBFFFEE5D6FFFDCEB9FFFCC9B4FFFCCB - B8FFFDDDD0FFFFF6F1FFFADFD2FFAB735868000000000000000007649C6547A6 - EAFF3894E1FF3F9DE6FF9D8087FFFEEBDDFFFDCAB1FFFCC5ADFFFDD7C4FFFFEF - E3FFFEE2D4FFFEE3D6FFF6CAB6FF55372D33000000000000000007679C6546A5 - EAFF318BDEFF3694E4FFA37C82FFFFE6D1FFFFDEC4FFFFE2CBFFFED7C0FFFDC5 - ACFFFCC6AEFFFEE4D5FFE8B5A0F500000018000000000000000007659C6248A7 - EBFF2482DEFF05C2FFFF28B1DFFF79C6E2FFBFC2C7FFF8D8BDFFFFDEC3FFFFE2 - CBFFFFE6D2FFFFEBDBFFD9A08BE80000000F000000000000000000649A1C3C9E - D5EF3492E3FF42C9FEFF23DDFFFF00DDFFFF00E1FFFF0CCEFBFF4AC9EAFF90C4 - DAFFEDD8C8FFFFE5D0FFD0907AE30000000C0000000000000000000000000060 - 951D1A7BAF741E86CDB831AAEEF500BAFFFF00C7FFFF00D3FFFF09E1FFFF01E5 - FFFFB09AAAFFF2BDAAFFCB7559DF0000000A0000000000000000000000000000 - 00000000000000000000289FFC5847C3FEFE2CBFFFFF07B3FFFF2BB3F6FF4DBA - F8FF3C9DDDFE5B697E91D265443F000000000000000000000000000000000000 - 0000000000000000000000000000007FFE2A31A6FE7154C3FEB0238DDD6C0361 - 964C005990250000000000000000000000000000000000000000 - } end object MenuItem35: TMenuItem Action = acEdSelecAll - Bitmap.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000DDDDDD53E6E6E6FFE8E8E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEAEAFFE9E9 - E9FFE9E9E9FFE8E8E8FFE5E5E5FFDEDEDE470000000000000000000000000000 - 0000E5E5E5AAF4F4F4FFF5F5F5FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 - F6FFF6F6F6FFF5F5F5FFF8F8F8FFE6E6E6940000000000000000000000000000 - 0000E5E5E5AAF5F5F5FFF6F6F6FFF7F7F7FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8 - F8FFF8F8F8FFF6F6F6FFF9F9F9FFE6E6E6940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF7F7F7FFF8F8F8FFFAFAFAFFE8E8E8FFF9F9F9FFFAFA - FAFFF9F9F9FFF8F8F8FFFAFAFAFFE6E6E6940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFFAFAFAFFFBFBFBFFE8E8E8FFFCFCFCFFFCFC - FCFFFAFAFAFFF8F8F8FFFAFAFAFFE8E8E8940000000000000000000000000000 - 0000E8E8E8AAF6F6F6FFF8F8F8FFFAFAFAFFFCFCFCFFECECECFFEAEAEAFFFDFD - FDFFFBFBFBFFF9F9F9FFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E8E8E8AAF6F6F6FFF8F8F8FFFBFBFBFFFCFCFCFFFEFEFEFFDADADAFFFDFD - FDFFFCFCFCFFFAFAFAFFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFFAFAFAFFFCFCFCFFE8E8E8FFDCDCDCFFFCFC - FCFFFBFBFBFFF9F9F9FFFBFBFBFFEAEAEA940000000000000000000000000000 - 0000E7E7E7AAF6F6F6FFF8F8F8FFF9F9F9FFFAFAFAFFFCFCFCFFFCFCFCFFFBFB - FBFFFAFAFAFFF8F8F8FFFAFAFAFFE8E8E8940000000000000000000000000000 - 0000E5E5E5AAF5F5F5FFF6F6F6FFF8F8F8FFF9F9F9FFFAFAFAFFFAFAFAFFF9F9 - F9FFF8F8F8FFF7F7F7FFF9F9F9FFE6E6E6940000000000000000000000000000 - 0000E0E0E095F1F1F1FFF4F4F4FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 - F6FFF6F6F6FFF5F5F5FFF2F2F2FFE0E0E07F0000000000000000000000000000 - 000000000000DDDDDD6ADDDDDD6ADFDFDF6AE2E2E26AE4E4E46AE4E4E46AE2E2 - E26AE2E2E26ADDDDDD6ADDDDDD6A000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } end end object Timer1: TTimer @@ -8236,7 +7064,20 @@ object frmPrincipal: TfrmPrincipal object ReplaceDialog1: TReplaceDialog Options = [frDown, frReplace, frReplaceAll, frHidePromptOnReplace] OnReplace = ReplaceDialog1Replace - left = 328 - top = 328 + left = 352 + top = 336 + end + object PopupCompiler: TPopupMenu + left = 216 + top = 208 + object MenuItem48: TMenuItem + Action = acToolSelPIC10 + end + object MenuItem49: TMenuItem + Action = acToolSelPIC16 + end + object MenuItem50: TMenuItem + Action = acToolSelPIC17 + end end end diff --git a/Source/FormPrincipal.pas b/Source/FormPrincipal.pas index 7f901a13..53c78c94 100644 --- a/Source/FormPrincipal.pas +++ b/Source/FormPrincipal.pas @@ -6,15 +6,20 @@ {$mode objfpc}{$H+} interface uses - Classes, SysUtils, SynEdit, SynEditTypes, Forms, Controls, Dialogs, Menus, - ComCtrls, ActnList, StdActns, ExtCtrls, LCLIntf, LCLType, LCLProc, - SynFacilHighlighter, SynFacilUtils, MisUtils, XpresBas, - Pic16Utils, Parser, FormPICExplorer, Globales, FrameSyntaxTree, FormConfig, + Classes, SysUtils, SynEdit, SynEditTypes, LazUTF8, Forms, Controls, Dialogs, + Menus, ComCtrls, ActnList, StdActns, ExtCtrls, LCLIntf, LCLType, LCLProc, + StdCtrls, Graphics, SynFacilHighlighter, SynFacilUtils, MisUtils, XpresBas, + CompBase, //Para tener acceso a TCompilerBase + Compiler_PIC10, + Compiler_PIC16, + Compiler_PIC17, + FormPICExplorer, FrameSyntaxTree, FormConfig, Globales, PicPasProject, FrameEditView, FrameMessagesWin, XpresElementsPIC, CodeTools, - ParserAsm, ParserDirec, FrameCfgExtTool, FormDebugger, FormRAMExplorer; + FrameCfgExtTool, FormDebugger, FormRAMExplorer; type { TfrmPrincipal } TfrmPrincipal = class(TForm) + published acArcOpen: TAction; acArcSaveAs: TAction; acArcSave: TAction; @@ -33,14 +38,19 @@ TfrmPrincipal = class(TForm) acArcCloseProj: TAction; acArcCloseFile: TAction; acSearFindPrv: TAction; + acExtTool2: TAction; + acExtTool3: TAction; + acExtTool4: TAction; + acExtTool5: TAction; + acExtTool1: TAction; + acToolTestPic10: TAction; + acToolTestUnit: TAction; + acToolSelPIC16: TAction; + acToolSelPIC10: TAction; + acToolSelPIC17: TAction; acToolASMDebug: TAction; acViewAsmPan: TAction; acToolRamExp: TAction; - acToolExt4: TAction; - acToolExt5: TAction; - acToolExt2: TAction; - acToolExt3: TAction; - acToolExt1: TAction; acToolFindDec: TAction; acToolListRep: TAction; acToolConfig: TAction; @@ -52,6 +62,7 @@ TfrmPrincipal = class(TForm) ActionList: TActionList; acViewStatbar: TAction; acViewSynTree: TAction; + CoolBar1: TCoolBar; edAsm: TSynEdit; FindDialog1: TFindDialog; ImgActions32: TImageList; @@ -95,6 +106,15 @@ TfrmPrincipal = class(TForm) MenuItem45: TMenuItem; MenuItem46: TMenuItem; MenuItem47: TMenuItem; + MenuItem48: TMenuItem; + MenuItem49: TMenuItem; + MenuItem50: TMenuItem; + MenuItem51: TMenuItem; + MenuItem52: TMenuItem; + MenuItem53: TMenuItem; + MenuItem54: TMenuItem; + MenuItem55: TMenuItem; + MenuItem56: TMenuItem; MenuItem8: TMenuItem; mnSamples: TMenuItem; mnView: TMenuItem; @@ -114,34 +134,38 @@ TfrmPrincipal = class(TForm) mnRecents: TMenuItem; panMessages: TPanel; PopupEdit: TPopupMenu; + PopupCompiler: TPopupMenu; ReplaceDialog1: TReplaceDialog; splSynTree: TSplitter; Splitter2: TSplitter; splEdPas: TSplitter; StatusBar1: TStatusBar; Timer1: TTimer; - ToolBar1: TToolBar; - ToolButton1: TToolButton; - ToolButton10: TToolButton; - ToolButton11: TToolButton; - ToolButton12: TToolButton; - ToolButton13: TToolButton; - ToolButton14: TToolButton; - ToolButton15: TToolButton; - ToolButton16: TToolButton; - ToolButton17: TToolButton; - ToolButton18: TToolButton; - ToolButton19: TToolButton; - ToolButton2: TToolButton; - ToolButton20: TToolButton; - ToolButton21: TToolButton; - ToolButton3: TToolButton; - ToolButton4: TToolButton; - ToolButton5: TToolButton; - ToolButton6: TToolButton; - ToolButton7: TToolButton; - ToolButton8: TToolButton; - ToolButton9: TToolButton; + ToolBar2: TToolBar; + ToolBar3: TToolBar; + ToolBar4: TToolBar; + ToolBar5: TToolBar; + ToolBar6: TToolBar; + ToolButton23: TToolButton; + ToolButton24: TToolButton; + ToolButton25: TToolButton; + ToolButton26: TToolButton; + ToolButton27: TToolButton; + ToolButton28: TToolButton; + ToolButton29: TToolButton; + ToolButton30: TToolButton; + ToolButton31: TToolButton; + ToolButton32: TToolButton; + ToolButton33: TToolButton; + ToolButton34: TToolButton; + ToolButton35: TToolButton; + ToolButton36: TToolButton; + ToolButton37: TToolButton; + ToolButton38: TToolButton; + ToolButton39: TToolButton; + ToolButton40: TToolButton; + ToolButton41: TToolButton; + ToolButton43: TToolButton; procedure acArcCloseFileExecute(Sender: TObject); procedure acArcCloseProjExecute(Sender: TObject); procedure acArcOpenExecute(Sender: TObject); @@ -160,6 +184,7 @@ TfrmPrincipal = class(TForm) procedure acEdRedoExecute(Sender: TObject); procedure acEdSelecAllExecute(Sender: TObject); procedure acEdUndoExecute(Sender: TObject); + procedure acToolComEjecExecute(Sender: TObject); procedure acToolCompilExecute(Sender: TObject); procedure acToolASMDebugExecute(Sender: TObject); procedure acToolListRepExecute(Sender: TObject); @@ -172,6 +197,11 @@ TfrmPrincipal = class(TForm) procedure acToolFindDecExecute(Sender: TObject); procedure acToolPICExplExecute(Sender: TObject); procedure acToolRamExpExecute(Sender: TObject); + procedure acToolSelPIC10Execute(Sender: TObject); + procedure acToolSelPIC16Execute(Sender: TObject); + procedure acToolSelPIC17Execute(Sender: TObject); + procedure acToolTestPic10Execute(Sender: TObject); + procedure acToolTestUnitExecute(Sender: TObject); procedure acViewAsmPanExecute(Sender: TObject); procedure acViewSynTreeExecute(Sender: TObject); procedure acViewStatbarExecute(Sender: TObject); @@ -190,7 +220,12 @@ TfrmPrincipal = class(TForm) procedure FormDestroy(Sender: TObject); procedure ReplaceDialog1Replace(Sender: TObject); procedure Timer1Timer(Sender: TObject); + procedure ToolBar5PaintButton(Sender: TToolButton; State: integer); private + Compiler10 : TCompiler_PIC10; + Compiler16 : TCompiler_PIC16; + Compiler17 : TCompiler_PIC17; + Compiler : TCompilerBase; tic : integer; //Contador para temporización ticSynCheck : integer; //Contador para temporizar la verifiación ed sintaxis curProj : TPicPasProject; //Proyecto actual @@ -198,10 +233,11 @@ TfrmPrincipal = class(TForm) fraEditView1: TfraEditView; //Panel de editores fraSynTree : TfraSyntaxTree; //Árbol de sintaxis fraMessages : TfraMessagesWin; - CT : TCodeTool; + CodeTool : TCodeTool; + procedure CompileFile(filName: string); procedure ConfigExtTool_RequirePar(var comLine: string); - procedure cxp_AfterCompile; - procedure cxp_RequireFileString(FilePath: string; var strList: TStrings); + procedure Compiler16_AfterCompile; + procedure Compiler16_RequireFileString(FilePath: string; var strList: TStrings); procedure fraEdit_RequireSetCompletion(ed: TSynEditor); procedure fraMessagesStatisDBlClick; procedure fraSynTreeSelecFileExplorer; @@ -223,12 +259,13 @@ TfrmPrincipal = class(TForm) var frmPrincipal: TfrmPrincipal; var - MSG_MODIF : string; - MSG_SAVED : string; - MSG_NOFILES : string; - MSG_NOFOUND_: string; - MSG_REPTHIS : string; - MSG_N_REPLAC: string; + MSG_MODIFIED, MSG_SAVED, MSG_NOFILES, MSG_NOFOUND_ : string; + MSG_REPTHIS, MSG_N_REPLAC, MSG_SYNFIL_NOF, MSG_FILSAVCOMP: string; + MSG_BASEL_COMP: string; + MSG_MIDRAN_COMP: string; + MSG_ENMIDR_COMP: String; + MSG_PROJECT : String; + implementation {$R *.lfm} { TfrmPrincipal } @@ -241,10 +278,17 @@ procedure TfrmPrincipal.SetLanguage(idLang: string); fraSynTree.SetLanguage; fraEditView1.SetLanguage; fraMessages.SetLanguage; - Parser.SetLanguage; - ParserAsm.SetLanguage; - ParserDirec.SetLanguage; + frmDebug.SetLanguage; + Compiler_PIC10.SetLanguage; + Compiler_PIC16.SetLanguage; + Compiler_PIC17.SetLanguage; + CompBase.SetLanguage; + //ParserAsm_PIC16.SetLanguage; + //ParserDirec_PIC16.SetLanguage; {$I ..\language\tra_FormPrincipal.pas} + acToolSelPIC10.Caption := MSG_BASEL_COMP; + acToolSelPIC16.Caption := MSG_MIDRAN_COMP; + acToolSelPIC17.Caption := MSG_ENMIDR_COMP; end; procedure TfrmPrincipal.fraSynTreeSelectElemen(var elem: TxpElement); begin @@ -267,7 +311,7 @@ procedure TfrmPrincipal.fraSynTreeSelecFileExplorer; fraSynTree.LocateFile(ed.FileName); end; end; -procedure TfrmPrincipal.cxp_RequireFileString(FilePath: string; var strList: TStrings); +procedure TfrmPrincipal.Compiler16_RequireFileString(FilePath: string; var strList: TStrings); {El compilador está solicitando acceder a un STringList, con el contenido de "FilePath", para evitar tener que leerlo de disco, y ahcer más rápido el acceso.} var @@ -278,14 +322,14 @@ procedure TfrmPrincipal.cxp_RequireFileString(FilePath: string; var strList: TSt if i <> -1 then begin //Tiene el archivo abierto. Pasa la referencia. ed := fraEditView1.editors[i]; - if cxp.Compiling then ed.SaveFile; //En compilación gurada siempre los archivos afectados + if Compiler.Compiling then ed.SaveFile; //En compilación guarda siempre los archivos afectados strList := ed.SynEdit.Lines; end; end; procedure TfrmPrincipal.fraEdit_ChangeEditorState(ed: TSynEditor); {Se produjo una modificación en el editor "ed"} begin - if not cxp.Compiling then begin + if not Compiler.Compiling then begin //En compilación no se activa la verificación automática de sintaxis ticSynCheck := 0; //reinicia cuenta end; @@ -299,7 +343,7 @@ procedure TfrmPrincipal.fraEdit_ChangeEditorState(ed: TSynEditor); ed.ClearMarkErr; //Quita la marca de error que pudiera haber end; procedure TfrmPrincipal.fraEdit_SelectEditor; -{Se ha cambiado el estado de los editores: Se ha cambaido la selección, se ha +{Se ha cambiado el estado de los editores: Se ha cambiado la selección, se ha agregado o eliminado alguno.} var ed: TSynEditor; @@ -337,16 +381,17 @@ procedure TfrmPrincipal.fraEdit_RequireSynEditConfig(ed: TsynEdit); Config.ConfigEditor(ed); end; procedure TfrmPrincipal.fraEdit_RequireSetCompletion(ed: TSynEditor); -{SOlicita configurar el completado de código al resaltador} +{Solicita configurar el completado de código al resaltador.} begin - ct.SetCompletion(ed); + CodeTool.SetCompletion(ed); + //¿Y si el archivo no es Pascal? end; procedure TfrmPrincipal.fraMessagesStatisDBlClick; //Doble clcik en la sección de estadísticas begin end; -procedure TfrmPrincipal.cxp_AfterCompile; +procedure TfrmPrincipal.Compiler16_AfterCompile; {Se genera después de realizar la compilación.} begin //Refresca el árbol de sintaxis, para actualizar la estructura del árbol de sintaxis @@ -357,25 +402,30 @@ procedure TfrmPrincipal.cxp_AfterCompile; procedure TfrmPrincipal.ConfigExtTool_RequirePar(var comLine: string); {Se pide reemplazar parámetros en línea de comandos de Herramienta externa.} begin - comLine := StringReplace(comLine, '$(hexFile)', cxp.hexFilePath, [rfReplaceAll, rfIgnoreCase]); - comLine := StringReplace(comLine, '$(mainFile)', cxp.mainFilePath, [rfReplaceAll, rfIgnoreCase]); - comLine := StringReplace(comLine, '$(mainPath)', ExtractFileDir(cxp.mainFilePath), [rfReplaceAll, rfIgnoreCase]); - comLine := StringReplace(comLine, '$(picModel)', cxp.PicName, [rfReplaceAll, rfIgnoreCase]); + comLine := StringReplace(comLine, '$(hexFile)', Compiler.hexFilePath, [rfReplaceAll, rfIgnoreCase]); + comLine := StringReplace(comLine, '$(mainFile)', Compiler.mainFilePath, [rfReplaceAll, rfIgnoreCase]); + comLine := StringReplace(comLine, '$(mainPath)', ExtractFileDir(Compiler.mainFilePath), [rfReplaceAll, rfIgnoreCase]); + comLine := StringReplace(comLine, '$(picModel)', Compiler.PICName, [rfReplaceAll, rfIgnoreCase]); end; procedure TfrmPrincipal.LoadAsmSyntaxEd; {Carga archivo de sinatxis para el editor de ASM} var synFile: String; begin - synFile := rutSyntax + DirectorySeparator + 'PicPas_AsmPic.xml'; + synFile := patSyntax + DirectorySeparator + 'PicPas_AsmPic.xml'; if FileExists(synFile) then begin hlAssem.LoadFromFile(synFile); end else begin - MsgErr('Syntax file not found: ' + synFile); + MsgErr(MSG_SYNFIL_NOF, [synFile]); end; end; procedure TfrmPrincipal.FormCreate(Sender: TObject); begin + //Es necesario crear solo una instancia del compilador. + Compiler10 := TCompiler_PIC10.Create; + Compiler16 := TCompiler_PIC16.Create; //Crea una instancia del compilador + Compiler17 := TCompiler_PIC17.Create; + Compiler := Compiler16; //Inicializa variable Compiler fraSynTree := TfraSyntaxTree.Create(self); fraSynTree.Parent := self; //configura panel de mensajes @@ -384,14 +434,14 @@ procedure TfrmPrincipal.FormCreate(Sender: TObject); fraMessages.Align := alClient; fraMessages.OnDblClickMessage := @fraMessagesDblClickMessage; fraMessages.OnStatisDBlClick := @fraMessagesStatisDBlClick; - //configura panel de edición + //Configura panel de edición fraEditView1 := TfraEditView.Create(self); fraEditView1.Parent := self; fraEditView1.OnChangeEditorState := @fraEdit_ChangeEditorState; fraEditView1.OnSelectEditor := @fraEdit_SelectEditor; fraEditView1.OnRequireSynEditConfig := @fraEdit_RequireSynEditConfig; fraEditview1.OnRequireSetCompletion := @fraEdit_RequireSetCompletion; - //COnfigura Árbol de sintaxis + //Configura Árbol de sintaxis fraSynTree.OnSelectElemen := @fraSynTreeSelectElemen; fraSynTree.OnOpenFile := @fraSynTreeOpenFile; fraSynTree.OnSelecFileExplorer := @fraSynTreeSelecFileExplorer; @@ -399,18 +449,31 @@ procedure TfrmPrincipal.FormCreate(Sender: TObject); hlAssem := TSynFacilSyn.Create(self); edAsm.Highlighter := hlAssem; LoadAsmSyntaxEd; - CT := TCodeTool.Create(fraEditView1, cxp, fraSynTree); - cxp.OnRequireFileString := @cxp_RequireFileString; - cxp.OnAfterCompile := @cxp_AfterCompile; + CodeTool := TCodeTool.Create(fraEditView1); + //Configura eventos de los compiladores + Compiler10.OnRequireFileString := @Compiler16_RequireFileString; + COmpiler10.OnAfterCompile := @Compiler16_AfterCompile; + Compiler16.OnRequireFileString := @Compiler16_RequireFileString; + Compiler16.OnAfterCompile := @Compiler16_AfterCompile; + Compiler17.OnRequireFileString := @Compiler16_RequireFileString; + Compiler17.OnAfterCompile := @Compiler16_AfterCompile; //Crea dinámicamente para poder inciailizarlo con comodidad frmDebug:= TfrmDebugger.Create(self); - frmDebug.pic := cxp.pic; +// ToolButton39.Width := 20; +end; +procedure TfrmPrincipal.FormDestroy(Sender: TObject); +begin + frmDebug.Destroy; + CodeTool.Destroy; + hlAssem.Free; + Compiler17.Destroy; + Compiler16.Destroy; + Compiler10.Destroy; end; procedure TfrmPrincipal.FormShow(Sender: TObject); var Hay: Boolean; SR: TSearchRec; - srcFile: String; begin fraSynTree.Align := alLeft; fraSynTree.Visible := true; @@ -420,33 +483,20 @@ procedure TfrmPrincipal.FormShow(Sender: TObject); InicEditorC1(edAsm); splEdPas.Align := alRight; fraEditView1.Align := alClient; - fraSynTree.Init(cxp.TreeElems); - fraEditView1.tmpPath := rutTemp; //fija ruta de trabajo + fraEditView1.tmpPath := patTemp; //fija ruta de trabajo Config.Iniciar; //necesario para poder trabajar Config.OnPropertiesChanges := @ChangeAppearance; + //Configura frame de Herramientas Externas. Config.fraCfgExtTool.OnReplaceParams := @ConfigExtTool_RequirePar; - //Verifica si se llamó por línea de comando - if Paramcount>0 then begin - //Hay línea de comando - srcFile := ParamStr(1); //Lee archivo fuente - {Es facil compilar por línea de comando en una aplicación para windows. Lo difícil - es mostrar mensajes en la consola, proque no hay un terminal asociado. Usar writeln() - generaría error y debugln(), solo funciona cuando se compila como aplicación de - consola. Quizá lo mejor sería crear otro modo de compilación que sesa de consola, - para que funcione bien la compilación por línea de comando.'} - cxp.Compile(srcFile, true); - if cxp.HayError then begin - MsgBox('Compilation with errors.') - end else begin - MsgBox('Compilation successful.'); - end; - self.Close; - end; + Config.fraCfgExtTool.SetImageList(ImgActions16, ImgActions32, 33); + + CodeTool.SetCompiler(Compiler); + fraSynTree.Init(Compiler.TreeElems); //Termina configuración fraEditView1.InitMenuRecents(mnRecents, Config.fraCfgSynEdit.ArcRecientes); //inicia el menú "Recientes" ChangeAppearance; //primera actualización //Carga lista de ejemplos - Hay := FindFirst(rutSamples + DirectorySeparator + '*.pas', faAnyFile - faDirectory, SR) = 0; + Hay := FindFirst(patSamples + DirectorySeparator + '*.pas', faAnyFile - faDirectory, SR) = 0; while Hay do begin //encontró archivo AddItemToMenu(mnSamples, '&'+ChangeFileExt(SR.name,''),@DoSelectSample); @@ -455,6 +505,12 @@ procedure TfrmPrincipal.FormShow(Sender: TObject); //Inicia encabezado //Carga último archivo if Config.LoadLast then fraEditView1.LoadListFiles(Config.filesClosed); + //Selecciona el último compilador usado + case Config.compSelected of + 0: acToolSelPIC10Execute(self); + 1: acToolSelPIC16Execute(self); + 2: acToolSelPIC17Execute(self); + end; end; procedure TfrmPrincipal.DoSelectSample(Sender: TObject); //Se ha seleccionado un archivo de ejemplo. @@ -463,7 +519,7 @@ procedure TfrmPrincipal.DoSelectSample(Sender: TObject); it: TMenuItem; begin it := TMenuItem(Sender); - SamFil := rutSamples + DirectorySeparator + it.Caption + '.pas'; + SamFil := patSamples + DirectorySeparator + it.Caption + '.pas'; SamFil := StringReplace(SamFil,'&','',[rfReplaceAll]); //Carga archivo fraEditView1.LoadFile(SamFil); @@ -491,12 +547,6 @@ procedure TfrmPrincipal.FormClose(Sender: TObject; var CloseAction: TCloseAction Config.SynTreeWidth := fraSynTree.Width; //Guarda ancho Config.SaveToFile; //guarda la configuración actual end; -procedure TfrmPrincipal.FormDestroy(Sender: TObject); -begin - frmDebug.Destroy; - CT.Destroy; - hlAssem.Free; -end; procedure TfrmPrincipal.Timer1Timer(Sender: TObject); var ed: TSynEditor; @@ -513,7 +563,7 @@ procedure TfrmPrincipal.Timer1Timer(Sender: TObject); ed := fraEditView1.ActiveEditor; //Actualiza Barra de estado if ed.Modified then - StatusBar1.Panels[0].Text := MSG_MODIF + StatusBar1.Panels[0].Text := MSG_MODIFIED else StatusBar1.Panels[0].Text := MSG_SAVED; //Actualiza cursor @@ -528,17 +578,52 @@ procedure TfrmPrincipal.Timer1Timer(Sender: TObject); ed := fraEditView1.ActiveEditor; if (ed.SynEdit.Lines.Count <=1) and (trim(ed.Text)='') then begin //Verifica rápidamente si hay texto en el editor - fraMessages.InitCompilation(cxp, false); //Limpia mensajes + fraMessages.InitCompilation(Compiler, false); //Limpia mensajes exit; end; - fraMessages.InitCompilation(cxp, false); //Limpia mensajes - cxp.Compile(ed.FileName, false); + fraMessages.InitCompilation(Compiler, false); //Limpia mensajes + Compiler.Compile(ed.FileName, false); //Puede haber generado error, los mismos que deben haberse mostrado en el panel. MarkErrors; //Resalta errores, si están en el editor actual fraMessages.FilterGrid; //Para que haga visible la lista de mensajes end; end; end; +procedure TfrmPrincipal.ToolBar5PaintButton(Sender: TToolButton; State: integer +{Paint the button for Select Compiler.} + ); +var + but: TToolButton; + bRect : TRect; + cv : TCanvas; + txtAlt, yArr: integer; +begin + + but := ToolBar5.Buttons[0]; + bRect := but.BoundsRect; + cv := but.Canvas; + txtAlt := cv.TextHeight('X'); + //Dibuja flecha + yArr := (but.height div 2) - 4; + cv.Pen.Color := Config.PanTextCol; + cv.Line(2,yArr , 8, yArr); + cv.Line(2,yArr+1, 8, yArr+1); + + cv.Line(3,yArr+2, 7, yArr+2); + cv.Line(3,yArr+3, 7, yArr+3); + + cv.Line(4,yArr+4, 6, yArr+4); + cv.Line(4,yArr+5, 6, yArr+5); + + cv.Line(5,yArr+6, 5, yArr+6); + cv.Line(5,yArr+7, 5, yArr+7); + + //Dibuja ícono y texto + ImgActions16.Draw(cv, bRect.Left+11, bRect.Top + (but.height div 2) - 8, 27); + cv.Brush.Style := bsClear; //Texto sin fondo + cv.Font.Color := Config.PanTextCol; + cv.Textout(31, but.height div 2 - (txtAlt div 2), but.Caption); +end; procedure TfrmPrincipal.FormDropFiles(Sender: TObject; const FileNames: array of String); var i: Integer; @@ -550,8 +635,10 @@ procedure TfrmPrincipal.FormDropFiles(Sender: TObject; const FileNames: array of end; procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); +var + curNode: String; begin - {Realmente, todo este código podrái ir dentro de de CT.KeyDown.} + {Realmente, todo este código podrái ir dentro de de CodeTool.KeyDown.} if (Shift = [ssCtrl]) and (Key = VK_TAB) then begin if fraEditView1.HasFocus then begin if fraEditView1.Count>1 then begin @@ -569,10 +656,21 @@ procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word; end; if (Shift = [ssCtrl]) and (Key = VK_F4) then begin if fraEditView1.HasFocus then acArcCloseFileExecute(self); + if fraSynTree.HasFocus and (fraSynTree.FileSelected<>'') then + //Hay un archivo seleccionado + if fraEditView1.SelectEditor(fraSynTree.FileSelected) then begin + //Está abierto + curNode := fraSynTree.FileSelected; //Guarda nodo seleccionado + acArcCloseFileExecute(self); //Cierra archivo actual + fraSynTree.LocateFile(curNode); //Restaura nodo seleccionado, porque + //Despues de cerrar + if fraSynTree.frmArcExplor1.TreeView1.Visible then + fraSynTree.frmArcExplor1.TreeView1.SetFocus; + end; Shift := []; Key := 0; //para qie no pase end; //Pasa evento a COde Tool - CT.KeyDown(Sender, Key, Shift); + CodeTool.KeyDown(Sender, Key, Shift); end; procedure TfrmPrincipal.fraMessagesDblClickMessage(const srcPos: TSrcPos); begin @@ -590,6 +688,20 @@ procedure TfrmPrincipal.ChangeAppearance; acEdCopy.Enabled := state; acEdPaste.Enabled := state; end; + procedure SetToolbarSmall(tb: TToolBar); + begin + tb.ButtonHeight:=22; + tb.ButtonWidth:=22; + tb.Height:=26; + tb.Images:=ImgActions16; + end; + procedure SetToolbarBig(tb: TToolBar); + begin + tb.ButtonHeight:=38; + tb.ButtonWidth:=38; + tb.Height:=42; + tb.Images:=ImgActions32; + end; var cad: String; i: Integer; @@ -613,31 +725,35 @@ procedure TfrmPrincipal.ChangeAppearance; acViewStatbar.Checked:= Config.ViewStatusbar; //Visibilidad de la Barra de Herramientas - ToolBar1.Visible := Config.ViewToolbar; + CoolBar1.Visible := Config.ViewToolbar; acViewToolbar.Checked:= Config.ViewToolbar; //Visibilidad del Panel de Mensajes - panMessages.Visible:= Config.ViewPanMsg; - Splitter2.Visible := Config.ViewPanMsg; + panMessages.Visible := Config.ViewPanMsg; + Splitter2.Visible := Config.ViewPanMsg; acViewMsgPan.Checked:= Config.ViewPanMsg; //Visibilidad del Visor de Ensamblador - edAsm.Visible := Config.ViewPanAssem; - splEdPas.Visible := Config.ViewPanAssem; + edAsm.Visible := Config.ViewPanAssem; + splEdPas.Visible := Config.ViewPanAssem; acViewAsmPan.Checked:= Config.ViewPanAssem; //Tamaño de la Barra de Herramientas case Config.StateToolbar of stb_SmallIcon: begin - ToolBar1.ButtonHeight:=22; - ToolBar1.ButtonWidth:=22; - ToolBar1.Height:=26; - ToolBar1.Images:=ImgActions16; + SetToolbarSmall(Toolbar2); + SetToolbarSmall(Toolbar3); + SetToolbarSmall(Toolbar4); + SetToolbarSmall(Toolbar5); + SetToolbarSmall(Toolbar6); + CoolBar1.AutosizeBands; //Update size end; stb_BigIcon: begin - ToolBar1.ButtonHeight:=38; - ToolBar1.ButtonWidth:=38; - ToolBar1.Height:=42; - ToolBar1.Images:=ImgActions32; + SetToolbarBig(ToolBar2); + SetToolbarBig(ToolBar3); + SetToolbarBig(ToolBar4); + SetToolbarBig(ToolBar5); + SetToolbarBig(ToolBar6); + CoolBar1.AutosizeBands; //Update size end; end; //Configura Explorador de código @@ -652,55 +768,54 @@ procedure TfrmPrincipal.ChangeAppearance; fraMessages.BackSelColor := Config.MessPanSel; fraMessages.PanelColor := Config.PanelsCol; - ToolBar1.Color := Config.PanelsCol; + + //Set color to Toolbars + ToolBar2.Color := Config.PanelsCol; + ToolBar3.Color := Config.PanelsCol; + ToolBar4.Color := Config.PanelsCol; + ToolBar5.Color := Config.PanelsCol; + ToolBar6.Color := Config.PanelsCol; + + //Set color to Coolbars + CoolBar1.Color := Config.PanelsCol; + CoolBar1.Bands[0].Color := Config.PanelsCol; + CoolBar1.Bands[1].Color := Config.PanelsCol; + CoolBar1.Bands[2].Color := Config.PanelsCol; + CoolBar1.Bands[3].Color := Config.PanelsCol; + CoolBar1.Bands[4].Color := Config.PanelsCol; + fraEditView1.Panel1.Color := Config.PanelsCol; //fraEditView1.Color := Config.PanelsCol; //Color de separadores - Splitter2.Color := Config.SplitterCol; - splSynTree.Color := Config.SplitterCol; - splEdPas.Color := Config.SplitterCol; + Splitter2.Color := Config.SplitCol; + splSynTree.Color := Config.SplitCol; + splEdPas.Color := Config.SplitCol; //Configura editor ASM Config.ConfigEditor(edAsm); LoadAsmSyntaxEd; //Solicita configura los editores activos fraEditView1.UpdateSynEditConfig; fraEditView1.TabViewMode := Config.TabEdiMode; + //Configura accesos a herramientas externas. //Solo es aplicable a las primeras 5 herramientas - acToolExt1.Visible := false; - acToolExt2.Visible := false; - acToolExt3.Visible := false; - acToolExt4.Visible := false; - acToolExt5.Visible := false; + Config.fraCfgExtTool.ReloadIcons; //Actualiza íconos + acExtTool1.Visible := false; + acExtTool2.Visible := false; + acExtTool3.Visible := false; + acExtTool4.Visible := false; + acExtTool5.Visible := false; +//debugln('?'+config.fraCfgExtTool.ExternTools.Text); for i:=0 to config.fraCfgExtTool.ExternTools.Count-1 do begin cad := config.fraCfgExtTool.ExternTools[i]; tool.ReadFromString(cad); //lee campos +//debugln('*'+tool.ToString); case i of - 0: if tool.ShowInTbar then begin - acToolExt1.Visible := true; - acToolExt1.Caption:= tool.name; - acToolExt1.Hint := tool.name; - end; - 1: if tool.ShowInTbar then begin - acToolExt2.Visible := true; - acToolExt2.Caption:= tool.name; - acToolExt2.Hint := tool.name; - end; - 2: if tool.ShowInTbar then begin - acToolExt3.Visible := true; - acToolExt3.Caption:= tool.name; - acToolExt3.Hint := tool.name; - end; - 3: if tool.ShowInTbar then begin - acToolExt4.Visible := true; - acToolExt4.Caption:= tool.name; - acToolExt4.Hint := tool.name; - end; - 4: if tool.ShowInTbar then begin - acToolExt5.Visible := true; - acToolExt5.Caption:= tool.name; - acToolExt5.Hint := tool.name; - end; + 0: tool.SetAction16(acExtTool1); + 1: tool.SetAction16(acExtTool2); + 2: tool.SetAction16(acExtTool3); + 3: tool.SetAction16(acExtTool4); + 4: tool.SetAction16(acExtTool5); end; end; end; @@ -722,7 +837,7 @@ procedure TfrmPrincipal.editChangeFileInform; end; end else begin //Hay un proyecto abierto - Caption := NOM_PROG + ' - ' + VER_PROG + ' - Project: ' + curProj.name; + Caption := NOM_PROG + ' - ' + VER_PROG + ' - ' + MSG_PROJECT + curProj.name; end; if (ed<>nil) and (ed.FileName<>'') then begin fraSynTree.LocateFile(ed.FileName); @@ -784,6 +899,27 @@ procedure TfrmPrincipal.ReplaceDialog1Replace(Sender: TObject); end; MsgBox(MSG_NOFOUND_, [buscado]); end; +procedure TfrmPrincipal.CompileFile(filName: string); +begin + fraMessages.InitCompilation(Compiler, true); //Limpia mensajes + Compiler.incDetComm := Config.IncComment2; //Visualización de mensajes + Compiler.SetProIniBnk := not Config.OptBnkBefPro; + Compiler.OptBnkAftPro := Config.OptBnkAftPro; + Compiler.OptBnkAftIF := Config.OptBnkAftIF; + Compiler.OptReuProVar := Config.ReuProcVar; + Compiler.OptRetProc := Config.OptRetProc; + ticSynCheck := 1000; //Desactiva alguna Verif. de sintaxis, en camino. + Compiler.Compiling := true; //Activa bandera + Compiler.Compile(filName, true); + Compiler.Compiling := false; + if fraMessages.HaveErrors then begin + fraMessages.EndCompilation; + VerificarError; + MarkErrors; + exit; + end; + fraMessages.EndCompilation; +end; /////////////////// Acciones de Archivo ///////////////////// procedure TfrmPrincipal.acArcNewFileExecute(Sender: TObject); begin @@ -793,9 +929,14 @@ procedure TfrmPrincipal.acArcNewFileExecute(Sender: TObject); Add('// New program created in ' + DateToStr(now) + '}'); Add('////////////////////////////////////////////'); Add('program NewProgram;'); - Add('{$PROCESSOR PIC16F84A}'); + if compiler = Compiler10 then begin + Add('uses PIC10F200;'); + end else if compiler = Compiler17 then begin + Add('uses PIC16F1825;'); + end else begin //Para los otros casos + Add('uses PIC16F84A;'); + end; Add('{$FREQUENCY 4MHZ}'); - Add('uses PIC16F84A;'); Add(' '); Add('//Declarations here'); Add(' '); @@ -931,50 +1072,44 @@ procedure TfrmPrincipal.acToolCompilExecute(Sender: TObject); if filName='' then begin //No tiene nombre. No debería pasar, porque "fraEditView1" debe generar nombres. if fraEditView1.SaveAsDialog then begin - MsgExc('File must be saved before compiling.'); + MsgExc(MSG_FILSAVCOMP); exit; end; end; - fraMessages.InitCompilation(cxp, true); //Limpia mensajes - cxp.incDetComm := Config.IncComment2; //Visualización de mensajes - cxp.SetProIniBnk := not Config.OptBnkBefPro; - cxp.OptBnkAftPro := Config.OptBnkAftPro; - cxp.OptBnkAftIF := Config.OptBnkAftIF; - cxp.OptReuProVar := Config.ReuProcVar; - cxp.OptRetProc := Config.OptRetProc; - ticSynCheck := 1000; //Desactiva alguna Verif. de sintaxis, en camino. - cxp.Compiling := true; //Activa bandera - cxp.Compile(filName); - cxp.Compiling := false; - if fraMessages.HaveErrors then begin - fraMessages.EndCompilation; - VerificarError; - MarkErrors; - exit; - end; - fraMessages.EndCompilation; + + CompileFile(filName); //Genera código ensamblador edAsm.BeginUpdate(false); edAsm.Lines.Clear; if Config.IncHeadMpu then begin //Incluye encabezado - edAsm.Lines.Add(' list p='+ cxp.PicNameShort); - edAsm.Lines.Add(' #include '); + edAsm.Lines.Add(' list p='+ Compiler.PICNameShort); + edAsm.Lines.Add(' #include '); // edAsm.Lines.Add(' __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC'); end; if Config.IncVarDec then begin edAsm.Lines.Add(';===RAM usage==='); - cxp.RAMusage(edAsm.Lines, Config.VarDecType, Config.ExcUnused); + Compiler.RAMusage(edAsm.Lines, Config.VarDecType, Config.ExcUnused); end; edAsm.Lines.Add(';===Blocks of Code==='); - cxp.DumpCode(edAsm.Lines, Config.IncAddress, true, COnfig.IncVarName ); + Compiler.DumpCode(edAsm.Lines, Config.IncAddress, true, COnfig.IncVarName ); edAsm.Lines.Add(';--------------------'); edAsm.Lines.Add(' END'); edAsm.EndUpdate; end; +procedure TfrmPrincipal.acToolComEjecExecute(Sender: TObject); +{Compila y ejecuta en la ventana de simulación} +begin + acToolCompilExecute(self); + if Compiler.CompiledUnit then exit; //No es programa + if not fraMessages.HaveErrors then begin + frmDebug.Exec(Compiler); + frmDebug.acGenRunExecute(self); + end; +end; procedure TfrmPrincipal.acToolASMDebugExecute(Sender: TObject); begin - frmDebug.Exec; + frmDebug.Exec(Compiler); end; procedure TfrmPrincipal.acToolPICExplExecute(Sender: TObject); begin @@ -982,11 +1117,7 @@ procedure TfrmPrincipal.acToolPICExplExecute(Sender: TObject); end; procedure TfrmPrincipal.acToolRamExpExecute(Sender: TObject); begin - frmRAMExplorer.Exec(cxp.pic); -end; -procedure TfrmPrincipal.acToolConfigExecute(Sender: TObject); -begin - Config.Mostrar; + frmRAMExplorer.Exec(Compiler); end; procedure TfrmPrincipal.acToolListRepExecute(Sender: TObject); {Muestra un conteo de instrucciones.} @@ -996,9 +1127,153 @@ procedure TfrmPrincipal.acToolListRepExecute(Sender: TObject); fraEditView1.NewLstFile; edit := fraEditView1.ActiveEditor; edit.SynEdit.BeginUpdate; - cxp.GenerateListReport(edit.SynEdit.Lines); + Compiler.GenerateListReport(edit.SynEdit.Lines); edit.SynEdit.EndUpdate; end; +procedure TfrmPrincipal.acToolTestUnitExecute(Sender: TObject); +{Inicia la prueba de unidades de las carpetas /device10, /device16 y /device17.} + procedure TestDevicesUnits(var nFil: integer); + var + SearchRec: TSearchRec; + directorio, nomArc: String; + begin + directorio := compiler.devicesPath; + if FindFirst(directorio + DirectorySeparator + 'PIC*.pas', faDirectory, SearchRec) = 0 then begin + repeat + inc(nFil); + nomArc := SysToUTF8(SearchRec.Name); + if SearchRec.Attr and faDirectory = faDirectory then begin + //directorio + end else begin //archivo + //Unidad de PIC + nomArc := directorio + DirectorySeparator + nomArc; + DebugLn('Compiling: '+ nomArc); + CompileFile(nomArc); + if Compiler.HayError then break; + end; + fraMessages.AddInformation(Format('%d files processed...', [nFil])); + Application.ProcessMessages; //Para refrescar ventanas + until FindNext(SearchRec) <> 0; + FindClose(SearchRec); + end; + end; +var + nFiles: Integer; +begin + nFiles := 0; + //Prueba Unidades de PIC10 + acToolSelPIC10Execute(self); + TestDevicesUnits(nFiles); + if Compiler.HayError then exit; + //Prueba Unidades de PIC16 + acToolSelPIC16Execute(self); //Elige compilador + TestDevicesUnits(nFiles); + if Compiler.HayError then exit; + //Prueba Unidades de PIC17 + acToolSelPIC17Execute(self); //Elige compilador + TestDevicesUnits(nFiles); + if Compiler.HayError then exit; + MsgBox('%d files tested OK.', [nFiles]); +end; +procedure TfrmPrincipal.acToolTestPic10Execute(Sender: TObject); + procedure TestUnits(var nFil: integer); + var + SearchRec: TSearchRec; + directorio, nomArc: String; + begin + directorio := patApp + DirectorySeparator + 'testcode10'; + if FindFirst(directorio + DirectorySeparator + '*.pas', faDirectory, SearchRec) = 0 then begin + repeat + inc(nFil); + nomArc := SysToUTF8(SearchRec.Name); + if SearchRec.Attr and faDirectory = faDirectory then begin + //directorio + end else begin //archivo + //Unidad de PIC + nomArc := directorio + DirectorySeparator + nomArc; + DebugLn('Compiling: '+ nomArc); + CompileFile(nomArc); + if Compiler.HayError then break; + end; + fraMessages.AddInformation(Format('%d files processed...', [nFil])); + Application.ProcessMessages; //Para refrescar ventanas + until FindNext(SearchRec) <> 0; + FindClose(SearchRec); + end; + end; +var + nFiles: Integer; +begin + nFiles := 0; + acToolSelPIC10Execute(self); + TestUnits(nFiles); + if Compiler.HayError then exit; + MsgBox('%d files tested OK.', [nFiles]); +end; +procedure TfrmPrincipal.acToolConfigExecute(Sender: TObject); +begin + Config.Mostrar; +end; +procedure TfrmPrincipal.acToolSelPIC10Execute(Sender: TObject); +begin + Compiler := Compiler10; + acToolSelPIC10.Checked := true; + acToolSelPIC16.Checked := false; + acToolSelPIC17.Checked := false; + ToolButton39.Caption := copy(MSG_BASEL_COMP,1,18); + StatusBar1.Panels[2].Text := MSG_BASEL_COMP; + CoolBar1.AutosizeBands; //Update size + //Para compilar de nuevo si está en modo de correccíón de Sintaxis + if fraEditView1.ActiveEditor <> nil then begin + fraEdit_ChangeEditorState(fraEditView1.ActiveEditor); + end; + //Para recargar CodeTools en todos los editores abiertos + CodeTool.SetCompiler(Compiler); + Config.compSelected := 0; //Guarda el índica del compilador + fraEditView1.UpdateSynEditCompletion; + //Inicia árbol de sintaxis + fraSynTree.Init(Compiler.TreeElems); +end; +procedure TfrmPrincipal.acToolSelPIC16Execute(Sender: TObject); +begin + Compiler := Compiler16; + acToolSelPIC10.Checked := false; + acToolSelPIC16.Checked := true; + acToolSelPIC17.Checked := false; + ToolButton39.Caption := copy(MSG_MIDRAN_COMP,1,18); + StatusBar1.Panels[2].Text := MSG_MIDRAN_COMP; + CoolBar1.AutosizeBands; //Update size + //Para compilar de nuevo si está en modo de correccíón de Sintaxis + if fraEditView1.ActiveEditor <> nil then begin + fraEdit_ChangeEditorState(fraEditView1.ActiveEditor); + end; + //Para recargar CodeTools en todos los editores abiertos + CodeTool.SetCompiler(Compiler); + Config.compSelected := 1; //Guarda el índica del compilador + fraEditView1.UpdateSynEditCompletion; + //Inicia árbol de sintaxis + fraSynTree.Init(Compiler.TreeElems); +end; +procedure TfrmPrincipal.acToolSelPIC17Execute(Sender: TObject); +begin + Compiler := Compiler17; + acToolSelPIC10.Checked := false; + acToolSelPIC16.Checked := false; + acToolSelPIC17.Checked := true; + ToolButton39.Caption := copy(MSG_ENMIDR_COMP,1,18); + StatusBar1.Panels[2].Text := MSG_ENMIDR_COMP; + CoolBar1.AutosizeBands; //Update size + //Para compilar de nuevo si está en modo de correccíón de Sintaxis + if fraEditView1.ActiveEditor <> nil then begin + fraEdit_ChangeEditorState(fraEditView1.ActiveEditor); + end; + //Para recargar CodeTools en todos los editores abiertos + CodeTool.SetCompiler(Compiler); + Config.compSelected := 2; //Guarda el índica del compilador + fraEditView1.UpdateSynEditCompletion; + //Inicia árbol de sintaxis + fraSynTree.Init(Compiler.TreeElems); +end; procedure TfrmPrincipal.acToolExt1Execute(Sender: TObject); begin Config.fraCfgExtTool.ExecTool(0); @@ -1023,7 +1298,7 @@ procedure TfrmPrincipal.acToolFindDecExecute(Sender: TObject); {Ubica la declaración del elemento} begin if fraEditView1.Count=0 then exit; - ct.GoToDeclaration; + CodeTool.GoToDeclaration; end; //Adicionales procedure TfrmPrincipal.MarkErrors; @@ -1062,7 +1337,8 @@ procedure TfrmPrincipal.VerificarError; row, col: integer; begin fraMessages.GetFirstError(msg, filname, row, col); - if msg='' then exit; + //if msg='' then exit; El error puede no tener texto si no se definió bien la traducción + if row=-1 then exit; //Selecciona posición de error en el Editor if filname <> '' Then begin fraEditView1.SelectOrLoad(filname); //Selecciona o abre diff --git a/Source/FormRAMExplorer.lfm b/Source/FormRAMExplorer.lfm index a76229d4..07202de8 100644 --- a/Source/FormRAMExplorer.lfm +++ b/Source/FormRAMExplorer.lfm @@ -1,10 +1,12 @@ object frmRAMExplorer: TfrmRAMExplorer - Left = 200 + Left = 332 Height = 488 - Top = 100 + Top = 134 Width = 606 AutoSize = True Caption = 'RAM Explorer' + ClientHeight = 488 + ClientWidth = 606 Icon.Data = { BE1000000000010001002020000001002000A810000016000000280000002000 0000400000000100200000000000001000006400000064000000000000000000 @@ -145,5 +147,71 @@ object frmRAMExplorer: TfrmRAMExplorer KeyPreview = True OnCreate = FormCreate OnKeyDown = FormKeyDown - LCLVersion = '1.6.2.0' + LCLVersion = '1.8.0.6' + object panStatBar: TPanel + Left = 0 + Height = 31 + Top = 457 + Width = 606 + Align = alBottom + ClientHeight = 31 + ClientWidth = 606 + TabOrder = 0 + object Label2: TLabel + Left = 40 + Height = 15 + Top = 4 + Width = 19 + Caption = 'SFR' + ParentColor = False + end + object Label3: TLabel + Left = 120 + Height = 15 + Top = 4 + Width = 22 + Caption = 'GPR' + ParentColor = False + end + object Label4: TLabel + Left = 304 + Height = 15 + Top = 4 + Width = 59 + Caption = 'Unimplem.' + ParentColor = False + end + object Shape1: TShape + Left = 8 + Height = 18 + Top = 4 + Width = 24 + end + object Shape2: TShape + Left = 88 + Height = 18 + Top = 4 + Width = 24 + end + object Shape3: TShape + Left = 272 + Height = 18 + Top = 4 + Width = 24 + end + object Shape4: TShape + Left = 168 + Height = 18 + Top = 4 + Width = 24 + end + object Label5: TLabel + Left = 200 + Height = 15 + Top = 4 + Width = 51 + Caption = 'GPR Used' + ParentColor = False + end + end end diff --git a/Source/FormRAMExplorer.pas b/Source/FormRAMExplorer.pas index 44fea5b6..189dfdc6 100644 --- a/Source/FormRAMExplorer.pas +++ b/Source/FormRAMExplorer.pas @@ -3,19 +3,27 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, LCLType, - FrameRamExplorer, Pic16Utils; + ExtCtrls, StdCtrls, FrameRamExplorer, CompBase; type { TfrmRAMExplorer } TfrmRAMExplorer = class(TForm) + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + panStatBar: TPanel; + Shape1: TShape; + Shape2: TShape; + Shape3: TShape; + Shape4: TShape; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private fra: TfraRamExplorer; public - pic: TPIC16; - procedure Exec(pic0: TPIC16); + procedure Exec(cxp0: TCompilerBase); end; var @@ -32,6 +40,9 @@ procedure TfrmRAMExplorer.FormCreate(Sender: TObject); fra:= TfraRamExplorer.Create(self); fra.Parent := self; fra.panTitle.Visible := false; + Shape1.Brush.Color := $FF9090; + Shape4.Brush.Color := $80FF80; + Shape3.Brush.Color := clGray; end; procedure TfrmRAMExplorer.FormKeyDown(Sender: TObject; var Key: Word; @@ -47,11 +58,10 @@ procedure TfrmRAMExplorer.FormKeyDown(Sender: TObject; var Key: Word; end; end; -procedure TfrmRAMExplorer.Exec(pic0: TPIC16); +procedure TfrmRAMExplorer.Exec(cxp0: TCompilerBase); begin - pic := pic0; - fra.pic := pic0; - Caption := 'RAM Explorer. PICModel=' + pic0.Model; + fra.SetCompiler(cxp0); + Caption := 'RAM Explorer. PICModel=' + cxp0.PICName; Show; self.Width := 600; self.Height := 480; diff --git a/Source/FrameArcExplor.lfm b/Source/FrameArcExplor.lfm index 3c5615d2..9d16f486 100644 --- a/Source/FrameArcExplor.lfm +++ b/Source/FrameArcExplor.lfm @@ -24,11 +24,11 @@ object frmArcExplor: TfrmArcExplor Top = 23 Width = 211 Align = alClient - DefaultItemHeight = 18 ParentShowHint = False RightClickSelect = True ShowHint = True TabOrder = 1 + OnKeyDown = TreeView1KeyDown Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end object ImageList2: TImageList @@ -458,60 +458,64 @@ object frmArcExplor: TfrmArcExplor OnPopup = PopupFolderPopup left = 40 top = 152 - object mnCarExpContr: TMenuItem + object mnFolExpandCol: TMenuItem Caption = 'E&xpandir' - OnClick = mnCarExpContrClick + OnClick = mnFolExpandColClick end - object mnCarAbrirExpWin: TMenuItem + object mnFolOpenInExplor: TMenuItem Caption = 'Abrir en Explor. de &Windows' - OnClick = mnCarAbrirExpWinClick + OnClick = mnFolOpenInExplorClick end - object mnCarNueArc: TMenuItem + object mnFolNewFile: TMenuItem Caption = '&Nuevo Archivo' - OnClick = mnCarNueArcClick + OnClick = mnFolNewFileClick end - object mnCarNueCar: TMenuItem + object mnFolNewFolder: TMenuItem Caption = 'Nueva &Carpeta' - OnClick = mnCarNueCarClick + OnClick = mnFolNewFolderClick end - object mnCarCamNom: TMenuItem + object mnFolChanName: TMenuItem Caption = 'Ca&mbiar Nombre' - OnClick = mnCarCamNomClick + OnClick = mnFolChanNameClick end - object mnCarElimin: TMenuItem + object mnFolDelete: TMenuItem Caption = 'El&iminar' - OnClick = mnCarEliminClick + OnClick = mnFolDeleteClick end object MenuItem3: TMenuItem Caption = '-' end - object mnCarRefrescar: TMenuItem + object mnFolRefresh: TMenuItem Caption = '&Refrescar' - OnClick = mnCarRefrescarClick + OnClick = mnFolRefreshClick end end object PopupFile: TPopupMenu OnPopup = PopupFolderPopup left = 120 top = 152 - object mnArcAbrir: TMenuItem - Caption = '&Abrir' - OnClick = mnArcAbrirClick + object mnFilOpen: TMenuItem + Caption = '&Open' + OnClick = mnFilOpenClick end - object mnArcCamNom: TMenuItem - Caption = 'Ca&mbiar Nombre' - OnClick = mnArcCamNomClick + object mnFilChanName: TMenuItem + Caption = 'C&hange Name' + OnClick = mnFilChanNameClick + end + object mnFilCreCopFrom: TMenuItem + Caption = 'Create Co&py from' + OnClick = mnFilCreCopFromClick end - object mnArcElimin: TMenuItem + object mnFilDelete: TMenuItem Caption = 'El&iminar' - OnClick = mnArcEliminClick + OnClick = mnFilDeleteClick end object MenuItem1: TMenuItem Caption = '-' end - object mnArcRefrescar: TMenuItem + object mnFilRefrescar: TMenuItem Caption = '&Refrescar' - OnClick = mnArcRefrescarClick + OnClick = mnFilRefrescarClick end end end diff --git a/Source/FrameArcExplor.pas b/Source/FrameArcExplor.pas index df4402f0..b574d4c9 100644 --- a/Source/FrameArcExplor.pas +++ b/Source/FrameArcExplor.pas @@ -37,14 +37,20 @@ } unit FrameArcExplor; - {$mode objfpc}{$H+} - interface - uses - Classes, {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, FileUtil, Forms, Controls, StdCtrls, ComCtrls, - LCLType, Menus, Masks, LazUTF8, Dialogs, Graphics, strutils, MisUtils; + Classes, {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, FileUtil, Forms, Controls, StdCtrls, ComCtrls, + LCLType, Menus, Masks, LazUTF8, Dialogs, Graphics, Globales, strutils, + MisUtils; +var + NEW_FILE_NAME: string; + FOLDER_NAME : string; + TXT_EMPTY : string; + TXT_FOLD : string; + TXT_UNFOLD : string; + TXT_NOTDELFOL: string; + TXT_DELFILE : string; type TNodeType = (ntyDrive, ntyFile, ntyFolder); @@ -70,32 +76,34 @@ TfrmArcExplor = class(TFrame) Filter: TComboBox; ImageList2: TImageList; MenuItem1: TMenuItem; - mnArcRefrescar: TMenuItem; - mnCarCamNom: TMenuItem; - mnCarElimin: TMenuItem; - mnCarRefrescar: TMenuItem; + mnFilCreCopFrom: TMenuItem; + mnFilRefrescar: TMenuItem; + mnFolChanName: TMenuItem; + mnFolDelete: TMenuItem; + mnFolRefresh: TMenuItem; MenuItem3: TMenuItem; - mnCarNueCar: TMenuItem; - mnArcCamNom: TMenuItem; - mnArcElimin: TMenuItem; - mnCarExpContr: TMenuItem; - mnCarAbrirExpWin: TMenuItem; - mnCarNueArc: TMenuItem; - mnArcAbrir: TMenuItem; + mnFolNewFolder: TMenuItem; + mnFilChanName: TMenuItem; + mnFilDelete: TMenuItem; + mnFolExpandCol: TMenuItem; + mnFolOpenInExplor: TMenuItem; + mnFolNewFile: TMenuItem; + mnFilOpen: TMenuItem; PopupFolder: TPopupMenu; PopupFile: TPopupMenu; TreeView1: TTreeView; - procedure mnArcAbrirClick(Sender: TObject); - procedure mnArcCamNomClick(Sender: TObject); - procedure mnArcRefrescarClick(Sender: TObject); - procedure mnCarAbrirExpWinClick(Sender: TObject); - procedure mnArcEliminClick(Sender: TObject); - procedure mnCarCamNomClick(Sender: TObject); - procedure mnCarEliminClick(Sender: TObject); - procedure mnCarExpContrClick(Sender: TObject); - procedure mnCarNueArcClick(Sender: TObject); - procedure mnCarNueCarClick(Sender: TObject); - procedure mnCarRefrescarClick(Sender: TObject); + procedure mnFilCreCopFromClick(Sender: TObject); + procedure mnFilOpenClick(Sender: TObject); + procedure mnFilChanNameClick(Sender: TObject); + procedure mnFilRefrescarClick(Sender: TObject); + procedure mnFolOpenInExplorClick(Sender: TObject); + procedure mnFilDeleteClick(Sender: TObject); + procedure mnFolChanNameClick(Sender: TObject); + procedure mnFolDeleteClick(Sender: TObject); + procedure mnFolExpandColClick(Sender: TObject); + procedure mnFolNewFileClick(Sender: TObject); + procedure mnFolNewFolderClick(Sender: TObject); + procedure mnFolRefreshClick(Sender: TObject); procedure PopupFolderPopup(Sender: TObject); procedure TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass); @@ -144,17 +152,26 @@ TfrmArcExplor = class(TFrame) OnRightClickFile : TevClickOnFile; //Click derecho en archivo OnRightClickFolder: TevClickOnFile; //Click derecho en carpeta OnKeyEnterOnFile : TevClickOnFile; //Se presionó la tecla enter en un archivo + OnCloseFile : TevClickOnFile; //Se pide cerrar un archivo // OnKeyDown : TKeyEvent; //TEcla pulsada property TextColor: TColor read FTextColor write SetTextColor; function SelectedNode: TExplorNode; function SelectedFile: TExplorNode; procedure LocateFileOnTree(arch8: string); constructor Create(AOwner: TComponent) ; override; - procedure SetLanguage(lang: string); + procedure SetLanguage; end; implementation {$R *.lfm} +procedure TfrmArcExplor.SetLanguage; +//Rutina de traducción +begin + {$I ..\language\tra_FrameArcExplor.pas} + //Inicia propiedades + NewFileName := NEW_FILE_NAME; + NewFolderName := FOLDER_NAME; +end; procedure TrozaRuta(rut: string; lrut: TStringList); //devuelve una ruta trozada begin if rut = '' then exit; //no hay ruta @@ -366,7 +383,7 @@ procedure TfrmArcExplor.LeerDirectorio(Item0: TTreeNode; filtro: TStringList; end; if (Item0 <> nil) and (Item0.Count=0) then //no hubo elementos. Agrega etiqueta - TreeView1.Items.AddChild(Item0, dic('')); + TreeView1.Items.AddChild(Item0, TXT_EMPTY); finally // TreeView1.Items.AddChild(Item0, ''); //indica error if expandir and (Item0 <> nil) then Item0.Expand(false); @@ -465,16 +482,18 @@ procedure TfrmArcExplor.TreeView1EditingEnd(Sender: TObject; Node: TTreeNode; Ca procedure TfrmArcExplor.TreeView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var nodEx: TExplorNode; + a: TPoint; + relPos: TPoint; begin //Genera el evento en el frame, porque el frame nunca tendrá enfoque if OnKeyDown<>nil then OnKeyDown(Sender, Key, Shift); //procesa teclas especiales - if Key = VK_F2 then mnArcCamNomClick(Self); + if Key = VK_F2 then mnFilChanNameClick(Self); if Key = VK_DELETE then begin nodEx := SelectedNode; //lee seleccionado if nodEx = nil then exit; //verifica - if nodEx.IsFile then mnArcEliminClick(Self); - if nodEx.IsFolder then mnCarEliminClick(Self); + if nodEx.IsFile then mnFilDeleteClick(Self); + if nodEx.IsFolder then mnFolDeleteClick(Self); end; if Key = VK_F5 then ActualPanelArc; if Key = VK_RETURN then begin @@ -482,6 +501,20 @@ procedure TfrmArcExplor.TreeView1KeyDown(Sender: TObject; var Key: Word; Shift: if nodEx = nil then exit; //verifica if OnKeyEnterOnFile<>nil then OnKeyEnterOnFile(nodEx); end; + if (Shift = [ssCtrl]) and (Key = VK_F4) then begin + if nodEx = nil then exit; //verifica + if OnCloseFile<>nil then OnCloseFile(nodEx); + end; + if Key = VK_APPS then begin + //Menú Contextual + nodEx := SelectedNode; //lee seleccionado + relPos.x := nodEx.DisplayRect(true).Left; + relPos.y := nodEx.DisplayRect(true).Bottom; + a := TreeView1.ClientToScreen(relPos); + if nodEx = nil then exit; //verifica + if nodEx.IsFile then PopupFile.PopUp(a.x, a.y); + if nodEx.IsFolder then PopupFolder.PopUp(a.x, a.y); + end; end; procedure TfrmArcExplor.LocateFileOnTree(arch8: string); //Configura el árbol de archivos para ubicar la ruta del archivo indicado. @@ -580,9 +613,6 @@ constructor TfrmArcExplor.Create(AOwner: TComponent); unidades.Free; TreeView1.OnAdvancedCustomDrawItem := @TreeView1AdvancedCustomDrawItem; TreeView1.Options := TreeView1.Options - [tvoThemedDraw]; - //inicia propiedades - NewFileName := dic('nuevo.pas'); - NewFolderName := dic('carpeta'); InternalPopupFolder := false; //desactiva el menú interno InternalPopupFile := false; //desactiva el menú interno end; @@ -591,18 +621,18 @@ procedure TfrmArcExplor.PopupFolderPopup(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; - if curNod.Expanded then mnCarExpContr.Caption:=dic('Con&traer') - else mnCarExpContr.Caption:=dic('E&xpandir'); + if curNod.Expanded then mnFolExpandCol.Caption:= TXT_FOLD + else mnFolExpandCol.Caption:= TXT_UNFOLD; end; -procedure TfrmArcExplor.mnCarExpContrClick(Sender: TObject); +procedure TfrmArcExplor.mnFolExpandColClick(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; curNod.Expanded := not curNod.Expanded; - if curNod.Expanded then mnCarExpContr.Caption:=dic('Con&traer') - else mnCarExpContr.Caption:=dic('E&xpandir'); + if curNod.Expanded then mnFolExpandCol.Caption:= TXT_FOLD + else mnFolExpandCol.Caption:= TXT_UNFOLD; end; -procedure TfrmArcExplor.mnCarAbrirExpWinClick(Sender: TObject); +procedure TfrmArcExplor.mnFolOpenInExplorClick(Sender: TObject); var tmp: String; begin @@ -613,7 +643,7 @@ procedure TfrmArcExplor.mnCarAbrirExpWinClick(Sender: TObject); // tmp := UTF8ToSys(curNod.Path); Exec('explorer', '"' + tmp + '"'); end; -procedure TfrmArcExplor.mnCarNueArcClick(Sender: TObject); +procedure TfrmArcExplor.mnFolNewFileClick(Sender: TObject); var archivo: string; begin @@ -630,7 +660,7 @@ procedure TfrmArcExplor.mnCarNueArcClick(Sender: TObject); end; if curNod.Expanded then ExpandirNodArc(curNod, true); //refresca end; -procedure TfrmArcExplor.mnCarNueCarClick(Sender: TObject); +procedure TfrmArcExplor.mnFolNewFolderClick(Sender: TObject); var carpeta: string; begin @@ -647,162 +677,75 @@ procedure TfrmArcExplor.mnCarNueCarClick(Sender: TObject); end; if curNod.Expanded then ExpandirNodArc(curNod, true); //refresca end; -procedure TfrmArcExplor.mnCarCamNomClick(Sender: TObject); +procedure TfrmArcExplor.mnFolChanNameClick(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; - curNod.EditText; //iniicia edición + curNod.EditText; //inicia edición NombNodEdi := curNod.Path; //Guarda nombre de nodo editado end; -procedure TfrmArcExplor.mnCarEliminClick(Sender: TObject); +procedure TfrmArcExplor.mnFolDeleteClick(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; - MsgExc('No se puede eliminar carpetas.'); + MsgExc(TXT_NOTDELFOL); end; -procedure TfrmArcExplor.mnCarRefrescarClick(Sender: TObject); +procedure TfrmArcExplor.mnFolRefreshClick(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; if curNod.Visible and curNod.Expanded then ExpandirNodArc(curNod, true); //mantiene expansión end; -procedure TfrmArcExplor.mnArcAbrirClick(Sender: TObject); +// File actions +procedure TfrmArcExplor.mnFilOpenClick(Sender: TObject); begin curNod := SelectedNode; if curNod = nil then exit; if OnMenuOpenFile<>nil then OnMenuOpenFile(curNod); end; -procedure TfrmArcExplor.mnArcCamNomClick(Sender: TObject); -begin - mnCarCamNomClick(Sender); //funciona comoa archivo -end; -procedure TfrmArcExplor.mnArcEliminClick(Sender: TObject); +procedure TfrmArcExplor.mnFilCreCopFromClick(Sender: TObject); var - archivo: String; + newFile, archivo: String; begin curNod := SelectedNode; if curNod = nil then exit; if not curNod.IsFile then exit; //no es archivo - //eliminar archivo - if MsgYesNo('¿Eliminar archivo "%s"?', [curNod.Text]) <> 1 then exit; try archivo := UTF8ToSys(curNod.Path); - if FileExists(archivo) then -// DeleteToBin(PChar(archivo)); //envía a papelera - DeleteFile(archivo); + if FileExists(archivo) then begin + newFile := GetNewFileName(archivo); + CopyFile(archivo, newFile); + end; finally end; if curNod.Parent.Expanded then ExpandirNodArc(curNod.parent, true); //refresca end; -procedure TfrmArcExplor.mnArcRefrescarClick(Sender: TObject); -begin - -end; -{ -procedure TfrmArcExplor.acPArcAbrNueExecute(Sender: TObject); //Abrir en nueva ventana -var nod: TTreeNode; +procedure TfrmArcExplor.mnFilChanNameClick(Sender: TObject); begin - nod := TreeView1.Selected; //lee seleccionado - if nod = nil then exit; //verifica - if not nod.HasChildren then //solo si es archivo - AbrirPreSQL(RutaNod(nod)); //abre en nueva ventana + mnFolChanNameClick(Sender); //funciona comoa archivo end; -procedure TfrmArcExplor.acPArcNueConExecute(Sender: TObject); //Nueva consulta -var nod: TTreeNode; - archivo: string; -begin - nod := TreeView1.Selected; //lee seleccionado - if nod = nil then exit; //verifica - if not nod.HasChildren then exit; //solo permite en carpetas - //crea archivo de consultas - try - archivo := GetNewFileName(RutaNod(nod) + '\consulta.psql'); - If not FileExists(archivo) then - StringToFile('/* Consulta creada ' + DateTimeToStr(Now) + ''#13#10+ - '*/'#13#10+ - 'connect usuario/clave@sid'#13#10+ - 'set line 500'#13#10+ - 'set pagesize 5000'#13#10, - archivo); //crea archivo - finally - end; - if nod.Expanded then ExpandirNodArc(nod, true); //refresca -end; -procedure TfrmArcExplor.acPArcNueEncExecute(Sender: TObject); //Nuevas definiciones -var nod: TTreeNode; - archivo: string; +procedure TfrmArcExplor.mnFilDeleteClick(Sender: TObject); +var + archivo: String; begin - nod := TreeView1.Selected; //lee seleccionado - if nod = nil then exit; //verifica - if not nod.HasChildren then exit; //solo permite en carpetas - //crea archivo de definiciones + curNod := SelectedNode; + if curNod = nil then exit; + if not curNod.IsFile then exit; //no es archivo + //eliminar archivo + if MsgYesNo(TXT_DELFILE, [curNod.Text]) <> 1 then exit; try - archivo := GetNewFileName(RutaNod(nod) + '\definiciones.pdef'); - If not FileExists(archivo) then - StringToFile('/* Archivo de definiciones creado ' + DateTimeToStr(Now) + ''#13#10+ - '*/'#13#10+ - '$DEFINIR def1 COMO cuerpo1 FINDEFINIR'#13#10+ - ''#13#10+ - '$DEFINIR def2 COMO cuerpo2 FINDEFINIR'#13#10, - archivo); //crea archivo + archivo := UTF8ToSys(curNod.Path); + if FileExists(archivo) then +// DeleteToBin(PChar(archivo)); //envía a papelera + DeleteFile(archivo); finally end; - if nod.Expanded then ExpandirNodArc(nod, true); //refresca + if curNod.Parent.Expanded then ExpandirNodArc(curNod.parent, true); //refresca end; -} -procedure TfrmArcExplor.SetLanguage(lang: string); -//Rutina de traducción +procedure TfrmArcExplor.mnFilRefrescarClick(Sender: TObject); begin - case lowerCase(lang) of - 'es': begin - //configura mensajes - dicDel('nombre.txt'); - dicDel('carpeta'); - dicDel(''); - dicDel('Con&traer'); - dicDel('E&xpandir'); - dicDel('No se puede eliminar carpetas.'); - dicDel('¿Eliminar archivo "%s"?'); - //fija texto de controles -// mnCarExpContr.Caption := 'E&xpandir' - mnCarAbrirExpWin.Caption := 'Abrir en Explor. de &Windows'; - mnCarNueArc.Caption := '&Nuevo Archivo'; - mnCarNueCar.Caption := 'Nueva &Carpeta'; - mnCarCamNom.Caption := 'Ca&mbiar Nombre'; - mnCarElimin.Caption := 'El&iminar'; - mnCarRefrescar.Caption := '&Refrescar'; - - mnArcAbrir.Caption := '&Abrir'; - mnArcCamNom.Caption := 'Ca&mbiar Nombre'; - mnArcElimin.Caption := 'El&iminar'; - mnArcRefrescar.Caption:= '&Refrescar'; - end; - 'en': begin - //configura mensajes - dicSet('nombre.txt','file.txt'); - dicSet('carpeta','folder'); - dicSet('',''); - dicSet('Con&traer','C&ollapse'); - dicSet('E&xpandir','E&xpand'); - dicSet('No se puede eliminar carpetas.','Cannot delete folders'); - dicSet('¿Eliminar archivo "%s"?','Delete file "%s"?'); - //fija texto de controles -// mnCarExpContr.Caption := 'E&xpandir' - mnCarAbrirExpWin.Caption := 'Open on &Windows Explorer'; - mnCarNueArc.Caption := '&New File'; - mnCarNueCar.Caption := 'New &Folder'; - mnCarCamNom.Caption := 'Cha&nge Name'; - mnCarElimin.Caption := '&Delete'; - mnCarRefrescar.Caption := '&Refresh'; - mnArcAbrir.Caption := '&Open'; - mnArcCamNom.Caption := 'Cha&nge Name'; - mnArcElimin.Caption := '&Delete'; - mnArcRefrescar.Caption:= '&Refresh'; - - end; - end; end; end. diff --git a/Source/FrameCfgExtTool.lfm b/Source/FrameCfgExtTool.lfm index 895576a7..d0c09920 100644 --- a/Source/FrameCfgExtTool.lfm +++ b/Source/FrameCfgExtTool.lfm @@ -1,9 +1,9 @@ object fraCfgExtTool: TfraCfgExtTool Left = 0 - Height = 315 + Height = 322 Top = 0 Width = 392 - ClientHeight = 315 + ClientHeight = 322 ClientWidth = 392 TabOrder = 0 DesignLeft = 357 @@ -11,7 +11,7 @@ object fraCfgExtTool: TfraCfgExtTool object ListBox1: TListBox Left = 8 Height = 64 - Top = 32 + Top = 16 Width = 88 ItemHeight = 0 OnClick = ListBox1Click @@ -20,7 +20,7 @@ object fraCfgExtTool: TfraCfgExtTool object butAdd: TBitBtn Left = 96 Height = 30 - Top = 32 + Top = 16 Width = 88 Caption = 'Add' Glyph.Data = { @@ -65,7 +65,7 @@ object fraCfgExtTool: TfraCfgExtTool object butRemove: TBitBtn Left = 96 Height = 30 - Top = 64 + Top = 48 Width = 88 Caption = 'Remove' Glyph.Data = { @@ -110,7 +110,7 @@ object fraCfgExtTool: TfraCfgExtTool object Label5: TLabel Left = 8 Height = 15 - Top = 193 + Top = 169 Width = 229 Caption = 'To reference the source file, use $(mainFile)' ParentColor = False @@ -119,7 +119,7 @@ object fraCfgExtTool: TfraCfgExtTool object Label1: TLabel Left = 208 Height = 15 - Top = 74 + Top = 58 Width = 35 Caption = 'Name:' ParentColor = False @@ -127,7 +127,7 @@ object fraCfgExtTool: TfraCfgExtTool object txtName: TEdit Left = 264 Height = 23 - Top = 71 + Top = 55 Width = 96 OnChange = txtNameChange TabOrder = 3 @@ -135,7 +135,7 @@ object fraCfgExtTool: TfraCfgExtTool object txtPath: TFileNameEdit Left = 8 Height = 23 - Top = 128 + Top = 104 Width = 352 FilterIndex = 0 HideDirectories = False @@ -148,15 +148,15 @@ object fraCfgExtTool: TfraCfgExtTool object Label2: TLabel Left = 8 Height = 15 - Top = 112 + Top = 88 Width = 76 Caption = 'Program path:' ParentColor = False end object Label3: TLabel - Left = 8 + Left = 9 Height = 15 - Top = 165 + Top = 144 Width = 85 Caption = 'Command Line:' ParentColor = False @@ -164,7 +164,7 @@ object fraCfgExtTool: TfraCfgExtTool object txtComLine: TEdit Left = 136 Height = 23 - Top = 160 + Top = 136 Width = 224 OnChange = txtComLineChange TabOrder = 5 @@ -172,24 +172,16 @@ object fraCfgExtTool: TfraCfgExtTool object butTest: TButton Left = 285 Height = 25 - Top = 266 + Top = 16 Width = 75 Caption = '&Test' OnClick = butTestClick TabOrder = 6 end - object Label4: TLabel - Left = 8 - Height = 15 - Top = 8 - Width = 32 - Caption = 'Tools:' - ParentColor = False - end object chkWaitExit: TCheckBox - Left = 8 + Left = 9 Height = 19 - Top = 248 + Top = 216 Width = 84 Caption = '&Wait On Exit' OnChange = chkWaitExitChange @@ -198,7 +190,7 @@ object fraCfgExtTool: TfraCfgExtTool object chkShowTBar: TCheckBox Left = 8 Height = 19 - Top = 272 + Top = 288 Width = 106 Caption = '&Show in Toolbar' OnChange = chkShowTBarChange @@ -207,10 +199,54 @@ object fraCfgExtTool: TfraCfgExtTool object Label6: TLabel Left = 8 Height = 15 - Top = 216 + Top = 192 Width = 250 Caption = 'To reference the output *.hex file, use $(hexFile)' ParentColor = False WordWrap = True end + object txtIconPath16: TFileNameEdit + Left = 9 + Height = 23 + Top = 256 + Width = 167 + Filter = 'Png files|*.png' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + TabOrder = 9 + OnChange = txtPathChange + end + object txtIconPath32: TFileNameEdit + Left = 203 + Height = 23 + Top = 256 + Width = 165 + Filter = 'Png files|*.png' + FilterIndex = 0 + HideDirectories = False + ButtonWidth = 23 + NumGlyphs = 1 + MaxLength = 0 + TabOrder = 10 + OnChange = txtPathChange + end + object Label4: TLabel + Left = 8 + Height = 15 + Top = 240 + Width = 55 + Caption = 'Icon 16x16' + ParentColor = False + end + object Label7: TLabel + Left = 203 + Height = 15 + Top = 240 + Width = 55 + Caption = 'Icon 32x32' + ParentColor = False + end end diff --git a/Source/FrameCfgExtTool.pas b/Source/FrameCfgExtTool.pas index cba9b5eb..bff9637d 100644 --- a/Source/FrameCfgExtTool.pas +++ b/Source/FrameCfgExtTool.pas @@ -3,21 +3,26 @@ interface uses Classes, SysUtils, FileUtil, LazUTF8, Forms, Controls, StdCtrls, LCLProc, - Graphics, MisUtils, Types, LCLIntf, Dialogs, Buttons, EditBtn, Globales, - SynFacilBasic, MiConfigXML, process; + Graphics, MisUtils, Types, LCLIntf, Dialogs, Buttons, EditBtn, ActnList, + Globales, SynFacilBasic, MiConfigXML, process; type //Representa una herramienta exterrna { TExternTool } TExternTool = object public - name : string; //Nombre de la herramienta - path : string; //Ruta del ejecutable - ComLine: string; //Línea de comandos + name : string; //Nombre de la herramienta + path : string; //Ruta del ejecutable + ComLine : string; //Línea de comandos WaitOnExit: boolean; //Esperar hasta que termine ShowInTbar: boolean; //Mostrar en barra de herramientas + IconFile16: string; //Archivo que contiene el ícono 16*16 + IconFile32: string; //Archivo que contiene el ícono 32*32 + iconIdx16 : integer; //Índice del ícono + iconIdx32 : integer; //Índice del ícono procedure ReadFromString(const str: string); function ToString: string; + procedure SetAction16(action: TAction); end; { TfraCfgExtTool } @@ -30,6 +35,8 @@ TfraCfgExtTool = class(TFrame) Label3: TLabel; Label4: TLabel; Label6: TLabel; + Label7: TLabel; + txtIconPath32: TFileNameEdit; txtName: TEdit; txtComLine: TEdit; txtPath: TFileNameEdit; @@ -37,6 +44,7 @@ TfraCfgExtTool = class(TFrame) Label2: TLabel; Label5: TLabel; ListBox1: TListBox; + txtIconPath16: TFileNameEdit; procedure butAddClick(Sender: TObject); procedure butRemoveClick(Sender: TObject); procedure butTestClick(Sender: TObject); @@ -55,11 +63,16 @@ TfraCfgExtTool = class(TFrame) procedure ListBoxToControls; public ExternTools: TStringList; //Lista de archivos recientes + TopImages: integer; //Númro de íconos máximo en las listas de íconos + defIconIdx: integer; OnReplaceParams: procedure(var comLine: string) of object; procedure ExecTool(idx: integer); procedure Execute(const tool: TExternTool); public //Inicialización + imgList16, imgList32: TImageList; procedure Init(section: string; cfgFile: TMiConfigXML); + procedure SetImageList(imList16, imList32: TImageList; defIcon: integer); + procedure ReloadIcons; procedure SetLanguage; constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; @@ -67,7 +80,11 @@ TfraCfgExtTool = class(TFrame) implementation {$R *.lfm} +var + ER_FAIL_EXEC_, PRE_TOOL_NAME, ER_ICO_FIL_UNEXIS_, ER_BOTH_ICO_SPEC + : String; {$I ..\language\tra_CfgExtTool.pas} + { TExternTool } procedure TExternTool.ReadFromString(const str: string); var @@ -79,6 +96,10 @@ procedure TExternTool.ReadFromString(const str: string); ComLine := a[3]; WaitOnExit := f2B(a[4]); ShowInTbar := f2B(a[5]); + IconFile16 := a[6]; + IconFile32 := a[7]; + if a[8]='' then iconIdx16 := -1 else iconIdx16 := F2i(a[8]); + if a[9]='' then iconIdx32 := -1 else iconIdx32 := F2i(a[9]); end; function TExternTool.ToString: string; begin @@ -90,12 +111,22 @@ function TExternTool.ToString: string; ComLine + #9 + B2f(WaitOnExit) + #9 + B2f(ShowInTbar) + #9 + - '' + #9 + //Campo de ampliación - '' + #9 + //Campo de ampliación - '' + #9 + //Campo de ampliación - '' + #9 + //Campo de ampliación + IconFile16 + #9 + + IconFile32 + #9 + + i2F(iconIdx16) + #9 + + i2F(iconIdx16) + #9 + + #9 + //Campo de ampliación + #9 + //Campo de ampliación ''; //Campo de ampliación end; +procedure TExternTool.SetAction16(action: TAction); +{Configura un elemento TAction con los datos de la herramienta externa.} +begin + action.Visible := ShowInTbar; + action.Caption:= name; + action.Hint := name; + action.ImageIndex := iconIdx16; +end; {TfraCfgExtTool} procedure TfraCfgExtTool.Execute(const tool: TExternTool); {Ejecutar la herramienta externa indicada. } @@ -140,6 +171,28 @@ procedure TfraCfgExtTool.butTestClick(Sender: TObject); tool: TExternTool; begin if ListBox1.ItemIndex = -1 then exit; + //Verifica si existen los archivos de íconos + if (txtIconPath16.Text<>'') and not FileExists(txtIconPath16.Text) then begin + MsgExc(ER_ICO_FIL_UNEXIS_, [txtIconPath16.Text]); + if txtIconPath16.Visible then txtIconPath16.SetFocus; + exit; + end; + if (txtIconPath32.Text<>'') and not FileExists(txtIconPath32.Text) then begin + MsgExc(ER_ICO_FIL_UNEXIS_, [txtIconPath32.Text]); + if txtIconPath32.Visible then txtIconPath32.SetFocus; + exit; + end; + if (txtIconPath16.Text='') and (txtIconPath32.Text<>'') then begin + MsgExc(ER_BOTH_ICO_SPEC); + if txtIconPath16.Visible then txtIconPath16.SetFocus; + exit; + end; + if (txtIconPath16.Text<>'') and (txtIconPath32.Text='') then begin + MsgExc(ER_BOTH_ICO_SPEC); + if txtIconPath32.Visible then txtIconPath32.SetFocus; + exit; + end; + //Prueba ejecutando la herramienta seleccionada cad := ListBox1.Items[ListBox1.ItemIndex]; tool.ReadFromString(cad); Execute(tool); @@ -149,7 +202,7 @@ procedure TfraCfgExtTool.butAddClick(Sender: TObject); r: TExternTool; begin r.name := PRE_TOOL_NAME + IntToStr(ListBox1.Count+1); - r.path := rutApp; + r.path := patApp; r.ComLine := ''; r.ShowInTbar := false; r.WaitOnExit := false; @@ -162,10 +215,16 @@ procedure TfraCfgExtTool.butRemoveClick(Sender: TObject); end; procedure TfraCfgExtTool.EstadoCampos(estado: boolean); begin - label1.Enabled := estado; - label2.Enabled := estado; - label3.Enabled := estado; - label5.Enabled := estado; + label1.Enabled := estado; + label2.Enabled := estado; + label3.Enabled := estado; + label5.Enabled := estado; + label6.Enabled := estado; + Label4.Enabled := estado; + Label7.Enabled := estado; + txtIconPath16.Enabled := estado; + txtIconPath32.Enabled := estado; + txtName.Enabled := estado; txtPath.Enabled := estado; txtComLine.Enabled := estado; @@ -190,6 +249,8 @@ procedure TfraCfgExtTool.ListBoxToControls; txtComLine.Text := curTool.ComLine; chkWaitExit.Checked := curTool.WaitOnExit; chkShowTBar.Checked := curTool.ShowInTbar; + txtIconPath16.Text := curTool.IconFile16; + txtIconPath32.Text := curTool.IconFile32; debugln('ListBoxToControls'); NoEvents := false; end; @@ -205,6 +266,8 @@ procedure TfraCfgExtTool.ControlsToListBox; curTool.ComLine := txtComLine.Text; curTool.WaitOnExit := chkWaitExit.Checked; curTool.ShowInTbar := chkShowTBar.Checked; + curTool.IconFile16 := txtIconPath16.Text; + curTool.IconFile32 := txtIconPath32.Text; ListBox1.Items[ListBox1.ItemIndex] := curTool.ToString; end; procedure TfraCfgExtTool.ListBox1Click(Sender: TObject); @@ -246,6 +309,66 @@ procedure TfraCfgExtTool.Init(section: string; cfgFile: TMiConfigXML); cfgFile.Asoc_StrList_TListBox(section+ '/extern_tools', @ExternTools, ListBox1); self.OnPaint := @fraCfgExtToolPaint; end; +procedure TfraCfgExtTool.SetImageList(imList16, imList32: TImageList; defIcon: integer); +{Pasa las referencias a los ImageList, para que se puedan configurar los íconos} +begin + imgList16:= imList16; + imgList32:= imList32; + TopImages := imList32.Count; + defIconIdx := defIcon; //Ícono por defecto +end; +procedure TfraCfgExtTool.ReloadIcons; +{Explora las herramientas externas para actualizar los íconos y los índices a los +íconos para que se puedan mostrar correctamente. } +var + lin: String; + extTool: TExternTool; + Picture: TPicture; + SrcBmp: TBitMap; + i: integer; +begin + //Limpia los íconos adicionales + while imgList16.Count>TopImages do begin + imgList16.Delete(imgList16.Count-1); + end; + while imgList32.Count>TopImages do begin + imgList32.Delete(imgList32.Count-1); + end; + for i:=0 to ExternTools.Count-1 do begin + lin := ExternTools[i]; + extTool.ReadFromString(lin); + //Solo carga si existe. No se tratan errores aquí proque esta rutina se hace al inicio. + extTool.iconIdx16 := defIconIdx; + extTool.iconIdx32 := defIconIdx; + if (extTool.IconFile16<>'') and FileExists(extTool.IconFile16) then begin + Picture := TPicture.Create; + SrcBmp := TBitmap.Create; + try + Picture.LoadFromFile(extTool.IconFile16); + SrcBmp.Assign(Picture.Graphic); + imgList16.Add(SrcBmp, nil); + finally + Picture.Free; + SrcBmp.Free; + end; + extTool.iconIdx16 := imgList16.Count-1; + end; + if (extTool.IconFile32<>'') and FileExists(extTool.IconFile32) then begin + Picture := TPicture.Create; + SrcBmp := TBitmap.Create; + try + Picture.LoadFromFile(extTool.IconFile32); + SrcBmp.Assign(Picture.Graphic); + imgList32.Add(SrcBmp, nil); + finally + Picture.Free; + SrcBmp.Free; + end; + extTool.iconIdx32 := imgList32.Count-1; + end; + ExternTools[i] := extTool.ToString; //Actualiza el ítem + end; +end; constructor TfraCfgExtTool.Create(AOwner: TComponent); begin inherited Create(AOwner); diff --git a/Source/FrameEditView.pas b/Source/FrameEditView.pas index 32f88e64..3cae045c 100644 --- a/Source/FrameEditView.pas +++ b/Source/FrameEditView.pas @@ -173,6 +173,7 @@ TfraEditView = class(TFrame) procedure AgregArcReciente(arch: string); public //Inicialización procedure UpdateSynEditConfig; + procedure UpdateSynEditCompletion; procedure InitMenuRecents(menRecents0: TMenuItem; RecentList: TStringList; MaxRecents0: integer = 5); constructor Create(AOwner: TComponent) ; override; @@ -1072,7 +1073,7 @@ procedure TfraEditView.ConfigureSyntax(ed: TSynEditor; Complete: boolean = true) case Upcase(ext) of '.PAS': begin //Es Pascal - synFile := rutSyntax + DirectorySeparator + 'PicPas_PIC16.xml'; + synFile := patSyntax + DirectorySeparator + 'PicPas_PIC16.xml'; if not FileExists(synFile) then begin MsgErr(MSG_NOSYNFIL, [synFile]); exit; @@ -1085,7 +1086,7 @@ procedure TfraEditView.ConfigureSyntax(ed: TSynEditor; Complete: boolean = true) end; '.ASM','.LST': begin //Es Ensamblador - synFile := rutSyntax + DirectorySeparator + 'PicPas_AsmPic.xml'; + synFile := patSyntax + DirectorySeparator + 'PicPas_AsmPic.xml'; if not FileExists(synFile) then begin MsgErr(MSG_NOSYNFIL, [synFile]); exit; @@ -1097,7 +1098,7 @@ procedure TfraEditView.ConfigureSyntax(ed: TSynEditor; Complete: boolean = true) end; '.C': begin //Es C - synFile := rutSyntax + DirectorySeparator + 'PicPas_C.xml'; + synFile := patSyntax + DirectorySeparator + 'PicPas_C.xml'; if not FileExists(synFile) then begin MsgErr(MSG_NOSYNFIL, [synFile]); exit; @@ -1140,7 +1141,7 @@ function TfraEditView.LoadFile(fileName: string): boolean; ed := AddEdit(''); //Dispara OnSelecEditor if Pos(DirectorySeparator, fileName) = 0 then begin //Es ruta relativa, la vuelve abosulta - fileName := rutApp + fileName; + fileName := patApp + fileName; end; ed.LoadFile(fileName); if ed.Error='' then begin @@ -1335,7 +1336,7 @@ procedure TfraEditView.AgregArcReciente(arch: string); RecentFiles.Delete(MaxRecents); end; procedure TfraEditView.UpdateSynEditConfig; -{Indica que se desea cambiar la configuración de los SynEdit.} +{Indica que se desea cambiar la configuración de todos los SynEdit abiertos.} var i: Integer; begin @@ -1345,9 +1346,19 @@ procedure TfraEditView.UpdateSynEditConfig; OnRequireSynEditConfig(editors[i].SynEdit); end; //Actualiza resaltador - ConfigureSyntax(editors[i], false); + ConfigureSyntax(editors[i]); end; end; +procedure TfraEditView.UpdateSynEditCompletion; +var + i: Integer; +begin + //Pide configurar completado para todos los editores abiertos + for i:=0 to editors.Count-1 do begin + if OnRequireSetCompletion<>nil then OnRequireSetCompletion(editors[i]); + end; +end; + //Inicialización procedure TfraEditView.InitMenuRecents(menRecents0: TMenuItem; RecentList: TStringList; MaxRecents0: integer=5); diff --git a/Source/FrameMessagesWin.lfm b/Source/FrameMessagesWin.lfm index 41a63a12..13450923 100644 --- a/Source/FrameMessagesWin.lfm +++ b/Source/FrameMessagesWin.lfm @@ -22,25 +22,25 @@ object fraMessagesWin: TfraMessagesWin OnPaint = panStatisPaint object lblRAM: TLabel Left = 8 - Height = 15 + Height = 17 Top = 8 - Width = 26 + Width = 32 Caption = 'RAM' ParentColor = False end object lblROM: TLabel Left = 48 - Height = 15 + Height = 17 Top = 8 - Width = 27 + Width = 33 Caption = 'ROM' ParentColor = False end object lblSTACK: TLabel Left = 87 - Height = 15 + Height = 17 Top = 8 - Width = 36 + Width = 43 Caption = 'STACK' ParentColor = False end @@ -49,17 +49,17 @@ object fraMessagesWin: TfraMessagesWin Left = 0 Height = 101 Top = 0 - Width = 109 + Width = 117 Align = alLeft BevelOuter = bvNone ClientHeight = 101 - ClientWidth = 109 + ClientWidth = 117 TabOrder = 1 object chkInform: TCheckBox Left = 8 - Height = 19 + Height = 24 Top = 8 - Width = 20 + Width = 24 Checked = True Color = clDefault OnChange = chkInformChange @@ -69,9 +69,9 @@ object fraMessagesWin: TfraMessagesWin end object chkWarns: TCheckBox Left = 8 - Height = 19 + Height = 24 Top = 32 - Width = 20 + Width = 24 Checked = True OnChange = chkWarnsChange State = cbChecked @@ -79,41 +79,41 @@ object fraMessagesWin: TfraMessagesWin end object chkErrors: TCheckBox Left = 8 - Height = 19 + Height = 24 Top = 56 - Width = 20 + Width = 24 Checked = True OnChange = chkErrorsChange State = cbChecked TabOrder = 2 end object lblInform: TLabel - Left = 25 - Height = 15 - Top = 9 - Width = 63 + Left = 30 + Height = 17 + Top = 10 + Width = 81 Caption = '&Information' ParentColor = False end object lblWarns: TLabel - Left = 25 - Height = 15 - Top = 33 - Width = 50 + Left = 30 + Height = 17 + Top = 34 + Width = 63 Caption = '&Warnings' ParentColor = False end object lblErrors: TLabel - Left = 25 - Height = 15 - Top = 57 - Width = 30 + Left = 30 + Height = 17 + Top = 58 + Width = 42 Caption = '&Errors' ParentColor = False end end object Splitter1: TSplitter - Left = 109 + Left = 117 Height = 101 Top = 0 Width = 5 @@ -129,15 +129,15 @@ object fraMessagesWin: TfraMessagesWin object PanGrilla: TPanel AnchorSideLeft.Control = Splitter1 AnchorSideRight.Control = Splitter2 - Left = 114 + Left = 122 Height = 101 Top = 0 - Width = 422 + Width = 414 Align = alClient Anchors = [akLeft, akRight] Caption = '<< No messages >>' ClientHeight = 101 - ClientWidth = 422 + ClientWidth = 414 TabOrder = 4 OnResize = PanGrillaResize object grilla: TStringGrid @@ -150,7 +150,7 @@ object fraMessagesWin: TfraMessagesWin Left = 1 Height = 99 Top = 1 - Width = 420 + Width = 412 Anchors = [akTop, akLeft, akRight, akBottom] Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goSmoothScroll] PopupMenu = PopupMenu1 diff --git a/Source/FrameMessagesWin.pas b/Source/FrameMessagesWin.pas index 082f6594..b8819f68 100644 --- a/Source/FrameMessagesWin.pas +++ b/Source/FrameMessagesWin.pas @@ -4,7 +4,7 @@ interface uses Classes, SysUtils, FileUtil, LazFileUtils, Forms, Controls, Grids, Graphics, - ExtCtrls, StdCtrls, Menus, Clipbrd, Parser, Globales, UtilsGrilla, + ExtCtrls, StdCtrls, Menus, Clipbrd, CompBase, Globales, UtilsGrilla, BasicGrilla, MisUtils, XpresBas; type @@ -49,7 +49,7 @@ TfraMessagesWin = class(TFrame) procedure panStatisDblClick(Sender: TObject); procedure panStatisPaint(Sender: TObject); private - cxp: TCompiler; + cxp: TCompilerBase; FBackColor: TColor; FBackSelColor: Tcolor; FPanelColor: TColor; @@ -80,7 +80,7 @@ TfraMessagesWin = class(TFrame) procedure GetErrorIdx(f: integer; out msg: string; out filname: string; out row, col: integer); function IsErroridx(f: integer): boolean; - procedure InitCompilation(cxp0: TCompiler; InitMsg: boolean); + procedure InitCompilation(cxp0: TCompilerBase; InitMsg: boolean); procedure EndCompilation; procedure AddError(errTxt: string; fileName: string; row, col: integer); procedure AddInformation(infTxt: string); @@ -396,7 +396,8 @@ procedure TfraMessagesWin.FilterGrid; end; grilla.EndUpdate; end; -procedure TfraMessagesWin.InitCompilation(cxp0: TCompiler; InitMsg: boolean); +procedure TfraMessagesWin.InitCompilation(cxp0: TCompilerBase; InitMsg: boolean + ); begin cxp := cxp0; //Guarda referencia grilla.RowCount := 1; //Limpia Grilla @@ -404,7 +405,7 @@ procedure TfraMessagesWin.InitCompilation(cxp0: TCompiler; InitMsg: boolean); cxp.OnError := @AddError; cxp.OnInfo := @AddInformation; timeCnt:=GetTickCount64; - if InitMsg then AddInformation(MSG_INICOMP); + if InitMsg then AddInformation(cxp.CompilerName + ': ' + MSG_INICOMP); HaveErrors := false; //limpia bandera end; procedure TfraMessagesWin.EndCompilation; diff --git a/Source/FramePICDiagram.lfm b/Source/FramePICDiagram.lfm index 4ad0f0f0..0a03e08b 100644 --- a/Source/FramePICDiagram.lfm +++ b/Source/FramePICDiagram.lfm @@ -6,8 +6,8 @@ object fraPICDiagram: TfraPICDiagram ClientHeight = 317 ClientWidth = 378 TabOrder = 0 - DesignLeft = 550 - DesignTop = 250 + DesignLeft = 469 + DesignTop = 254 object PaintBox1: TPaintBox Left = 0 Height = 317 @@ -19,33 +19,76 @@ object fraPICDiagram: TfraPICDiagram Images = frmDebugger.ImageList16 left = 72 top = 128 - object MenuItem1: TMenuItem + object mnReset: TMenuItem Action = frmDebugger.acGenReset end - object MenuItem2: TMenuItem + object mnRun: TMenuItem Action = frmDebugger.acGenRun end - object MenuItem5: TMenuItem + object mnStepOver: TMenuItem Action = frmDebugger.acGenStep end object MenuItem3: TMenuItem Caption = '-' end + object mnConnect: TMenuItem + Action = acGenConnTo + end + object mnAddLogicTog: TMenuItem + Action = acAddLogTog + end + object MenuItem2: TMenuItem + Action = acAddLed + end + object MenuItem1: TMenuItem + Action = acAddConn + end object MenuItem4: TMenuItem - Action = acGenAddLogTog + Action = acAddResis + end + object MenuItem5: TMenuItem + Action = acAdd7SegComC end - object MenuItem6: TMenuItem + object mnDelete: TMenuItem Action = acGenDelObject end + object mnReconn: TMenuItem + Action = acGenReconn + end end object ActionList1: TActionList Images = frmDebugger.ImageList16 left = 168 top = 194 - object acGenAddLogTog: TAction - Category = 'Gen' + object acAddLogTog: TAction + Category = 'Add' Caption = 'Add LogicToggle' - OnExecute = acGenAddLogTogExecute + ImageIndex = 13 + OnExecute = acAddLogTogExecute + end + object acAddConn: TAction + Category = 'Add' + Caption = 'Add Connector' + ImageIndex = 11 + OnExecute = acAddConnExecute + end + object acAddLed: TAction + Category = 'Add' + Caption = 'Add Led' + ImageIndex = 14 + OnExecute = acAddLedExecute + end + object acAddResis: TAction + Category = 'Add' + Caption = 'Add &Resistor' + ImageIndex = 15 + OnExecute = acAddResisExecute + end + object acGenConnTo: TAction + Category = 'Gen' + Caption = 'Connect &to' + ImageIndex = 12 + OnExecute = acGenConnToExecute end object acGenDelObject: TAction Category = 'Gen' @@ -53,5 +96,15 @@ object fraPICDiagram: TfraPICDiagram ImageIndex = 10 OnExecute = acGenDelObjectExecute end + object acAdd7SegComC: TAction + Category = 'Add' + Caption = 'Add 7-Seg Com. Cathode' + OnExecute = acAdd7SegComCExecute + end + object acGenReconn: TAction + Category = 'Gen' + Caption = '&Reconnect' + OnExecute = acGenReconnExecute + end end end diff --git a/Source/FramePICDiagram.pas b/Source/FramePICDiagram.pas index 8f62cab5..a14923e2 100644 --- a/Source/FramePICDiagram.pas +++ b/Source/FramePICDiagram.pas @@ -1,59 +1,221 @@ +{ +Define el frame que implementa la interfaz gráfica donde se muestra el PIC y al que +se le pueden agreagr compoentes electrónicos adicionales como leds, o pantallas LCD. + + Creado por Tito Hinostroza 05/2018. + Modif. por Tito Hinostroza 08/2018. +} unit FramePICDiagram; {$mode objfpc}{$H+} interface uses - Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls, Graphics, Menus, - ActnList, ogMotEdicion, ogMotGraf2D, ogDefObjGraf, Pic16Utils, - MisUtils; - + Classes, SysUtils, FileUtil, fgl, Types, Forms, Controls, ExtCtrls, Graphics, + Menus, ActnList, LCLProc, ogEditionMot, ogMotGraf2D, ogDefObjGraf, PicCore, + CompBase, MisUtils; type + { TPinGraph } + {Objeto que modela a un pin físico de un componente electrónico. + Se penso en usar el mismo tipo TpicCore.pines[] y usar ese arreglo como contenedor + de objetos TPinGraph, pero considerando que los pines están fuertemente asociados a + un punto de conexión, se decidió crearlo como una extensión de TPtoConx, así se + simplifica considerablemente la administración.} + TPinGraph = class(TPtoConx) + private //Parámetros del modelo interno del Pin + {Cuando es un componente común. se leerán estos parámetros, como modelo + del pin.} + vThev: single; + rThev: single; + procedure GetModel(out vThev0, rThev0: Single); //Devuelve parámetros del modelo eléctrico + procedure SetModel(vThev0, rThev0: Single); //Fija parámetros del modelo eléctrico + private //Valores de voltaje e impedancia del nodo al que se encuentra conectado + vNod: single; + rNod: single; + procedure SetNodePars(vNod0, rNod0: Single); //Fija parámetros debido al nodoconectado + private //Campos adicionales cuando es pin de un PIC + {Se necesita una referencia al PIC cuando este pin es parte de un PIC.} + pic : TPicCore; + nPin : integer; //Número de pin (del encapsulado) + private //Propiedades geométricas + x1, y1, x2, y2: Single; //Cordenadas cuando se representa como rectángulo + lbl : string; //Etiqueta + xLbl, yLbl: Single; //Posición de la etiqueta + public + //procedure GetThevNod(out vThev0, rThev0: Single);//Devuelve parámetros del modelo eléctrico + procedure SetLabel(xl, yl: Single; txt: string; align: TAlignment = + taLeftJustify); + constructor Create(mGraf: TMotGraf); //OJO: No es override + end; + TPicPinList = specialize TFPGObjectList; //Lista para gestionar los puntos de control + + { TOgComponent } + {Incluye propiedades de los componentes para este editor gráfico.} + TOgComponent = class(TObjGraf) + private + public + Ref: string; //Nomenclatura única del componente: R1, R2, CI1 + ShowRef: boolean; + xRef, yRef: Single; //Ubicación relativa de la etiqueta Ref +// pins: TPicPinList; //Lista de pines + function AddPtoConex(xOff, yOff: Single): TPinGraph; override; + function AddPin(xCnx, yCnx, x1, y1, x2, y2: Single): TPinGraph; + constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; + end; + + TNode = class; + + { TOgConector } + TOgConector = class(TOgComponent) + private + OnConnect: procedure of object; + OnDisconnect: procedure of object; + nodParent: TNode; + PaintBox : TPaintBox; //Referencia al PaintBox donde se dibuja + ptos: array of TFPoint; + procedure PCtlConnect(pCtl: TPtoCtrl; pCnx: TPtoConx); + procedure PCtlDisconnect(pCtl: TPtoCtrl; pCnx: TPtoConx); + function ConnectedTo(ogCon: TOgConector): boolean; + public + function IsSelectedBy(xr, yr: Integer): Boolean; override; + procedure Draw; override; + constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; + end; + TConnectorList = specialize TFPGObjectList; //Lista para gestionar los puntos de control - { TPicObject } + { TNode } + TNode = class + private + vt, rt: Single; + connectorList: TConnectorList; + pinList : TPicPinList; //Lista de pines conectadas al nodo + procedure UpdateModel; + function Contains(ogCon: TOgConector): boolean; + function ConnectedTo(ogCon: TOgConector): boolean; + procedure AddConnector(ogCon: TOgConector); + public + constructor Create; + destructor Destroy; override; + end; + TNodeList = specialize TFPGObjectList; //Lista de nodos + + { TOgPic } //Define el objeto gráfico PIC - TPicObject = class(TObjGraf) + TOgPic = class(TOgComponent) private - pic: TPIC16; //referencia al PIC + pic: TPicCore; //referencia al PIC xpin: Single; //Posición X del Pin nPinsDiag: Integer; //Número de pines a dibujar - procedure DibState(const xc, yc: Single; const pin: TPICpin); + nPinsSide: Integer; public - procedure DibCuerpo; - procedure Dibujar; override; + procedure SetPic(pic0: TPicCore); + procedure Draw; override; constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; end; + { TOgLogicState } //Define el objeto gráfico LogicState - TOgLogicState = class(TObjGraf) + TOgLogicState = class(TOgComponent) private - pic: TPIC16; //referencia al PIC - FState: boolean; ptos: array of TFPoint; - procedure DibState(const xc, yc: Single; const pin: TPICpin); + pin: TPinGraph; public //procedure SetState(Value: boolean); - procedure Dibujar; override; + procedure Draw; override; constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; + end; + + { TOgLedRed } + //Define el objeto Diodo Led + TOgLedRed = class(TOgComponent) + private + pin: TPinGraph; + public + //procedure SetState(Value: boolean); + procedure Draw; override; + constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; + end; + + { TOg7Segment } + //Define el objeto Display de 7 segmentos + TOg7Segment = class(TOgComponent) + private + pinA: TPinGraph; + pinB: TPinGraph; + pinC: TPinGraph; + pinD: TPinGraph; + pinE: TPinGraph; + pinF: TPinGraph; + pinG: TPinGraph; + public + //procedure SetState(Value: boolean); + procedure Draw; override; + constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; + end; + + { TOgResisten } + //Define el objeto Resistencia (Resistor) + TOgResisten = class(TOgComponent) + private + public + //procedure SetState(Value: boolean); + procedure Draw; override; + constructor Create(mGraf: TMotGraf); override; + destructor Destroy; override; end; { TfraPICDiagram } TfraPICDiagram = class(TFrame) - acGenAddLogTog: TAction; + acAddLogTog: TAction; acGenDelObject: TAction; + acGenConnTo: TAction; + acAddConn: TAction; + acAddLed: TAction; + acAddResis: TAction; + acAdd7SegComC: TAction; + acGenReconn: TAction; ActionList1: TActionList; MenuItem1: TMenuItem; MenuItem2: TMenuItem; - MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; - MenuItem6: TMenuItem; + mnReconn: TMenuItem; + mnConnect: TMenuItem; + mnReset: TMenuItem; + mnRun: TMenuItem; + MenuItem3: TMenuItem; + mnAddLogicTog: TMenuItem; + mnStepOver: TMenuItem; + mnDelete: TMenuItem; PaintBox1: TPaintBox; PopupMenu1: TPopupMenu; - procedure acGenAddLogTogExecute(Sender: TObject); + procedure acAdd7SegComCExecute(Sender: TObject); + procedure acAddConnExecute(Sender: TObject); + procedure acAddLedExecute(Sender: TObject); + procedure acAddLogTogExecute(Sender: TObject); + procedure acAddResisExecute(Sender: TObject); + procedure acGenConnToExecute(Sender: TObject); procedure acGenDelObjectExecute(Sender: TObject); + procedure acGenReconnExecute(Sender: TObject); + private //Nombres y referencias + procedure connectorChange; + function ExistsName(AName: string): boolean; + function UniqueName(NameBase: string): string; + function ExistsRef(ARef: string): TOgComponent; + function UniqueRef(RefBase: string): string; + private //Manejo de nodos + nodeList: TNodeList; + procedure AddConnectorToNodes(ogCon: TOgConector); + procedure UpdateNodeList; private - Fpic: TPIC16; - ogPic: TPicObject; - motEdi: TModEdicion; + Fpic: TPicCore; + ogPic: TOgPic; + motEdi: TEditionMot; + procedure ConnectAction(Sender: TObject); procedure fraPICDiagramKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure motEdi_MouseUpRight(Shift: TShiftState; x, y: integer); @@ -61,10 +223,9 @@ TfraPICDiagram = class(TFrame) Shift: TShiftState; X, Y: Integer); procedure motEdi_MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - procedure SetPic(AValue: TPIC16); public - property pic: TPIC16 read Fpic write SetPic; procedure Refrescar; + procedure SetCompiler(cxp0: TCompilerBase); constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; end; @@ -73,126 +234,542 @@ implementation {$R *.lfm} const SEP_PIN = 20; //Separación entre pines - LON_PIN = 15; //Longitud de pin + LON_PIN = 10; //Longitud de pin + //Colores pro defecto + COL_CI = $404040; //Circuitos Integrados + COL_GND = $404040; //GND + COL_VCC = clRed; //Voltajes VCC + COL_HIM = $A0A0A0; //Alta impedancia + COL_RES = $9FE7F9; //Cuerpo de resistencias +const //ID para componentes + ID_PINGRAF = 1; //Un pin que desciende de un Punto de conexión + ID_COMPON = 10; //Componentes en general + ID_PIC = 11; + ID_CONNEC = 12; + ID_LEDRES = 13; + ID_RESIST = 14; + ID_7SEGME = 15; + ID_TOG_LOG = 16; + +function GetThevCol(vt, rt: Single): TColor; +{Devuelve un color que representa el estado de un circuito de Thevening.} +begin + if rt>1e+6 then begin + //Se considera alta impedancia + exit(COL_HIM); + end else begin + //Tiene potencial + if vt > 2.5 then begin + exit(COL_VCC); + end else begin + exit(COL_GND); + end; + end; +end; +function ResParallel(r1, r2: Single): Single; inline; +begin + if r1+r2=0 then begin + exit(0) + end else begin + exit(r1*r2/(r1+r2)); + end; +end; +{ TNode } +procedure TNode.UpdateModel; +{Devuelve los parámetros de Thevening del nodo. Esto es útil para leer el voltaje del +nodo en cualquier momento, que es parte de un análisis común por nodos.} +var + pin: TPinGraph; + r0 : Single; + v1, r1, v2, r2: Single; + nResistor, nSource: integer; //Contadores y banderas +begin + //Casos especiales + if pinList.Count = 0 then begin + //Nodo sin conexiones + vt := 0; + rt := 1e+9; //Alta impedancia + end else if pinList.Count = 1 then begin + //Conectado a un solo pin + pinList[0].GetModel(vt, rt); //Mismo modelo del nodo + end else begin + //Conectado a varios pines + {Va simplificando por un lado las que son fuentes (en v1, r1) + y por otro las que son solo resistencias (en r0). La idea es que al final + se tenga: + + +--[R1]--- + | + [V1] + | + --- -{ TPicObject } -procedure TPicObject.DibState(const xc, yc: Single; const pin: TPICpin); -{Dibuja un indicador del estado lógico del PIN} -begin - if pin.typ = pptPort then begin - //Ve estado - if pic.ram[pin.add].value and (1<nil then begin + if pCtl.ConnectedTo.Id = ID_PINGRAF then begin + pin := TPinGraph(pCtl.ConnectedTo); + if pinList.IndexOf(pin) = -1 then begin + //No existe el pin, lo agrega + pinList.Add(pin); + end; + end; + end; + end; +begin + connectorList.Add(ogCon); + ogCon.nodParent := self; //Guarda referencia + //También se guardan los pines a los que se encuentra conectado + AddPinOf(ogCon.pcBEGIN); + AddPinOf(ogCon.pcEND); +end; +constructor TNode.Create; +begin + connectorList:= TConnectorList.Create(false); + pinList := TPicPinList.Create(false); +end; +destructor TNode.Destroy; +begin + pinList.Destroy; + connectorList.Destroy; + inherited Destroy; +end; +{ TPinGraph } +procedure TPinGraph.GetModel(out vThev0, rThev0: Single); +{Devuelve el equivalente de Thevening del pin. Equivale a devolver el modelo eléctrico +del pin, cuando está desconectado.} +begin + if pic = nil then begin + //No pertenece a un PIC, lee directamente sus parámetros + vThev0 := vThev; + rThev0 := rThev; + end else begin + //Es pin de un pic + pic.GetPinThev(nPin, vThev0, rThev0); + end; +end; +procedure TPinGraph.SetModel(vThev0, rThev0: Single); +begin + if pic = nil then begin + //No pertenece a un PIC, lee directamente sus parámetros + vThev := vThev0; + rThev := rThev0; + end else begin + //Es pin de un pic. No se puede cambiar + end; +end; +procedure TPinGraph.SetNodePars(vNod0, rNod0: Single); +{Fija los valores de voltaje que debe tener el pin, y la impedancia que debe ver, +por el efecto de estar conectado a algún nodo. +Se supone que ya se ha hecho el cálculo de voltaje/impedancia em el nodo.} +begin + if pic = nil then begin + //No pertenece a un PIC + vNod := vNod0; + rNod := rNod0; + end else begin + //Es parte de un PIC + pic.SetNodePars(nPin, vNod0, rNod0); + end; +end; +procedure TPinGraph.SetLabel(xl, yl: Single; txt: string; + align: TAlignment = taLeftJustify); +begin + lbl := txt; + yLbl := yl; + case align of + taLeftJustify: xLbl := xl; //Justificado a la + taRightJustify: xLbl := xl - v2d.TextWidth(txt); + end +end; +constructor TPinGraph.Create(mGraf: TMotGraf); +begin + inherited Create(mGraf); + {Se usa un ID porque identificar un objeto por ID es más rápido que usar + la comparación con: IS .} + id := ID_PINGRAF; +end; +{ TOgComponent } +function TOgComponent.AddPtoConex(xOff, yOff: Single): TPinGraph; +{Reescribimos nuestra propia función porque no vamos a agregar objetos TPtoConx, +sino objetos TPinGraph.} +begin + Result := TPinGraph.Create(v2d); + ////// Esta sección es similar al del método virtual AddPtoConex ////// + Result.xFac := xOff/Width; + Result.yFac := yOff/Height; + //Actualiza coordenadas absolutas + Result.x := x + xOff; + Result.y := x + yOff; + Result.Parent := self; + PtosConex.Add(Result); +end; +function TOgComponent.AddPin(xCnx, yCnx, //Coord. del punto de conexión + x1, y1, x2, y2: Single): TPinGraph; +var + pin: TPinGraph; +begin + pin := AddPtoConex(xCnx, yCnx); + pin.v2d := self.v2d; + pin.x1 := x1; + pin.y1 := y1; + pin.x2 := x2; + pin.y2 := y2; + pin.nPin := PtosConex.Count; + Result := pin; +end; +constructor TOgComponent.Create(mGraf: TMotGraf); +begin + Id := ID_COMPON; + inherited Create(mGraf); +end; +destructor TOgComponent.Destroy; + begin + inherited Destroy; + end; +{ TOgConector } +procedure TOgConector.PCtlConnect(pCtl: TPtoCtrl; pCnx: TPtoConx); +{Un punto de control se conecta a un punto de conexión } +begin + if OnConnect<>nil then OnConnect(); +end; +procedure TOgConector.PCtlDisconnect(pCtl: TPtoCtrl; pCnx: TPtoConx); +{Un punto de control se desconecta a un punto de conexión } +begin + if OnDisconnect<>nil then OnDisconnect(); +end; +function TOgConector.ConnectedTo(ogCon: TOgConector): boolean; +{Verifica si hay conexión entre este conector y "ogCon"} + function ConnectedSameConexionPoint(p1, p2: TPtoCtrl): boolean; + {Indica si los puntos de control indicados, están conectados al mismo Punto + de Conexión.} + begin + if p1.ConnectedTo = nil then exit(false); //No está conectado a nada + if p2.ConnectedTo = nil then exit(false); //No está conectado a nada + if p1.ConnectedTo = p2.ConnectedTo then exit(true) else exit(false); + end; +begin + if ConnectedSameConexionPoint(pcBEGIN, ogCon.pcBEGIN) then exit(true); + if ConnectedSameConexionPoint(pcBEGIN, ogCon.pcEND) then exit(true); + if ConnectedSameConexionPoint(pcEND, ogCon.pcBEGIN) then exit(true); + if ConnectedSameConexionPoint(pcEND, ogCon.pcEND) then exit(true); + exit(false); +end; +function TOgConector.IsSelectedBy(xr, yr: Integer): Boolean; +var + x0, y0, x1, y1: Integer; +begin + v2d.XYpant(pcBEGIN.x, pcBEGIN.y, x0, y0); + v2d.XYpant(pcEND.x, pcEND.y, x1, y1); + Result := PointSelectSegment(xr, yr, x0, y0, x1, y1 ); +end; +procedure TOgConector.Draw; +const + ANCHO1 = 7; + ANCHO2 = 50; + ALTO1 = 10; + ALTO2 = 30; +var + col: TColor; + pct : TPtoCtrl; + pcn : TPtoConx; + x1, y1: Single; + pMouse: TPoint; +begin + //Descripción + //v2d.SetText(clBlack, 11,'', true); + //v2d.Texto(X + 2, Y -20, 'Conector'); + //Cuerpo + col := GetThevCol(nodParent.vt, nodParent.rt); //Se supone que el nodo padre ya está actualizado + v2d.SetPen(psSolid, 1, col); + v2d.Line(pcBEGIN.x, pcBEGIN.y, pcEND.x, pcEND.y); + //Implementamos nosotros el remarcado y selección, para personalizar mejor + //---------------Draw mark -------------- + if Marked and Highlight then begin + //Resaltado + v2d.SetPen(psSolid, 2, clBlue); //RGB(128, 128, 255) + v2d.Line(pcBEGIN.x, pcBEGIN.y, pcEND.x, pcEND.y); + //Marcador de Voltaje + v2d.SetPen(psSolid, 1, clBlack); //RGB(128, 128, 255) + v2d.SetBrush(clYellow); + pMouse := PaintBox.ScreenToClient(Mouse.CursorPos); + x1 := v2d.Xvirt(pMouse.x, pMouse.y); + y1 := v2d.Yvirt(pMouse.x, pMouse.y); +// v2d.RectangR(x1, y1, x1+10, y1+20); + ptos[0].x := x1; + ptos[0].y := y1; + ptos[1].x := x1+ANCHO1; + ptos[1].y := y1-ALTO1; + ptos[2].x := x1+ANCHO1; + ptos[2].y := y1-ALTO2; + ptos[3].x := x1+ANCHO2; + ptos[3].y := y1-ALTO2; + ptos[4].x := x1+ANCHO2; + ptos[4].y := y1-ALTO1; + ptos[5].x := x1+20; + ptos[5].y := y1-ALTO1; + v2d.Polygon(ptos); + + v2d.SetText(True, False, False); + v2d.SetText(clBlack); + v2d.Texto(x1+ANCHO1+3, y1 - ALTO2+2, Format('%.2fV', [nodParent.vt])); + end; + //--------------- Draw selection state-------------- + if Selected Then begin + if behav = behav1D then begin + for pct in PtosControl1 do pct.Draw; //Dibuja puntos de control + end else if behav = behav2D then begin + for pct in PtosControl2 do pct.Draw; //Dibuja puntos de control + end; + end; + //Draw Connection Points + if ShowPtosConex then begin + for pcn in PtosConex do pcn.Draw; + end; + //if MarkConnectPoints then begin + for pcn in PtosConex do if pcn.Marked then pcn.Mark; + //end +end; +constructor TOgConector.Create(mGraf: TMotGraf); +begin + inherited Create(mGraf); + Id := ID_CONNEC; + setlength(ptos, 6); + pcBEGIN.OnConnect := @PCtlConnect; + pcEND.OnConnect := @PCtlConnect; + pcBEGIN.OnDisconnect := @PCtlDisconnect; + pcEND.OnDisconnect := @PCtlDisconnect; +end; +destructor TOgConector.Destroy; +begin + inherited Destroy; +end; +{ TOgPic } +procedure TOgPic.SetPic(pic0: TPicCore); +{Fija el dispositivo de trabajo y prepara las estructuras que +definen la geometría del componente, de modo que el dibujo sea rápido.} +var + newHeight, i: Integer; + ypin: Single; + pin: TPinGraph; +begin + pic := pic0; //Actualiza referencia + Name := pic0.Model; + //Define geometría del cuerpo del PIC + if pic.Npins <= 6 then begin + nPinsDiag := 6; + end else if pic.Npins <=8 then begin + nPinsDiag := 8; + end else if pic.Npins <=14 then begin + nPinsDiag := 14; + end else if pic.Npins <=18 then begin + nPinsDiag := 18; + end else if pic.Npins <=28 then begin + nPinsDiag := 28; + end else if pic.Npins <=40 then begin + nPinsDiag := 40; + end else begin + //Caso de muchos pines + nPinsDiag := 40; + end; + nPinsSide := nPinsDiag div 2; //Pines pro lado + newHeight := nPinsSide * SEP_PIN; //Altura del chip + //Actualiza tamaño. Se debe hacer antes de calcular las posiciones de los Ptos. de Conexión. + ReSize(Width, newHeight); + {Calcula posiciones relativas de los pines asumiendo un formato de encapsulado DIL. + Se crearán también los puntos de conexión en cada uno de los pines} + PtosConex.Clear; //Se aprovechará para crear puntos de conexión + //Pines de la izquierda + ypin := SEP_PIN/2; //posición inicial + xpin := -LON_PIN+3; + for i:=1 to nPinsSide do begin //Pin - v2d.rectang(xpin, ypin-2, xpin+LON_PIN+1, ypin+2); - //Etiqueta - lbl := pic.pines[i].GetLabel; - v2d.Texto(x+2, ypin-8, lbl); - //Estado de pin - DibState(xpin, ypin, pic.pines[i]); + pin := AddPin(xpin, ypin-1, + xpin, ypin-5, xpin+LON_PIN+1, ypin+5); + pin.SetLabel(5, ypin-8, pic.pines[i].GetLabel); + pin.pic := pic0; //guarda referencia el PIC + //pin.lValue := @; //Calcula siguiente posición ypin := ypin + SEP_PIN; end; - //Dibuja pines de la derecha - ypin := y+SEP_PIN/2; //posición inicial - xpin:=x+width; - for i:=1 to nPinsDiag div 2 do begin + //Pines de la derecha + ypin := SEP_PIN/2 + (nPinsSide-1) * SEP_PIN; //posición inicial + xpin := width-3; + for i:=nPinsSide+1 to nPinsDiag do begin //Pin - v2d.rectang(xpin, ypin-2, xpin+LON_PIN-1, ypin+2); - //Etiqueta - lbl := pic.pines[nPinsDiag-i+1].GetLabel; - lblWidth := v2d.TextWidth(lbl); - v2d.Texto(xpin - lblWidth - 2, ypin-8, lbl); - //Estado de pin - DibState(xpin+LON_PIN, ypin, pic.pines[nPinsDiag-i+1]); + pin := AddPin(xpin+LON_PIN-1, ypin, + xpin, ypin-5, xpin+LON_PIN-1, ypin+5); + pin.SetLabel(xpin-2, ypin-8, pic.pines[i].GetLabel, taRightJustify); + pin.pic := pic0; //guarda referencia el PIC //Calcula siguiente posición - ypin := ypin + SEP_PIN; + ypin := ypin - SEP_PIN; end; + //Actualiza posición. + Relocate(x, y); //Se mantiene la posición, pero se hace para actualizar a los puntos de conexión end; -procedure TPicObject.Dibujar; +procedure TOgPic.Draw; +const + RAD_MARK = 15; //Radio de la marca superior del chip var - ancho: Single; + ancho, rt, vt, xMed: Single; + pin : TPinGraph; + pCnx: TPtoConx; begin if pic= nil then begin - //Cuando no se ha iniciado el PIC - v2d.FijaLapiz(psSolid, 1, clBlack); - v2d.FijaRelleno(clGray); + v2d.SetPen(psSolid, 1, clBlack); + v2d.SetBrush(clGray); v2d.RectangR(x, y, x+Width, y+Height); - end else begin - //Caso normal - ancho := v2d.TextWidth(pic.Model); + end else begin //Caso normal + xMed := x + width/2; + //Dibuja título + ancho := v2d.TextWidth(Name); v2d.SetText(True, False, False); - v2d.Texto(x + width/2 - ancho/2 , y - 18, pic.Model); + v2d.Texto(xMed - ancho/2 , y - 18, Name); + //Dibuja cuerpo v2d.SetText(False, False, False); - if pic.Npins <= 8 then begin - nPinsDiag := 8; - DibCuerpo; - end else if pic.Npins <=18 then begin - nPinsDiag := 18; - DibCuerpo; - end else if pic.Npins <=28 then begin - nPinsDiag := 28; - DibCuerpo; - end else if pic.Npins <=40 then begin - nPinsDiag := 40; - DibCuerpo; - end else begin - //Caso de muchos pines - v2d.FijaLapiz(psSolid, 1, clBlack); - v2d.RectangR(x, y, x+Width, y+Height); + v2d.SetText($D0D0D0); + v2d.SetPen(psSolid, 1, clGray); + v2d.SetBrush(COL_CI); + v2d.RectangR(x, y, x+Width, y+Height); //fondo + v2d.SetBrush($202020); + v2d.RadialPie(xMed-RAD_MARK ,y-RAD_MARK, xMed+RAD_MARK,y+RAD_MARK,2880,2880); + //Dibuja los pines + for pCnx in self.PtosConex do begin + pin := TPinGraph(pCnx); + //En el PIC, los pines se pintan con el color del modelo interno + pin.GetModel(vt, rt); + v2d.SetBrush(GetThevCol(vt,rt)); //Rellena de acuerdo al estado + v2d.rectangR(x+pin.x1, y+pin.y1, x+pin.x2, y+pin.y2); + v2d.Texto(x+pin.xLbl, y+pin.yLbl, pin.lbl); end; end; inherited; end; -constructor TPicObject.Create(mGraf: TMotGraf); +constructor TOgPic.Create(mGraf: TMotGraf); begin inherited Create(mGraf); + ID := ID_PIC; Width := 140; Height := 180; +// pcTOP_CEN.Visible := false; +// pcBOT_CEN.Visible := false; +// pcCEN_LEF.Visible := false; +// pcCEN_RIG.Visible := false; + SizeLocked := true; +// ShowPtosConex:=true; //Muestra los puntos de conexión end; -{ TOgLogicState } -procedure TOgLogicState.DibState(const xc, yc: Single; const pin: TPICpin); -{Dibuja un indicador del estado lógico del PIN} +destructor TOgPic.Destroy; begin - if pin.typ = pptPort then begin - //Ve estado - if pic.ram[pin.add].value and (1<2.5 then begin + v2d.SetBrush(clRed) + end else begin + v2d.SetBrush(clGray); + end; //v2d.RectangR(x, y, x+Width, y+Height); ptos[0].x := x; ptos[0].y := y; @@ -210,70 +787,557 @@ procedure TOgLogicState.Dibujar; constructor TOgLogicState.Create(mGraf: TMotGraf); begin inherited Create(mGraf); + id := ID_TOG_LOG; setlength(ptos, 5); Width := 30; Height := 20; - pc_SUP_CEN.Visible := false; - pc_INF_CEN.Visible := false; - pc_CEN_IZQ.Visible := false; - pc_CEN_DER.Visible := false; + pcTOP_CEN.Visible := false; + pcBOT_CEN.Visible := false; + pcCEN_LEF.Visible := false; + pcCEN_RIG.Visible := false; + SizeLocked := true; + pin := AddPin(30, 10, 0, 0, 0, 0); + pin.rThev := 0; + pin.vThev := 5; //voltios + //ShowPtosConex:=true; +end; +destructor TOgLogicState.Destroy; +begin + inherited Destroy; +end; +{ TOgLedRed } +procedure TOgLedRed.Draw; +var + ancho, x2, y2, yled: Single; +begin + x2:=x+width; + yled := y + 40; + y2:=y+height; + //Dibuja título + ancho := v2d.TextWidth(Name); + v2d.SetText(COL_GND); + v2d.SetText(True, False, False); + v2d.Texto(x + width/2 - ancho/2 , y - 18, Name); + //Verifica valor lógico + + //FState + //Dibuja cuerpo + v2d.SetPen(psSolid, 2, COL_GND); + //Línea vertioal y conexión a tierra + v2d.Line(x+12, y, x+12, y2); + v2d.Line(x+5, y2, x+19, y2); + //Resistencia + v2d.SetPen(psSolid, 1, COL_GND); + v2d.SetBrush(COL_RES); + v2d.RectangR(x+5, y+10, x2-5, y+35); + //Símbolo circular + if pin.vNod>2 then v2d.SetBrush(clRed) + else v2d.SetBrush(clGray); + v2d.Ellipse(x, yled, x+width, yled+24); + v2d.Ellipse(x+3, yled+3, x+width-3, yled+24-3); + inherited; +end; +constructor TOgLedRed.Create(mGraf: TMotGraf); +begin + inherited Create(mGraf); + id := ID_LEDRES; + Width := 24; + Height := 70; + pcTOP_CEN.Visible := false; + pcBOT_CEN.Visible := false; + pcCEN_LEF.Visible := false; + pcCEN_RIG.Visible := false; + SizeLocked := true; + pin := AddPin(12, 0, 0, 0, 0, 0); + pin.SetModel(0, 470); //0V, 470ohms. Por ahora se modela así + pin.lbl := 'VLed'; + //ShowPtosConex:=true; +end; +destructor TOgLedRed.Destroy; +begin + inherited Destroy; +end; +{ TOg7Segment } +procedure TOg7Segment.Draw; +var + ancho, x2, y2, x1, y1, y3: Single; + pCnx: TPtoConx; + pin: TPinGraph; +begin + //Dibuja título + ancho := v2d.TextWidth(Name); + v2d.SetText(COL_GND); + v2d.SetText(True, False, False); + v2d.Texto(x + width/2 - ancho/2 , y - 18, Name); + //Dibuja cuerpo + v2d.SetPen(psSolid, 2, COL_GND); + v2d.SetBrush(COL_HIM); + v2d.RectangR(x, y, x+Width, y+Height); + //Segmentos + x1 := x +10; + x2 := x+width-10; + y1 := y + 10; + y2 := y + 50; + y3 := y + 90; + //Segment A + if pinA.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x1, y1-3, x2, y1+3); + //Segment B + if pinB.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x2-3, y1+3, x2+3, y2-3); + //Segment C + if pinC.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x2-3, y2+3, x2+3, y3-3); + //Segment D + if pinD.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x1, y3-3, x2, y3+3); + //Segment E + if pinE.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x1-3, y2+3, x1+3, y3-3); + //Segment F + if pinF.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x1-3, y1+3, x1+3, y2-3); + //Segment G + if pinG.vNod>2 then begin + v2d.SetPen(psSolid, 1, clRed); v2d.SetBrush(clRed); + end else begin + v2d.SetPen(psSolid, 1, $808080); v2d.SetBrush($808080); + end; + v2d.RectangR(x1, y2-3, x2, y2+3); + + //conexión a tierra + v2d.SetPen(psSolid, 1, COL_GND); + y2 := y + height + 10; + v2d.Line(x+30, y+height, x+30, y2); + v2d.Line(x+24, y2, x+36, y2); + //Dibuja los pines + v2d.SetPen(psSolid, 1, COL_GND); + for pCnx in PtosConex do begin + pin := TPinGraph(pCnx); + //En el PIC, los pines se pintan con el color del modelo interno + v2d.SetBrush(clWhite); //Rellena de acuerdo al estado + v2d.Line(pin.x, pin.y, pin.x+7, pin.y); + v2d.Texto(x+pin.xLbl, y+pin.yLbl, pin.lbl); + end; + inherited; +end; +constructor TOg7Segment.Create(mGraf: TMotGraf); +begin + inherited Create(mGraf); + id := ID_7SEGME; + Width := 60; + Height := 100; + pcTOP_CEN.Visible := false; + pcBOT_CEN.Visible := false; + pcCEN_LEF.Visible := false; + pcCEN_RIG.Visible := false; + SizeLocked := true; + pinA := AddPin(-7, 5, 0, 0, 0, 0); + pinA.SetModel(0, 680); + pinA.lbl := 'A'; + pinB := AddPin(-7,20, 0, 0, 0, 0); + pinB.SetModel(0, 680); + pinB.lbl := 'B'; + pinC := AddPin(-7,35, 0, 0, 0, 0); + pinC.SetModel(0, 680); + pinC.lbl := 'C'; + pinD := AddPin(-7,50, 0, 0, 0, 0); + pinD.SetModel(0, 680); + pinD.lbl := 'D'; + pinE := AddPin(-7,65, 0, 0, 0, 0); + pinE.SetModel(0, 680); + pinE.lbl := 'E'; + pinF := AddPin(-7,80, 0, 0, 0, 0); + pinF.SetModel(0, 680); + pinF.lbl := 'F'; + pinG := AddPin(-7,95, 0, 0, 0, 0); + pinG.SetModel(0, 680); + pinG.lbl := 'G'; + //ShowPtosConex:=true; +end; +destructor TOg7Segment.Destroy; +begin + inherited Destroy; +end; +{ TOgResisten } +procedure TOgResisten.Draw; +var + ancho, x2, y2: Single; +begin + x2:=x+width; + y2:=y+height; + //Dibuja título + ancho := v2d.TextWidth(Name); + v2d.SetText(COL_GND); + v2d.SetText(True, False, False); + v2d.Texto(x + width/2 - ancho/2 , y - 18, Name); + //Verifica valor lógico + + //Línea vertioal y conexión a tierra + v2d.SetPen(psSolid, 2, COL_GND); + v2d.Line(x+12, y, x+12, y2); + v2d.Line(x+5, y2, x+19, y2); + //Resistencia + v2d.SetPen(psSolid, 1, COL_GND); + v2d.SetBrush(COL_RES); + v2d.RectangR(x+5, y+20, x2-5, y+50); + inherited; +end; +constructor TOgResisten.Create(mGraf: TMotGraf); +var + pin: TPinGraph; +begin + inherited Create(mGraf); + id := ID_RESIST; + Width := 24; + Height := 70; + pcTOP_CEN.Visible := false; + pcBOT_CEN.Visible := false; + pcCEN_LEF.Visible := false; + pcCEN_RIG.Visible := false; SizeLocked := true; + pin := AddPin(12, 0, 0, 0, 0, 0); + pin.rThev := 1000; + pin.vThev := 0; + //ShowPtosConex:=true; +end; +destructor TOgResisten.Destroy; +begin + inherited Destroy; end; { TfraPICDiagram } procedure TfraPICDiagram.Refrescar; +var + nod: TNode; begin - motEdi.Refrescar; + {Aqui debería hacerse la actualización del PIC, y de los otros elementos que se mueven + con reloj.} + //pic.ExecNCycle() + {Actualiza el estado de los Nodos porqu se supone que los voltajes o resisetncias de + los componentes pueden haber cambiado (Como los pines de salida del PIC).} + if nodeList <> nil then begin + for nod in nodeList do begin + nod.UpdateModel; + end; + end; //Protección + motEdi.Refresh; +end; +procedure TfraPICDiagram.SetCompiler(cxp0: TCompilerBase); +begin + Fpic := cxp0.picCore; + //Inicia dispositivo + ogPic.SetPic(cxp0.picCore); + //Al fijar el PIC, se elimina y crea un nuevo PIC,por ello hay que llamar a UpdateNodeList(). + UpdateNodeList; end; procedure TfraPICDiagram.fraPICDiagramKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin MsgBox('fraPICDiagramKeyDown'); end; +procedure TfraPICDiagram.ConnectAction(Sender: TObject); +var + mnItem: TMenuItem; + oc: TOgConector; + a: TStringDynArray; + comp1, comp2: TOgComponent; + nPin1, nPin2: LongInt; + pCnx1, pCnx2: TPtoConx; + pin1 , pin2: TPinGraph; + id1, id2: String; +begin + if Sender is TMenuItem then begin + mnItem := TMenuItem(Sender); + //Agrega conector + acAddConnExecute(self); + oc := TOgConector(motEdi.Selected); + //Ubica nodo Inicial +// MsgBox(mnItem.Hint); + a := Explode('-', mnItem.Hint); + id1 := a[0]; + id2 := a[1]; + a := Explode('.', id1); + comp1 := ExistsRef(a[0]); + nPin1 := StrToInt(a[1]); + pCnx1 := comp1.PtosConex[nPin1-1]; + if not(pCnx1 is TPinGraph) then exit; + pin1 := TPinGraph(pCnx1); + //Ubica nodo final + a := Explode('.', id2); + comp2 := ExistsRef(a[0]); + nPin2 := StrToInt(a[1]); + pCnx2 := comp2.PtosConex[nPin2-1]; + if not(pCnx2 is TPinGraph) then exit; + pin2 := TPinGraph(pCnx2); + //Ahora se conecta el conector a los Punttos de Conexión + pin1.ConnectTo(oc.pcBEGIN); + pin1.Locate(pin1.x, pin1.y); //Actualiza el "enganche" + pin2.ConnectTo(oc.pcEND); + pin2.Locate(pin2.x, pin2.y); //Actualiza el "enganche" + //oc.Selec; //Selecciona el conector + Refrescar; + end; +end; +//Manejo de nodos +procedure TfraPICDiagram.AddConnectorToNodes(ogCon: TOgConector); +{Agrega un conector al nodo que corresponda (al que contiene conectores que están +unidos eléctricamente a "conn"), o crea un nuevo nodo.} +var + nod, newNode: TNode; +begin + for nod in nodeList do begin + if nod.Contains(ogCon) then begin + //Ya lo contiene en su lista. No hay nada que hacer. + exit; + end else if nod.ConnectedTo(ogCon) then begin + //Está eléctricamente conectado, pero no está en la lista + nod.AddConnector(ogCon); //Lo agrega + exit; + end; + end; + //No pertenece a ningún nodo existente. + newNode := TNode.Create; //Se crea con sus listas de conectores y pines vacías + newNode.AddConnector(ogCon); + nodeList.Add(newNode); +end; +procedure TfraPICDiagram.UpdateNodeList; +{Actualiza la lista de nodos a partir de los conectores existentes. Esta tarea +es importante para realizar el análisis correcto del voltaje e impedancia del nodo. +Como esta tarea puede ser algo pesada, por optimización se debe realizar solo cuando +se pueda producir cambios en los nodos (creación, eliminación, conexión y desconexión)} +var + og: TObjGraf; + ogCon: TOgConector; +begin + nodeList.Clear; + //Explora objetos gráfiocs + for og in motEdi.objetos do begin + if og is TOgConector then begin + ogCon := TOgConector(og); + AddConnectorToNodes(ogCon); + end; + end; +//debugln('Lista de Nodos:'); +//for nod in nodeList do begin +// debugln(' Nodo con '+IntToStr(nod.connectorList.Count)+' conectores.'); +//end; +end; +function TfraPICDiagram.ExistsName(AName: string): boolean; +{Indica si existe algún componente con el nombre AName} +var + og: TObjGraf; +begin + for og in motEdi.objetos do begin + if og.Name = AName then exit(true); + end; + exit(false); +end; +function TfraPICDiagram.UniqueName(NameBase: string): string; +{Obtiene un nombre único tomando como base la cadena "NameBase", de modo que si +en "NameBase" se indica "Nombre", se generará los nombres Nombre1, Nombre2, ... } +var + n: Integer; +begin + n := 1; //Empieza con este valor + Result := NameBase + IntToStr(n); //Nombre tentativo + While ExistsName(Result) do begin + Inc(n); + Result := NameBase + IntToStr(n); + end; +end; +function TfraPICDiagram.ExistsRef(ARef: string): TOgComponent; +{Indica si existe algún componente con la referencia Aref. Si no existe devuelve NIL.} +var + og: TObjGraf; +begin + for og in motEdi.objetos do begin + if not(og is TOgComponent) then continue; + if TOgComponent(og).Ref = ARef then exit(TOgComponent(og)); + end; + exit(Nil); +end; +function TfraPICDiagram.UniqueRef(RefBase: string): string; +{Obtiene una referencia única tomando como base la cadena "RefBase", de modo que si +en "RefBase" se indica "R", se generará los nombres R1, R2, R3, ... } +var + n: Integer; +begin + n := 1; //Empieza con este valor + Result := RefBase + IntToStr(n); //Nombre tentativo + While ExistsRef(Result)<>nil do begin + Inc(n); + Result := RefBase + IntToStr(n); + end; +end; procedure TfraPICDiagram.motEdi_MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var LogInp: TOgLogicState; + //pCnx: TPtoConx; + //oc: TOgConector; + //xv, yv: Single; begin - if motEdi.seleccion.Count <> 1 then exit; //Hay más de uno - if motEdi.Seleccionado.LoSelecciona(X,Y) then begin - //Click sobre un objeto seleccionado - if motEdi.Seleccionado is TOgLogicState then begin - LogInp := TOgLogicState(motEdi.Seleccionado); - LogInp.FState := true; - Refrescar; - //MsgBox('TOggle'); + if motEdi.seleccion.Count = 1 then begin + //Hay uno seleccionado + if motEdi.Selected.IsSelectedBy(X,Y) then begin + //Click sobre un objeto seleccionado + if motEdi.Selected is TOgLogicState then begin + LogInp := TOgLogicState(motEdi.Selected); + LogInp.pin.vThev := 5; + Refrescar; + //MsgBox('TOggle'); + end; end; end; + //Verifica si se inicia la conexión de un pin +// if Button = mbLeft then begin +// pCnx := motEdi.ConnectionPointMarked; +// if pCnx <> nil then begin +// //Se soltó en con un punto de conexión marcado +// oc := TOgConector.Create(motEdi.v2d); //Crea objeto +// oc.behav := behav1D; //De tipo conector +// motEdi.AddGraphObject(oc); //Lo agrega al editor +// //Ahora se conecta un nodo (Punto de control) al Pto. de Conexión +// pCnx.ConnectTo(oc.pcBEGIN); +// pCnx.Locate(pCnx.x, pCnx.y); //Actualiza el "enganche" +// oc.Selec; //Selecciona el conector +// motEdi.v2d.XYvirt(X, Y, xv, yv); //Obtiene coordenadas del mouse +// //oc.pcEND.Locate(xv+50, yv+50); //Posiciona Punto final del conector +// oc.pcEND.OnChangePosition(oc.pcEND, 0, 0, xv+20, yv+20); +// //oc.ReSize(oc.Width, oc.Height); +// motEdi.CapturoEvento := oc; //Indica al motor de edición que el conector se está dimensionando +// motEdi.EstPuntero := EP_DIMEN_OBJ; //Pone editor en modo "Dimensionando" +// motEdi.Refrescar; //Actualiza pantalla +// end; +// end; end; procedure TfraPICDiagram.motEdi_MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var LogInp: TOgLogicState; begin - if motEdi.seleccion.Count <> 1 then exit; //Hay más de uno - if motEdi.Seleccionado.LoSelecciona(X,Y) then begin - if motEdi.Seleccionado is TOgLogicState then begin - LogInp := TOgLogicState(motEdi.Seleccionado); - LogInp.FState := false; - //MsgBox('Up'); + if motEdi.seleccion.Count = 1 then begin + //Hay un componente seleccionado + if motEdi.Selected.IsSelectedBy(X,Y) then begin + if motEdi.Selected is TOgLogicState then begin + LogInp := TOgLogicState(motEdi.Selected); + LogInp.pin.vThev := 0; + end; end; end; end; procedure TfraPICDiagram.motEdi_MouseUpRight(Shift: TShiftState; x, y: integer); + procedure VisibActionsAdd(State: boolean); + begin + acAddLogTog.Visible := State; + acAddLed.Visible := State; + acAddConn.Visible := State; + acAddResis.Visible := State; + acAdd7SegComC.Visible := State; + end; +var + og: TObjGraf; + it, it2: TMenuItem; + pin2, pin1: TPinGraph; + comp1, comp2: TOgComponent; + pCnx, pCnx2: TPtoConx; begin //Verifica el estado para activar acciones acGenDelObject.Visible := motEdi.seleccion.Count>0; + if motEdi.seleccion.Count = 0 then begin + //Ninguno seleccionado + mnReset.Visible := true; + mnRun.Visible := true; + mnStepOver.Visible:= false; + //mnAddLogicTog.Visible := true; + VisibActionsAdd(true); + end else if (motEdi.seleccion.Count = 1) and (motEdi.Selected is TOgComponent) then begin + //Hay un componente seleccionado + comp1 := TOgComponent(motEdi.Selected); //Componente fuente + mnReset.Visible := true; + mnRun.Visible := true; + mnStepOver.Visible:= true; + //mnAddLogicTog.Visible := false; + VisibActionsAdd(false); + end else begin + //Se ha seleccionado otra cosa o hay varios seleccionados + mnReset.Visible := false; + mnRun.Visible := false; + mnStepOver.Visible:= false; + //mnAddLogicTog.Visible := false; + VisibActionsAdd(false); + end; + //Verifica la funcionalidad del menú de "Conectar a" + //Verifica si se está marcado un punto de Conexión + pCnx := motEdi.ConnectionPointMarked; + if pCnx = nil then begin + mnConnect.Visible := false; + end else begin + mnConnect.Visible := true; + //mnAddLogicTog.Visible := false; //Para que no confunda + VisibActionsAdd(false); + //Ubica componente de origen + if not(pCnx.Parent is TOgComponent) then exit; + comp1 := TOgComponent(pCnx.Parent); + pin1 := TPinGraph(pCnx); //El Pto. de Conex. debe ser un pin + if (comp1 = nil) or (pin1=nil) then exit; //Protección + mnConnect.Caption := Format('Connect %s to', [pin1.lbl]); + //Actualiza menú de Conexión, con objetos gráficos + mnConnect.Clear; + for og in motEdi.objetos do begin + if not(og is TOgComponent) then continue; + if og is TOgConector then continue;; + it := AddItemToMenu(mnConnect, og.Name, nil); + comp2 := TOgComponent(og); + for pCnx2 in comp2.PtosConex do begin + pin2 := TPinGraph(pCnx2); + if pin2.lbl = 'NC' then continue; //No conectado + if pin2 = nil then continue; + it2 := AddItemToMenu(it, pin2.lbl, @ConnectAction); + it2.Hint := comp1.Ref + '.' + IntToStr(pin1.nPin)+'-'+ + comp2.Ref + '.' + IntToStr(pin2.nPin); + end; + end; + end; + //Muestra PopupMenu1.PopUp; end; constructor TfraPICDiagram.Create(AOwner: TComponent); begin inherited Create(AOwner); //crea motor de edición - motEdi := TModEdicion.Create(PaintBox1); + motEdi := TEditionMot.Create(PaintBox1); + nodeList := TNodeList.Create(true); //agrega objeto - ogPic := TPicObject.Create(motEdi.v2d); + ogPic := TOgPic.Create(motEdi.v2d); + ogPic.Ref := 'CI1'; ogPic.Highlight := false; - motEdi.AgregarObjGrafico(ogPic); + + motEdi.AddGraphObject(ogPic); OnKeyDown := @fraPICDiagramKeyDown; motEdi.OnMouseDownLeft := @motEdi_MouseDown; motEdi.OnMouseUp := @motEdi_MouseUp; @@ -281,26 +1345,94 @@ constructor TfraPICDiagram.Create(AOwner: TComponent); end; destructor TfraPICDiagram.Destroy; begin + nodeList.Destroy; + {Marca "nodeList" en NIL porque cuando se destruye "motEdi", si es que hay connectores, + unidos a algún componente, estos intentarán llamar a "UpdateNodeList", cuando se + desconecten, al momento de destruirse, y "UpdateNodeList" intentaría acceder a "nodeList"} + nodeList := nil; motEdi.Destroy; inherited Destroy; end; -procedure TfraPICDiagram.SetPic(AValue: TPIC16); +procedure TfraPICDiagram.connectorChange; begin - Fpic := AValue; - ogPic.pic := pic; //Actualiza referencia + if nodeList = nil then exit; //Protección + UpdateNodeList; end; /////////////////////// Acciones ///////////////////////// -procedure TfraPICDiagram.acGenAddLogTogExecute(Sender: TObject); +procedure TfraPICDiagram.acGenConnToExecute(Sender: TObject); +{Connecta el Pin de un objeto a otro. +No se implementa aquí porque se implementa de forma dinámica.} +begin +end; +procedure TfraPICDiagram.acAddLogTogExecute(Sender: TObject); {Agrega un Objeto Gráfico LogicToggle} var logTog: TOgLogicState; begin logTog := TOgLogicState.Create(motEdi.v2d); logTog.Highlight := false; - motEdi.AgregarObjGrafico(logTog); + logTog.Name := UniqueName('Logic'); + logTog.Ref := UniqueRef('LG'); //Genera nombe único + motEdi.AddGraphObject(logTog); logTog.Selec; Refrescar; end; +procedure TfraPICDiagram.acAddResisExecute(Sender: TObject); +{Agrega un Objeto Gráfico Resistencia} +var + res: TOgResisten; +begin + res := TOgResisten.Create(motEdi.v2d); + res.Highlight := false; + res.Name := UniqueName('R'); + res.Ref := UniqueRef('R'); //Genera nombe único + motEdi.AddGraphObject(res); + res.Selec; + Refrescar; +end; +procedure TfraPICDiagram.acAddLedExecute(Sender: TObject); +{Agrega un Objeto Gráfico Led} +var + led: TOgLedRed; +begin + led := TOgLedRed.Create(motEdi.v2d); + led.Highlight := false; + led.Name := UniqueName('Led'); + led.Ref := UniqueRef('D'); //Genera nombe único + motEdi.AddGraphObject(led); + led.Selec; + Refrescar; +end; +procedure TfraPICDiagram.acAddConnExecute(Sender: TObject); +var + conn: TOgConector; +begin + conn := TOgConector.Create(motEdi.v2d); + conn.behav := behav1D; //De tipo conector + //conn.Highlight := false; + conn.Name := UniqueName('Connector'); + conn.Ref := UniqueRef('CN'); //Genera nombe único + conn.OnConnect := @connectorChange; + conn.OnDisconnect := @connectorChange; + conn.PaintBox := PaintBox1; //Necesita esta referencia + motEdi.AddGraphObject(conn); + conn.Selec; + UpdateNodeList; + Refrescar; +end; +procedure TfraPICDiagram.acAdd7SegComCExecute(Sender: TObject); +{Agrega un Objeto "Display" de 7 segmentos} +var + led: TOg7Segment; +begin + led := TOg7Segment.Create(motEdi.v2d); + led.Highlight := false; + led.Name := UniqueName('V7S'); + led.Ref := UniqueRef('V7S'); //Genera nombe único + motEdi.AddGraphObject(led); + led.Selec; + Refrescar; +end; procedure TfraPICDiagram.acGenDelObjectExecute(Sender: TObject); {Elimina un Objeto Gráfico.} begin @@ -308,7 +1440,36 @@ procedure TfraPICDiagram.acGenDelObjectExecute(Sender: TObject); MsgExc('Cannot delete PIC device.'); ogPic.Deselec; end; - motEdi.ElimSeleccion; + //Elimina elementos seleccionados + motEdi.DeleteSelected; + UpdateNodeList; +end; +procedure TfraPICDiagram.acGenReconnExecute(Sender: TObject); +{Reconecta componentes del diagrama, de acuerdo a las coordenadas de los conectores.} +var + og: TObjGraf; + ogCon: TOgConector; + xp, yp: Integer; + selPntCnx: TPtoConx; +begin + nodeList.Clear; + //Explora objetos gráfiocs + for og in motEdi.objetos do begin + if og is TOgConector then begin + ogCon := TOgConector(og); + if ogCon.pcBEGIN.ConnectedTo = nil then begin + motEdi.v2d.XYpant(ogCon.pcBEGIN.x, ogCon.pcBEGIN.y, xp, yp); + selPntCnx := motEdi.SelectPointOfConexion(xp, yp, 2); + if selPntCnx <> nil then selPntCnx.ConnectTo(ogCon.pcBEGIN); + end; + if ogCon.pcEND.ConnectedTo = nil then begin + motEdi.v2d.XYpant(ogCon.pcEND.x, ogCon.pcEND.y, xp, yp); + selPntCnx := motEdi.SelectPointOfConexion(xp, yp, 2); + if selPntCnx <> nil then selPntCnx.ConnectTo(ogCon.pcEND); + end; + end; + end; + UpdateNodeList; end; end. diff --git a/Source/FramePicAsm.lfm b/Source/FramePicAsm.lfm new file mode 100644 index 00000000..6480563d --- /dev/null +++ b/Source/FramePicAsm.lfm @@ -0,0 +1,466 @@ +object fraPicAsm: TfraPicAsm + Left = 0 + Height = 415 + Top = 0 + Width = 261 + ClientHeight = 415 + ClientWidth = 261 + TabOrder = 0 + DesignLeft = 301 + DesignTop = 126 + object StringGrid1: TStringGrid + Left = 0 + Height = 395 + Top = 20 + Width = 261 + Align = alClient + ColCount = 3 + FixedRows = 0 + Font.CharSet = ANSI_CHARSET + Font.Height = -12 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqDraft + Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goColSizing, goRowSelect, goSmoothScroll] + ParentFont = False + RowCount = 10 + TabOrder = 0 + TitleFont.CharSet = ANSI_CHARSET + TitleFont.Height = -12 + TitleFont.Name = 'Courier New' + TitleFont.Pitch = fpFixed + TitleFont.Quality = fqDraft + OnDblClick = StringGrid1DblClick + OnMouseUp = StringGrid1MouseUp + ColWidths = ( + 43 + 172 + 138 + ) + Cells = ( + 1 + 1 + 0 + ' ' + ) + end + object panTitle: TPanel + Left = 0 + Height = 20 + Top = 0 + Width = 261 + Align = alTop + ClientHeight = 20 + ClientWidth = 261 + TabOrder = 1 + object Label2: TLabel + Left = 1 + Height = 18 + Top = 1 + Width = 239 + Align = alClient + AutoSize = False + Caption = 'Assembler Code' + Color = clActiveCaption + ParentColor = False + Transparent = False + end + object SpeedButton1: TSpeedButton + Left = 240 + Height = 18 + Top = 1 + Width = 20 + Align = alRight + Caption = 'X' + end + end + object ImageList16: TImageList + left = 128 + top = 264 + Bitmap = { + 4C690B0000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0054AB200742A209413FA0056B40A1057141A106534AA61317FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0051A91B073FA0 + 047B3D9F01EB3C9F00FF3C9F00FF3C9F00FF3C9F00FF3C9F00FB3EA003AB45A3 + 0C21FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0046A30D133D9F02C73C9F + 00FF3C9F00FF3D9F01E73EA003B33EA003AB3EA002D13C9F00FF3C9F00FF3C9F + 01EF42A20843FFFFFF00FFFFFF00FFFFFF0057AC24053EA002C33C9F00FF3C9F + 01ED40A1065D5FB02E05FFFFFF00FFFFFF00FFFFFF0044A30B2F3D9F02C53C9F + 00FF3C9F00F343A20A2BFFFFFF00FFFFFF0040A0056F3C9F00FF3C9F01EF43A2 + 092DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0050A91B093EA0 + 02BD3C9F00FF3EA002C3FFFFFF0080C059033D9F02E13C9F00FF40A10569FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0046A4 + 0D1D3C9F00F73C9F00FF44A20A3745A30C2B3C9F00FF3C9F01F553AA1E0BFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF003EA003AB3C9F00FF3FA0047D43A209453EA002E340A106BBFFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0040A0057D3C9F00FF3EA0039FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF003FA0047D3C9F00FF3EA0039F45A30C253EA003A33EA003A93EA003B33EA0 + 02BB3FA005AF4FA81A15FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF003EA003AF3C9F00FF3FA0047B42A207473C9F00FF3C9F00FF3C9F00FF3D9F + 01E743A2092BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045A3 + 0D213C9F00F93C9F00FF45A30C3141A107553C9F00FF3C9F00FF3C9F00FF43A2 + 094FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004DA7160B3D9F + 02C33C9F00FF3EA003BDFFFFFF0040A105633C9F00FF3C9F00FF3C9F00FF3C9F + 01EB41A1065B60B02F05FFFFFF00FFFFFF00FFFFFF0044A30A373D9F02CD3C9F + 00FF3C9F01EF44A30A27FFFFFF003FA005733D9F01DD45A30B353D9F02C93C9F + 00FF3C9F00FF3D9F01E93EA002B53EA002AF3EA002D73C9F00FF3C9F00FF3C9F + 01EB42A2083BFFFFFF00FFFFFF0043A2095D45A30C1FFFFFFF0050A81A073FA0 + 057B3D9F01EB3C9F00FF3C9F00FF3C9F00FF3C9F00FF3C9F00F93EA003A146A4 + 0D1BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0056AC230743A209413FA004673FA0046D41A1074F4CA71513FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000003000000020000 + 000000643C2605693D80076D3D8009713F800B753F800F793F800D7843260000 + 0000000000000000000000000000000000000000000000000007000000040000 + 000003673B8036C095FF1FBC8EFF4ACEADFF81E2CDFF9EEDDFFF0F7B3F800000 + 000000000000000000000000000000000000000000000000000D000000060000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 0000000000000000000000000000000000000000000000000013000000090000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 00000000000000000000000000000000000000000000000000190000000D0000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 000000000000000000000000000000000000000000000000001F000000100000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 0000000000000000000000000000000000000000000000000024000000120000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 0000000000000000000000000000000000000000000000000028000000140000 + 000003673B801EB482FF04B07AFF34C69FFF72DDC4FF92EADAFF0F7B3F800000 + 00000000000000000000000000000000000000000000000000291A7554AE2490 + 68FF1B8F63FF10AE77FF04B07AFF34C69FFF72DDC4FF8CE8D6FF5FB895FF68BC + 99FF4BA87AD1007F0002000000000000000000000000000000280457387E27A2 + 73FF03A162FF02A86CFF04B07AFF34C69FFF72DDC4FF86E6D4FF99EEE0FFA2E9 + DBFF2A925A7F0000000000000000000000000000000000000026000000121779 + 54AC1FAC78FF03A86DFF04B07AFF34C69FFF72DDC4FF86E6D4FFA0EEE2FF46A6 + 79BF007F00020000000000000000000000000000000000000022000000100065 + 3D19248F67E210AE77FF04B07AFF34C69FFF72DDC4FF8BE7D6FF68C0A0E51083 + 411F0000000000000000000000000000000000000000000000180000000B0000 + 00000466393E2BA67CFF07B27DFF34C69FFF73DEC5FF7AD1B8FF127F415E0000 + 000000000000000000000000000000000000000000000000000E000000060000 + 00000000000015784E8527B88DFF34C6A0FF7CDCC6FF2E91638A000000000000 + 0000000000000000000000000000000000000000000000000005000000020000 + 0000000000000066330A208D63DA52D1B2FF3D9F76DB006D360E000000000000 + 0000000000000000000000000000000000000000000000000001000000000000 + 00000000000000000000066B4326359A72B90D75412700000000000000000000 + 0000000000000000000000000000FFFFFF00164F2CA237764FB037764FB03475 + 4DAF00351456FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003A865AE78DC8A6FF8DC8A6FF85C3 + 9FFF00481E7DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0037895CE783C6A1FF83C6A1FF7BC3 + 9BFF004D227DFFFFFF00FFFFFF00FFFFFF000029127A00000004FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00338C5DE679C79EFF79C79EFF71C4 + 98FF0052277DFFFFFF00FFFFFF00FFFFFF00026731BC136238B700180B0CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002E8E5FE66FC79BFF6FC79BFF68C4 + 96FF00562B7DFFFFFF00FFFFFF00FFFFFF0004703BBC61C292FF157042C60027 + 1317FFFFFF00FFFFFF00FFFFFF00FFFFFF002A925FE564C898FF64C898FF5EC6 + 94FF005B2FAB00532B7000532B7000532B70047940CF63C897FF5BC592FF177F + 4CD100371D26FFFFFF00FFFFFF00FFFFFF00269461E55ACA96FF5ACA96FF5ACA + 96FF3DC184FF35BE7FFF35BE7FFF35BE7FFF40C185FF59CA96FF59CA96FF54C8 + 92FF178C56DC00402236FFFFFF00FFFFFF001C9660E444C98EFF44C98EFF44C9 + 8EFF44C98EFF44C98EFF44C98EFF44C98EFF43C98DFF43C98DFF43C98DFF43C9 + 8DFF3FC88BFF0F965AE4004C2A48FFFFFF00008F51E100BE6CFF00BE6CFF00BE + 6CFF00BE6CFF00BE6CFF00BE6CFF00BE6CFF00BE6CFF00BE6CFF00BE6CFF00BE + 6CFF00BE6CFF00A55EEE00532F59FFFFFF00029658E10CCA7BFF0CCA7BFF0CCA + 7BFF0CCA7BFF0CCA7BFF0CCA7BFF0CCA7BFF0CCA7BFF0CCA7BFF0CCA7BFF0AC9 + 79FF01AA64EC00553154FFFFFF00FFFFFF00017144C7089B60D5089B60D5089B + 60D5089B60D5089B60D5089B60D5089B60D514BC78EF39DA99FF34D996FF0BB1 + 6EEB00573450FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000975CBB55E4ACFF10B675E90057 + 354BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00009D61BB15BB7CE700593747FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDEDED05D5D5D50CC7C7 + C712B9B9B916AEAEAE1AA8A8A81CAAAAAA1B076A45BC246C5152CECECE0FE9E9 + E907FFFFFF00FFFFFF00FFFFFF00FFFFFF01D2D2D20DB3B3B318999999217C7C + 7C2A616161334747473B3232324229292945272D2A52525252387474742D9A9A + 9A21BFBFBF15E9E9E907FFFFFF00FFFFFF00FFFFFF00DFDFDF03B5B5B5089999 + 990D848484147373731B67676721656565226F6F6F1C808080149F9F9F0DB9B9 + B907D5D5D502FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C4470069BB3F0010FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D35600A2D45800C3C145001FFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D35600A4E16400FFD75A00D4C5490032FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D35700A7E16400FFE16400FFDA5D00E2C94B0048FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BE410014C5490051C6490053C74A0055C74B + 0057C84B0059C84C005BD35600BFE16400FFE16400FFE16400FFDC5F00EFCD4E + 0060FFFFFF00FFFFFF00FFFFFF00C1450053E16400FFE16400FFE16400FFE164 + 00FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFE16400FFDD60 + 00F8D04F007AFFFFFF00FFFFFF00BF430055D75C00FFD75C00FFD75C00FFD75C + 00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C00FFD75C + 00FFD65A00FECE4D0094C5390002BC410057CD5400FFCD5400FFCD5400FFCD54 + 00FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD5400FFCD54 + 00FFCD5400FFCA4B00C7C93E001DB43D005AB84900FFB84900FFB84900FFB849 + 00FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB84900FFB848 + 00FFBD4200ABC43C000FFFFFFF00B73E003EBB4600A2BB4600A3BC4600A3BC46 + 00A3BD4600A3BE4700A4BF4900D9C04E00FFC04E00FFC04E00FFC04C00F9C344 + 0089C8390001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C44900ADC75100FFC75100FFC64D00ECC7440064FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C54900AFC75100FFC64C00D9C7420040FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C64900B1C64900C1C7400022FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C6410074C73B000AFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000060000001C000000390000 + 0035000000120000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000003000000170F2F1C58167B41C30DA6 + 4DF2000000110000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000A0000003011723AC307B256FF238C + 4EAD000000080000000000000000000000080000001000000008000000000000 + 000000000000000000000000000000000013115C318907AA55FE07B35AFF235A + 3A5E000000080000000000000000000000180000003800000028000000080000 + 00000000000000000000000000000000001A0D783AC506AF5CFF07B25BFF1848 + 2C6E0000001A00000007000000020000002005CD5AFF00000058000000280000 + 00080000000000000000000000000000001D098F44E907AF5DFF06B25DFF1774 + 3EC0000000450000002D000000230000003807D366FF07D868FF000000580000 + 00280000000800000000000000000000001A069748FC19B368FF08B260FF0AA9 + 55F516713CC512392288000000610000006808D06DFF0AD779FF07D466FF0000 + 005800000028000000080000000000000013078A42E537BA79FF2DBB77FF17B9 + 6BFF07B660FF07B95EFF07BC5EFF07C466FF09CC72FF09D279FF09D376FF06CD + 63FF0000005800000028000000080000000A0A7739B330B270FF4FC58BFF4DC7 + 8DFF3AC684FF27C47BFF15C373FF08C46EFF09C871FF09CB74FF09CD75FF09CC + 72FF06C55FFF0000005000000018000000030B6C34651EA05BFD57C38DFF5AC8 + 93FF5BCB96FF5ACE97FF55CF96FF43CE8EFF34CC86FF26CB80FF1CCA7BFF15CA + 78FF0FC670FF06B955FF0000001800000000000000060B77399C37AF6FFF61C7 + 94FF63CC99FF62CD9AFF60CF9AFF5CD09AFF57D098FF52D096FF4BD092FF43CF + 8EFF3BCC87FF05B051FF0000000800000000000000010B69321D0B7A3A9926A4 + 61FD44B97DFF5BC691FF67CD9BFF63CE9BFF5ECE99FF57CD95FF50CC92FF48C8 + 8AFF05AA51FF0000000800000000000000000000000000000000000000030B76 + 385C0C823EA8098F46DF069949FF06A151FF07AA59FF5CCA96FF54C68EFF05A1 + 4CFF000000080000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000020069E4EFF60C692FF059948FF0000 + 0008000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000018048F43FF049144FF000000080000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000008037E37FF00000008000000000000 + 0000000000000000000000000000FFFFFF00A34B25AFA54C26FFA74E269FA950 + 2710000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00A64D26FFDE8B62FFC77046FFAF56 + 2BEFAF5428600000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00AA5027FFDA8055FFD67446FFD77B + 4FFFBF6336FFB3582ABFB5592A30000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00AD5328FFDB7E52FFD16835FFD36B + 38FFDA7645FFD47140FFBD5F2EFFB95C2B8FBA5D2C1000000000000000000000 + 0000000000000000000000000000FFFFFF00B05529FFDB7D4FFFD36A36FFD46C + 37FFD56E38FFD8713BFFDF7A45FFCF703CFFBF612FEFBD5F2D60000000000000 + 0000000000000000000000000000FFFFFF00B3582AFFDC7C4CFFD46C37FFD66F + 38FFD77139FFD8733AFFD9753BFFDE7D45FFDF844DFFCB6D37FFBF612DBFBF61 + 2D30000000000000000000000000FFFFFF00B65A2AFFDC7A48FFD66F38FFD772 + 3AFFD97439FFD97134FFD97132FFDA7030FFDC7434FFE18447FFDC854CFFC568 + 33FFBF612D8FBE602D1000000000FFFFFF00B85C2BFFDD7845FFD77037FFD66B + 2EFFD86C2DFFDB7131FFDD7634FFDE7936FFDF7A37FFDF7A37FFE08140FFE594 + 58FFCF763FFFBF612D7000000000FFFFFF00BB5D2CFFDC713AFFD56729FFD86D + 2DFFDB7332FFDE7936FFE17E3AFFE3823DFFE3833EFFE3833EFFE58B48FFE696 + 59FFD17940FFC2632E7000000000FFFFFF00BC5F2CFFDB6C32FFD76A2BFFDB72 + 31FFDE7936FFE2803BFFE58640FFE78B44FFE9914AFFEEA260FFE49456FFCE71 + 37FFC6672F800000000000000000FFFFFF00BE602DFFDC7137FFD96E2EFFDD77 + 34FFE17F3AFFE58741FFE99048FFEFA15BFFEFA867FFDB8042FFD06E32BFCD6C + 3120000000000000000000000000FFFFFF00BF602DFFDE763BFFDA7130FFDF7A + 37FFE3833EFFEA944FFFF0A765FFE89553FFD97635DFD6733450000000000000 + 0000000000000000000000000000FFFFFF00BF612DFFDF7A3FFFDB7332FFE17F + 3DFFEA9959FFE79758FFDC7C3CFFDC773580DD78361000000000000000000000 + 0000000000000000000000000000FFFFFF00BE602DFFDF7E42FFE08143FFE591 + 54FFD67A3EFFD37033BFD7733420000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00BD5F2DFFE0854CFFD57B42FFC969 + 30DFCD6C31500000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00BC5F2CBFC0612DFFC3642E80C666 + 2F10000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A34B2580A34B25FFA34B + 25FFA44C25FFA44C25800000000000000000A34B2580A34B25FFA34B25FFA44C + 25FFA44C2580FFFFFF00FFFFFF00FFFFFF00FFFFFF00A64E28FFDF9367FFE395 + 68FFDF8D5FFFA84F27FF0000000000000000A54E27FFDE8E61FFE29062FFDE89 + 5AFFA84F27FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00AA5129FFE39568FFDC7F + 4BFFE18B5BFFAD5228FF0000000000000000A95128FFE18F61FFDA7943FFE087 + 56FFAD5228FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00AD5328FFE39062FFD977 + 40FFE18452FFB15629FF0000000000000000AD5328FFE18A5BFFD77038FFE07F + 4CFFB15629FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00B15629FFE18B5BFFD975 + 3EFFE07D49FFB5592AFF0000000000000000B15629FFDF824FFFD56A30FFDD74 + 3EFFB5592AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00B5592AFFE18452FFD874 + 3DFFDF7A45FFBA5D2CFF0000000000000000B5592AFFDC723CFFD26125FFDB6B + 33FFBA5D2CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00B95C2BFFE07C48FFD468 + 2EFFDB7139FFBE602DFF0000000000000000B95C2BFFDB6B33FFD26125FFDB71 + 39FFBE602DFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00BC5F2CFFDB6C34FFD261 + 25FFDC763FFFC3642EFF0000000000000000BC5F2CFFDB6B33FFD26125FFDC76 + 3FFFC3642EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C0612DFFDB7139FFD261 + 25FFDC7A45FFC7672FFF0000000000000000C0612DFFDB7139FFD26125FFDC7A + 45FFC7672FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C3642EFFDC763FFFD363 + 26FFDE814BFFCB6A31FF0000000000000000C3642EFFDC763FFFD36326FFDE81 + 4BFFCB6A31FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C5662FFFDE7D47FFD86E + 2EFFE48F57FFCF6E32FF0000000000000000C5662FFFDE7D47FFD86E2EFFE48F + 57FFCF6E32FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C86830FFE18750FFE07D + 39FFECA165FFD47133FF0000000000000000C86830FFE18750FFE07D39FFECA1 + 65FFD47133FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00C96930FFE38E56FFEDA2 + 66FFF3AF6FFFD87434FF0000000000000000C96930FFE38E56FFEDA266FFF3AF + 6FFFD87434FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00CB6A3080CF6D32FFD370 + 33FFD77434FFDA7635800000000000000000CB6A3080CF6D32FFD37033FFD774 + 34FFDA763580FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A54C2580A64D26FFA84F26FFAA51 + 27FFAC5228FFAE5328FFAF5429FFB15629FFB25729FFB3572AFFB4582AFFB459 + 2AFFB5592AFFB5592A80FFFFFF00FFFFFF00A64D26FFE29F7EFFE6A382FFE6A1 + 7EFFE59D78FFE59972FFE5946BFFE48F64FFE4885BFFE38252FFE37C4AFFE380 + 4EFFE18252FFB85B2BFFFFFFFF00FFFFFF00A84F26FFE6A382FFDA8256FFDA81 + 55FFDA8053FFDB8051FFDB7F4FFFDC7E4DFFDC7D4BFFDC7C49FFDC7C49FFDD7E + 4AFFE58B5BFFBB5E2CFFFFFFFF00FFFFFF00AA5127FFE6A17EFFD67748FFD778 + 47FFD77947FFD87947FFD97A47FFDA7B48FFDA7C48FFDB7D48FFDC7E48FFDC7F + 48FFE79261FFBE602DFFFFFFFF00FFFFFF00AC5228FFE59D78FFD77848FFD879 + 47FFD97947FFD97B48FFDA7C48FFDB7D48FFDA7940FFDB7B41FFDB793EFFDC7B + 41FFE89563FFC1632EFFFFFFFF00FFFFFF00AE5328FFE59972FFD87947FFD97A + 47FFD87743FFD66E36FFD5682DFFD56729FFD76B2CFFD96E2EFFDA7130FFDB72 + 31FFE7935EFFC4652FFFFFFFFF00FFFFFF00AF5529FFE5946CFFD77745FFD366 + 2FFFD15E23FFD36326FFD6682AFFD86D2DFFDA7131FFDC7533FFDE7836FFDF7A + 37FFEA9C66FFC86730FFFFFFFF00FFFFFF00B15629FFE3895DFFCE5A20FFD05D + 22FFD36225FFD56829FFD86D2EFFDB7332FFDE7835FFE07C38FFE2803BFFE382 + 3DFFEDA46EFFCB6A30FFFFFFFF00FFFFFF00B25729FFDD7241FFCF5A20FFD260 + 24FFD46628FFD86C2DFFDB7231FFDE7836FFE17E3AFFE3833EFFE68841FFE78B + 43FFF0AC75FFCE6C31FFFFFFFF00FFFFFF00B3572AFFDD6D38FFD05C21FFD363 + 26FFD6692AFFDA6F2FFFDD7634FFE07D39FFE4843EFFE78A43FFEA8F47FFEC94 + 4AFFF3B47CFFD16F32FFFFFFFF00FFFFFF00B4582AFFDC6832FFD15E23FFD465 + 27FFD76B2CFFDB7332FFDF7A37FFE3823CFFE68942FFEA9047FFED974CFFF09C + 50FFF6BC83FFD47133FFFFFFFF00FFFFFF00B4592AFFDD6C36FFD16024FFD566 + 28FFD86D2EFFDC7533FFE07D39FFE4853FFFE88D45FFED964BFFF19E51FFF4A5 + 56FFF9C489FFD77334FFFFFFFF00FFFFFF00B5592AFFDC703BFFE07A45FFE383 + 4EFFE58C57FFE8955FFFEB9D67FFEEA66FFFF1AE77FFF4B77EFFF7BE85FFFAC5 + 8AFFFAC589FFDA7635FFFFFFFF00FFFFFF00B5592A80B85B2BFFBB5E2CFFBE60 + 2DFFC2632EFFC5652FFFC86730FFCB6A30FFCE6C31FFD16F32FFD47133FFD774 + 34FFDA7635FFDC773580FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000C77832E5D49A58FFD69B57FFD69B56FFD69C + 57FFD49A59FFD2985BFFBA540069000000000000000000000000000000000000 + 00000000000000000000CC660005D69C57FFEDD8A2FFEDD69CFFEDD69CFFEDD8 + 9EFFEDD9A6FFD69449E4BB5700260000000000000000BB500013BF7F00040000 + 00000000000000000000FFFF0001D69A56FFEDD498FFEDD290FFEDD292FFEDD5 + 9BFFDA984DE6C7630C290000000000000000C45E0723D49047E5CD7B28D7C165 + 00190000000000000000FFFF0001D59955FFEDD092FFEDCE8BFFEDD08FFFEDC8 + 8CFFD1812C99FFFFFF0100000000FFFF0001CF7C27B0EDD099FFEDCE98FFCA74 + 24D20000000100000000FFFF0001D59854FFEDCD8EFFEDCE90FFEDC889FFEDCE + 90FFE6BA7CFFC05E035100000000BD5C002FE1AD6BFFEDCA89FFE9C286FFC56A + 0E780000000000000000FFFF0001D49754FFEDD099FFD99549E6D58A39DEEDCD + 91FFEDCD90FFD3883CCEFFFF0001C0620582EDCA90FFEDC787FFD68F42E5CC66 + 0005000000000000000000000000D2965AFFD59147E4C7630629C3610044E6B5 + 73FFEDC683FFDEA760FFBD570023CE7B29AEEDC88AFFEDC88CFFC870199E0000 + 0000000000000000000000000000BC5B046FBB50002600000000CC660005D595 + 4CFCEDC27FFFE9B878FFBB57004FCE7E2BB4EDC484FFEDC688FFC46607900000 + 0000000000000000000000000000000000000000000000000000FFFF0001D690 + 49F3EDBF7AFFEABA7AFFBD550056C56A0F97EDC485FFEDBE7AFFD38232C0FFFF + 0001000000000000000000000000000000000000000000000000C35A0022DDA0 + 56FFEDBA72FFE3AB67FFBB590039BD570055E8B572FFEDB56AFFDFA359FFC25C + 00370000000000000000000000000000000000000000FF7F0002C76D15A6EDBA + 78FFEDB86EFFD69045EED4550006AA550006D48839E2EDB66DFFEDB56BFFD990 + 40E5C15C003AFFFF00010000000000000000D47F0006C4690D88E4AA60FFEDB0 + 61FFEBB876FFC4670F830000000000000000BD59005EE2A45DFFECAE5EFFEDB3 + 68FFE0A155FFD08030C2C66D109AC97017A1D3893BE6E8B16AFFECAC5DFFEDB5 + 6EFFD18530E2BF6600140000000000000000FF000001C2650B83E2A35AFFECB2 + 66FFECAC5EFFECB46AFFEDB874FFEDB771FFECB064FFECAC5CFFECB670FFD58A + 3BE5C05D00290000000000000000000000000000000000000000BD5A005DD187 + 38E2E7AF69FFEDBB78FFEDB770FFEDB872FFEDBA77FFDFA057FFCA741FB4C35A + 002200000000000000000000000000000000000000000000000000000000AA55 + 0006BC560050C4670894CB7925B2CA751EA9BF5F0380BA5A002DFF0000010000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FE00B615FE00B292FE00 + B2E2FF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFE00B2E2FE00 + B292FE00B615000000000000000000000000FE00AE26FE00B1E4FF00B2FFFF00 + B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00 + B2FFFE00B1E4FE00AE2600000000FF00FF02FE00B1CDFF00B2FFFF00B2FFFF00 + B2FFF700ACFF720050FF600042FF600043FF740051FF98006AFFF100A8FFFF00 + B2FFFF00B2FFFE00B1CDFF00FF02FE00B142FF00B2FFFF00B2FFFF00B2FFFF00 + B2FFB2007CFF000000FF060004FF10000BFF000000FF000000FF2D001FFFFD00 + B0FFFF00B2FFFF00B2FFFE00B142FF00B278FF00B2FFFF00B2FFFF00B2FFFF00 + B2FF7E0057FF000000FF7E0057FFFF00B2FFDC009AFF000000FF000000FFE400 + 9FFFFF00B2FFFF00B2FFFF00B278FF00B180FF00B2FFFF00B2FFFF00B2FFFF00 + B2FF4B0034FF000000FFB2007CFFFF00B2FFDC0099FF000000FF190011FFFA00 + AEFFFF00B2FFFF00B2FFFF00B180FF00B180FF00B2FFFF00B2FFFF00B2FFFF00 + B2FF15000EFF000000FF7A0054FF82005BFF250019FF14000EFFBD0084FFFF00 + B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00B2FFFF00B2FFFF00B2FFE100 + 9DFF000000FF000000FF000000FF000000FF000000FF29001CFFCB008EFFFF00 + B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00B2FFFF00B2FFFF00B2FFAE00 + 79FF000000FF4B0034FFEF00A6FFE600A0FF620044FF000000FF40002CFFFF00 + B2FFFF00B2FFFF00B2FFFF00B180FF00B180FF00B2FFFF00B2FFFF00B2FF7A00 + 55FF000000FF800059FFFF00B2FFFF00B2FFA00070FF000000FF390028FFFF00 + B2FFFF00B2FFFF00B2FFFF00B180FE00B264FF00B2FFFF00B2FFFF00B2FF4800 + 32FF000000FFA40072FFEC00A4FFC10087FF240019FF000000FF8E0063FFFF00 + B2FFFF00B2FFFF00B2FFFE00B264FE00B01AFE00B2F9FF00B2FFFF00B2FF1500 + 0EFF000000FF000000FF000000FF000000FF010000FF6C004BFFFD00B0FFFF00 + B2FFFF00B2FFFE00B2F9FE00B01A00000000FE00B27CFF00B2FFFF00B2FF9000 + 64FF800059FF800059FF84005CFF98006AFFDC009AFFFF00B2FFFF00B2FFFF00 + B2FFFF00B2FFFE00B27C0000000000000000FF00FF01FE00B27CFE00B2F9FF00 + B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFF00B2FFFE00 + B2F9FE00B27CFF00FF0100000000000000000000000000000000FE00B01AFE00 + B264FF00B180FF00B180FF00B180FF00B180FF00B180FF00B180FE00B264FE00 + B01A000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000091E90551C33 + B5A01731AD81051E823300000000000000000E259259253EC6D82038BEBF0C21 + 9869001C710900000000000000000000000000000000000E7F5A0911C5FD243B + E9FF2A53FAFF1B3ECEF20000270D0000120E263ECAF73149EDFF2645F2FF2445 + F1FE142FBBCB001470190000000000000000000F73420005B8F80811D3FF274E + F7FF2952FAFF1A3BC5F300000D130000000F172AAEEB2235E5FF223FF0FF2341 + F0FE2343F1FF1633C5DF0517762B0010652D0005B3EF0409CFFF2345F2FF274D + F7FF2145E3FD04135676000000010000000000072E4707159AE41526DFFF213C + EDFE213DEEFF223FEFFF1934D0EF010AAEE40204CBFF1E39ECFF2547F4FF2345 + EBFF08196E9D000000060000000000000000000000000006182A000A7CCA0D19 + D1FF1F37EBFF2039ECFF203BEDFF1A30E6FF1A2FE6FF2240F0FF2241EFFF0C21 + 88BF0000000F000000000000000000000000000000000000000000000014000A + 5FA50812B3FD1C30E4FF1E35EAFF1F37EBFF1F38ECFF203AEDFF0F259FDA0000 + 111E000000000000000000000000000000000000000000000000000000000000 + 0009000976D1040797FF1A2DE1FF1C31E7FF1D32E8FF1E34E9FF091F95B30000 + 550600000000000000000000000000000000000000000000000000000000000D + 82870002A5FF080DACFF1929E2FF1A2BE4FF1B2CE5FF1B2EE6FF1B2FE4FF0D23 + ACBD000F5F100000000000000000000000000000000000000000000E7F6A0003 + BEFE0407C1FF1620DDFF1723E0FF1422D2FF101AC6FF1928E2FF1A29E3FF1A2B + E4FF0F21B5D40018731F00000000000000000000000000107A4F0004BBFB0203 + CBFE1218D9FF151CDCFF131DD6FF041067A5000A5DAF0A12B3FE1723DFFF1825 + E1FF1926E1FF0E20B3DF0000240700000000041773370D18BFF50406CCFF0F11 + D4FE1216D8FE1217D7FE061282C00000000F0000000A00094885060E9EF9141D + D9FE1620DEFE101EC0FB00001419000000051C32BAE01D2BDEFF0F11D5FF1011 + D6FF1112D6FF081196DB0000101F00000000000000000000000300062649030E + 70C00C17A7F2051064960000000300000B17192CC3FC161ED9FF0F0ED4FF0F0E + D4FE0910A8ED0009293700000000000000000000000000000000000000000000 + 000800000020000000060000000000000003020E4E7B050F8CDC0A0FBAFE080E + A4F000093C540000000100000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000010000001100030F400000 + 0628000000010000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000 + } + end + object PopupMenu1: TPopupMenu + Images = ImageList16 + OnPopup = PopupMenu1Popup + left = 144 + top = 120 + object mnSetPCHere: TMenuItem + Action = frmDebugger.acGenSetPC + end + object MenuItem1: TMenuItem + Action = frmDebugger.acGenStep + end + object MenuItem2: TMenuItem + Action = frmDebugger.acGenStepIn + end + object MenuItem5: TMenuItem + Action = frmDebugger.acGenExecHer + end + object MenuItem6: TMenuItem + Action = frmDebugger.acGenSetBrkPnt + end + object MenuItem4: TMenuItem + Caption = '-' + end + object MenuItem8: TMenuItem + Action = frmDebugger.acGenAddWatch + end + object MenuItem3: TMenuItem + Action = frmDebugger.acGenReset + end + end +end diff --git a/Source/FramePicAsm.pas b/Source/FramePicAsm.pas new file mode 100644 index 00000000..2b8110b8 --- /dev/null +++ b/Source/FramePicAsm.pas @@ -0,0 +1,352 @@ +unit FramePicAsm; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, Types, FileUtil, Forms, Controls, StdCtrls, Grids, Graphics, + ExtCtrls, Buttons, Menus, LCLType, CompBase, PicCore, MisUtils; +type + + { TfraPicAsm } + + TfraPicAsm = class(TFrame) + ImageList16: TImageList; + Label2: TLabel; + MenuItem1: TMenuItem; + MenuItem2: TMenuItem; + MenuItem3: TMenuItem; + MenuItem4: TMenuItem; + MenuItem5: TMenuItem; + MenuItem6: TMenuItem; + MenuItem8: TMenuItem; + mnSetPCHere: TMenuItem; + panTitle: TPanel; + PopupMenu1: TPopupMenu; + SpeedButton1: TSpeedButton; + StringGrid1: TStringGrid; + procedure PopupMenu1Popup(Sender: TObject); + procedure StringGrid1DblClick(Sender: TObject); + procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + private + pic: TPicCore; + defHeight : LongInt; //Altura por defecto de fila + defHeightFold: Integer; //Altura de fila plegada + margInstrc: Integer; + curVarName: string; + function FindNextLabel(row: integer): integer; + function FindPrevLabel(row: integer): integer; + procedure Fold(row1, row2: integer); + function RowFolded(row: integer): boolean; + procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; + aRect: TRect; aState: TGridDrawState); + procedure Unfold(row1, row2: integer); + public + procedure Refrescar(SetGridRow: boolean); + procedure ResizeRow(i: integer); + procedure SetCompiler(cxp0: TCompilerBase); + constructor Create(AOwner: TComponent) ; override; + end; + +implementation + +{$R *.lfm} + +{ TfraPicAsm } +procedure TfraPicAsm.StringGrid1DrawCell(Sender: TObject; aCol, + aRow: Integer; aRect: TRect; aState: TGridDrawState); +var + txt, comm, lab: String; //Texto de la celda + cv: TCanvas; //Referencia al lienzo + ramCell: ^TPICFlashCell; //Referencia a la celda RAM + PC: Word; + rowHeight: LongInt; +begin + cv := StringGrid1.Canvas; //referencia al Lienzo + ramCell := @pic.flash[aRow]; + //Fija color de texto y relleno + if gdFixed in aState then begin + //Es una celda fija + cv.Brush.Color := clMenu; // le ponemos azul de fondo + cv.Font.Color := clBlack; // fuente blanca + cv.Font.Style := []; // y negrita + end else begin + //Es una celda común + if aRow = StringGrid1.Row then begin + //Fila seleccionada + cv.Brush.Color := clMenu; // fondo marrón + cv.Font.Color := clBlack; // letra negra + cv.Font.Style := [fsBold]; // negrita + end else begin + //Fila sin selección + if ramCell^.used then begin + cv.Brush.Color := clWhite; //fondo blanco + end else begin //Dirección no usada + cv.Brush.Color := $E0E0E0; + end; + cv.Font.Style := [fsBold]; //negrita + end; + end; + //Dibuja contenido de celda + cv.FillRect(aRect); //fondo + if ACol = 0 then begin + txt := '$'+IntToHex(aRow,3); + cv.TextOut(aRect.Left + 2, aRect.Top + 2, txt); + end else if ACol = 1 then begin + //Celda normal + txt := pic.DisassemblerAt(aRow, true); //desensambla + PC := pic.ReadPC; + //Escribe texto con alineación + rowHeight := StringGrid1.RowHeights[Arow]; + if rowHeight = defHeight*3 then begin + //Celda con comentario superior y etiqueta + lab := trim(ramCell^.topLabel)+':'; + comm := trim(ramCell^.topComment); + cv.Font.Color := clGray; + cv.TextOut(aRect.Left + 2, aRect.Top + 2, lab); //comentario + cv.Font.Color := clBlue; + cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + defHeight+ 2, comm); //comentario + //Escribe instrucción + cv.Font.Color := clGreen; //letra verde + cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + defHeight*2 + 2, txt); + if ramCell^.breakPnt then begin + ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2 + defHeight*2, 9); + end; + if aRow = PC then begin //marca + ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2 + defHeight*2, 3); + end; + end else if rowHeight = defHeight*2 then begin + //Celda con comentario superior o etiqueta + comm := trim(ramCell^.topComment); + if comm<>'' then begin + cv.Font.Color := clBlue; //letra verde + cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + 2, comm); //comentario + end else begin + //Hay etiqueta + lab := trim(ramCell^.topLabel)+':'; + cv.Font.Color := clGray; + cv.TextOut(aRect.Left + 2, aRect.Top + 2, lab); //comentario + end; + //Escribe instrucción + cv.Font.Color := clGreen; //letra verde + cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top+2 + defHeight, txt); + if ramCell^.breakPnt then begin + ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2 + defHeight, 9); + end; + if aRow = PC then begin //marca + ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2 + defHeight, 3); + end; + end else if rowHeight = defHeightFold then begin + //Fila plegada. Se supone que hay etiqueta + lab := trim(ramCell^.topLabel)+': ...'; + cv.Font.Color := clGray; + cv.TextOut(aRect.Left + 2, aRect.Top + 2, lab); //comentario + end else begin + //Escribe instrucción + cv.Font.Color := clGreen; //letra verde + cv.TextOut(aRect.Left + 2 + margInstrc, aRect.Top + 2, txt); + if ramCell^.breakPnt then begin + ImageList16.Draw(cv, aRect.Left + 1, aRect.Top+2, 9); + end; + if aRow = PC then begin //marca + ImageList16.Draw(cv, aRect.Left + 10, aRect.Top+2, 3); + end; + end; + end else if ACol = 2 then begin + //Celda normal + cv.Font.Color := clBlue; //letra verde + txt := ramCell^.sideComment; //comentario +// if ramCell^.idFile=-1 then begin +// txt := ''; +// end else begin +// txt := 'IdFil=' + IntToStr(ramCell^.idFile) + +// 'row=' + IntToStr(ramCell^.rowSrc) + +// 'col=' + IntToStr(ramCell^.colSrc) ; +// end; + //Escribe texto con alineación + cv.TextOut(aRect.Left + 2, aRect.Top + 2, txt); + end; +end; +procedure TfraPicAsm.PopupMenu1Popup(Sender: TObject); +var + txt: String; + a: TStringDynArray; +begin + if StringGrid1.Row=-1 then begin + //acGenAddWatch.Visible := false; + MenuItem8.Visible := false; + exit; + end; + //Obtiene instrucción seleccionada + txt := pic.DisassemblerAt(StringGrid1.Row, true); + //Valida si es instrucción + a := Explode(' ', trim(txt)); + if (high(a)<>1) and (high(a)<>2) then begin + //acGenAddWatch.Visible := false; + MenuItem8.Visible := false; + exit; + end; + //Puede ser una instrucción + curVarName := a[1]; //toma la segunda parte + if pos(',', curVarName)<>0 then begin + //Toma hasta antes de la coma + curVarName := copy(curVarName, 1, pos(',', curVarName)-1); + end; + curVarName := trim(curVarName); + //acGenAddWatch.Caption := 'Add Watch on ' + curVarName; + MenuItem8.Visible := true; + MenuItem8.Caption := 'Add Watch on ' + curVarName; +end; +function TfraPicAsm.FindPrevLabel(row: integer): integer; +{Busca la fila anterior de la grilla que contenga una etiqueta. +La búsqued ase hace a partir de l amisma fila "row". +Si no encuentra. Deuvelve -1.} +begin + while row > 0 do begin + if pic.flash[row].topLabel<>'' then exit(row); + Dec(row); //Mira siguiente fila + end; + exit(-1); +end; +function TfraPicAsm.FindNextLabel(row: integer): integer; +{Busca la siguiente fila de la grilla que contenga una etiqueta. +La búsqued ase hace a partir de la siguiente fila de "row". +Si no encuentra. Deuvelve -1.} +begin + while row < StringGrid1.RowCount-1 do begin + Inc(row); //Mira siguiente fila + if pic.flash[row].topLabel<>'' then exit(row); + end; + exit(-1); +end; +procedure TfraPicAsm.Fold(row1, row2: integer); +//Pliega el rango de filas indicadas. No incluye a la última. +var + i: Integer; +begin + StringGrid1.BeginUpdate; + StringGrid1.RowHeights[row1] := defHeightFold; //fija altura + for i := row1+1 to row2-1 do begin + StringGrid1.RowHeights[i] := 0; //oculta + end; + StringGrid1.EndUpdate(); +end; +procedure TfraPicAsm.Unfold(row1, row2: integer); +//Despliega el rango de filas indicadas. No incluye a la última. +var + i: Integer; +begin + StringGrid1.BeginUpdate; + for i := row1 to row2-1 do begin + ResizeRow(i); + end; + StringGrid1.EndUpdate(); +end; +procedure TfraPicAsm.StringGrid1DblClick(Sender: TObject); +var + i1, i2: Integer; +begin + //Toma fila actual + i1 := StringGrid1.Row; + if StringGrid1.RowHeights[i1] = defHeightFold then begin + //Fila plegada. Expande + i2 := FindNextLabel(i1); + if i2 = -1 then exit; //No debería pasar porque un blqoeu así no debería haberse plegado + Unfold(i1, i2); + end else begin + //Fila sin plegar. Plega si es inicio de subrutina (tiene etiqueta). + if pic.flash[i1].topLabel <> '' then begin + i2 := FindNextLabel(i1); //Busca fin de subrutina + if i2 = -1 then exit; //Es el último bloque + Fold(i1, i2); + end; + end; +end; +procedure TfraPicAsm.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + ACol, ARow: Longint; +begin + if Button = mbRight then begin + StringGrid1.MouseToCell(X, Y, ACol, ARow); + if ACol>0 then begin + StringGrid1.Row := ARow; + PopupMenu1.PopUp; + end; + end; +end; +procedure TfraPicAsm.Refrescar(SetGridRow: boolean); +var + pc: DWord; + i1, i2: Integer; +begin + if SetGridRow then begin + pc := pic.ReadPC; + //Verifica si está plegada + if RowFolded(pc) then begin + i1 := FindPrevLabel(pc); + i2 := FindNextLabel(pc); + if (i1 = -1) or (i2 = -1) then exit; + Unfold(i1, i2); + end; + StringGrid1.Row := pc; + end; + StringGrid1.Invalidate; +end; +function TfraPicAsm.RowFolded(row: integer): boolean; +var + h: LongInt; +begin + h := StringGrid1.RowHeights[row]; + if (h = 0) or (h = defHeightFold) then exit(true); + exit(false); +end; +procedure TfraPicAsm.ResizeRow(i: integer); +{Redimensiona la fila "i" de la grilla para que pueda contener las etiquetas que +incluye.} +begin + if not pic.flash[i].used then begin + StringGrid1.RowHeights[i] := defHeight; + exit; + end; + //Es celda usada + if (pic.flash[i].topComment<>'') and (pic.flash[i].topLabel<>'') then begin + //Tiene comentario arriba y etiqueta + StringGrid1.RowHeights[i] := 3*defHeight; + end else if (pic.flash[i].topComment<>'') or (pic.flash[i].topLabel<>'') then begin + //Tiene comentario arriba + StringGrid1.RowHeights[i] := 2*defHeight; + end else begin + //Deja con la misma altura + StringGrid1.RowHeights[i] := defHeight; + end; +end; +procedure TfraPicAsm.SetCompiler(cxp0: TCompilerBase); +var + i: Integer; +begin + pic := cxp0.picCore; + StringGrid1.DefaultDrawing:=false; + StringGrid1.OnDrawCell := @StringGrid1DrawCell; + //Dimensiona la grilla para que pueda mostrar las etIquetas + StringGrid1.RowCount := high(pic.flash)+1; + StringGrid1.BeginUpdate; + for i:=0 to high(pic.flash) do ResizeRow(i); + StringGrid1.EndUpdate(); +end; +constructor TfraPicAsm.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + //Altura de fila de la grilla por defecto + defHeight := 20; + defHeightFold := 21; + //Margen para mostrar las instrucciones en la grilla + margInstrc := 32; + //Configura Toolbar +// ToolBar1.ButtonHeight:=38; +// ToolBar1.ButtonWidth:=38; +// ToolBar1.Height:=42; +// ToolBar1.Images:=ImgActions32; +end; + +end. + diff --git a/Source/FramePicRegisters.lfm b/Source/FramePicRegisters.lfm index fcb5ea48..2989d629 100644 --- a/Source/FramePicRegisters.lfm +++ b/Source/FramePicRegisters.lfm @@ -166,94 +166,4 @@ object fraPicRegisters: TfraPicRegisters 'C' ) end - object Label4: TLabel - Left = 16 - Height = 15 - Top = 176 - Width = 87 - Caption = 'Indirect Reg. File' - ParentColor = False - end - object Shape1: TShape - Left = 247 - Height = 15 - Top = 160 - Width = 1 - end - object Label5: TLabel - Left = 124 - Height = 15 - Top = 208 - Width = 50 - Caption = 'Time Out' - ParentColor = False - end - object Label6: TLabel - Left = 208 - Height = 15 - Top = 208 - Width = 24 - Caption = 'Zero' - ParentColor = False - end - object Label7: TLabel - Left = 224 - Height = 15 - Top = 192 - Width = 56 - Caption = 'Digit Carry' - ParentColor = False - end - object Label8: TLabel - Left = 240 - Height = 15 - Top = 176 - Width = 28 - Caption = 'Carry' - ParentColor = False - end - object Shape2: TShape - Left = 232 - Height = 30 - Top = 160 - Width = 1 - end - object Shape3: TShape - Left = 210 - Height = 44 - Top = 160 - Width = 1 - end - object Shape4: TShape - Left = 163 - Height = 45 - Top = 160 - Width = 1 - end - object Label9: TLabel - Left = 72 - Height = 15 - Top = 192 - Width = 60 - Caption = 'Bank Select' - ParentColor = False - end - object Shape5: TShape - Left = 87 - Height = 15 - Top = 160 - Width = 1 - end - object Shape6: TShape - Left = 124 - Height = 26 - Top = 164 - Width = 1 - end - object Shape7: TShape - Left = 115 - Height = 1 - Top = 162 - Width = 20 - end end diff --git a/Source/FramePicRegisters.pas b/Source/FramePicRegisters.pas index 37ca0200..72093046 100644 --- a/Source/FramePicRegisters.pas +++ b/Source/FramePicRegisters.pas @@ -3,7 +3,8 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, StdCtrls, LCLProc, - LCLIntf, LCLType, Grids, ExtCtrls, Pic16Utils; + LCLIntf, LCLType, Grids, ExtCtrls, CompBase, + PicCore, Pic16Utils, Pic10Utils, Pic17Utils; type { TfraPicRegisters } @@ -12,33 +13,18 @@ TfraPicRegisters = class(TFrame) Label1: TLabel; Label2: TLabel; Label3: TLabel; - Label4: TLabel; - Label5: TLabel; - Label6: TLabel; - Label7: TLabel; - Label8: TLabel; - Label9: TLabel; - Shape1: TShape; - Shape2: TShape; - Shape3: TShape; - Shape4: TShape; - Shape5: TShape; - Shape6: TShape; - Shape7: TShape; StringGrid1: TStringGrid; StringGrid2: TStringGrid; private - procedure DibPaginaROM(x, y, ancho, alto: integer; pag: TFlashPage; - dirIni: integer); - procedure DibBar(const x1, x2: integer; y, alto: integer; dirIni, - dirFin: integer; lbl: string); - procedure DibBloque(const x1, x2: integer; y, alto: integer; dirIni, - dirFin: integer; used: boolean); - procedure Frame1Paint(Sender: TObject); - procedure TextCEnt(x, y: integer; txt: string); + cxp: TCompilerBase; + //Acceso a los registros importantes + WREGptr: ^byte; + STATptr: ^byte; + procedure ShowRegister(reg: byte; gri: TStringGrid); public - pic: TPIC16; + procedure SetCompiler(cxp0: TCompilerBase); procedure Refrescar; + //procedure SetRegisters(); constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; end; @@ -46,182 +32,76 @@ TfraPicRegisters = class(TFrame) implementation {$R *.lfm} { TfraPicRegisters } -procedure TfraPicRegisters.TextCEnt(x, y: integer; txt: string); -{Excribe texto centrado} -var - ancTxt, altTxt: Integer; -begin - altTxt := Canvas.TextHeight(txt); - ancTxt := Canvas.TextWidth(txt); - Canvas.Brush.Color := clWhite; - Canvas.TextOut(x - ancTxt div 2, y - altTxt div 2, txt); -end; -procedure TfraPicRegisters.Refrescar; -{Refresca valores de los registros} -var - w0,w1,w2,w3,w4,w5,w6,w7: Byte; -begin - w0 := (pic.W and %00000001); - w1 := (pic.W and %00000010)>>1; - w2 := (pic.W and %00000100)>>2; - w3 := (pic.W and %00001000)>>3; - w4 := (pic.W and %00010000)>>4; - w5 := (pic.W and %00100000)>>5; - w6 := (pic.W and %01000000)>>6; - w7 := (pic.W and %10000000)>>7; - StringGrid1.Cells[0,1] := IntToStr(pic.W); - StringGrid1.Cells[1,1] := IntToHex(pic.W, 2); - StringGrid1.Cells[2,1] := IntToStr(w7); - StringGrid1.Cells[3,1] := IntToStr(w6); - StringGrid1.Cells[4,1] := IntToStr(w5); - StringGrid1.Cells[5,1] := IntToStr(w4); - StringGrid1.Cells[6,1] := IntToStr(w3); - StringGrid1.Cells[7,1] := IntToStr(w2); - StringGrid1.Cells[8,1] := IntToStr(w1); - StringGrid1.Cells[9,1] := IntToStr(w0); - - w0 := (pic.STATUS and %00000001); - w1 := (pic.STATUS and %00000010)>>1; - w2 := (pic.STATUS and %00000100)>>2; - w3 := (pic.STATUS and %00001000)>>3; - w4 := (pic.STATUS and %00010000)>>4; - w5 := (pic.STATUS and %00100000)>>5; - w6 := (pic.STATUS and %01000000)>>6; - w7 := (pic.STATUS and %10000000)>>7; - StringGrid2.Cells[0,1] := IntToStr(pic.STATUS); - StringGrid2.Cells[1,1] := IntToHex(pic.STATUS, 2); - StringGrid2.Cells[2,1] := IntToStr(w7); - StringGrid2.Cells[3,1] := IntToStr(w6); - StringGrid2.Cells[4,1] := IntToStr(w5); - StringGrid2.Cells[5,1] := IntToStr(w4); - StringGrid2.Cells[6,1] := IntToStr(w3); - StringGrid2.Cells[7,1] := IntToStr(w2); - StringGrid2.Cells[8,1] := IntToStr(w1); - StringGrid2.Cells[9,1] := IntToStr(w0); - -end; -procedure TfraPicRegisters.DibBar(const x1, x2: integer; y, alto: integer; - dirIni, dirFin: integer; lbl: string); -//Dibuja una barra, en la posición: x1, x2, y, con altura "alto". -var - altTxt, ancho, ancTxt, xt, yt: Integer; - ARect: TRect; - TextStyle: TTextStyle; +procedure TfraPicRegisters.ShowRegister(reg: byte; gri: TStringGrid); +{Muestra el contenido de un registro en la fila indciada de la grilla.} begin - Canvas.Rectangle(x1, y, x2, y + alto); - //////// Escribe etiqueta centrada ///////////// - ancho := x2 - x1; - altTxt := Canvas.TextHeight(lbl); - ancTxt := Canvas.TextWidth(lbl); - ARect.Left := x1; - ARect.Right := x2; - ARect.Top := y; - ARect.Bottom := y + alto; - if ancTxt> ancho then - xt := x1 //no centra - else - xt := x1 + ancho div 2 - ancTxt div 2; //centra - yt := y + alto div 2 - altTxt div 2; -// Canvas.Pen.Color := clred; - TextStyle := Canvas.TextStyle; - TextStyle.EndEllipsis := true; - Canvas.Brush.Style := bsClear; //texto sin fondo - Canvas.TextRect(Arect, xt, yt, lbl, TextStyle); - + gri.BeginUpdate; + gri.Cells[0,1] := IntToStr(reg); + gri.Cells[1,1] := IntToHex(reg, 2); + if (reg and %00000001)<>0 then gri.Cells[9, 1] := '1' else gri.Cells[9, 1] := '0'; + if (reg and %00000010)<>0 then gri.Cells[8, 1] := '1' else gri.Cells[8, 1] := '0'; + if (reg and %00000100)<>0 then gri.Cells[7, 1] := '1' else gri.Cells[7, 1] := '0'; + if (reg and %00001000)<>0 then gri.Cells[6, 1] := '1' else gri.Cells[6, 1] := '0'; + if (reg and %00010000)<>0 then gri.Cells[5, 1] := '1' else gri.Cells[5, 1] := '0'; + if (reg and %00100000)<>0 then gri.Cells[4, 1] := '1' else gri.Cells[4, 1] := '0'; + if (reg and %01000000)<>0 then gri.Cells[3, 1] := '1' else gri.Cells[3, 1] := '0'; + if (reg and %10000000)<>0 then gri.Cells[2, 1] := '1' else gri.Cells[2, 1] := '0'; + gri.EndUpdate; end; -procedure TfraPicRegisters.DibBloque(const x1, x2: integer; y, alto: integer; - dirIni, dirFin: integer; - used: boolean); -{Dibuja un bloque, de memoria RAM, pone etqiueta descriptiva y pinta con color -indicativo.} +procedure TfraPicRegisters.SetCompiler(cxp0: TCompilerBase); +{Fija el compilador actual.} var - lbl, etiqIni, etiqFin: String; - ancMargenDir, - altTxt: integer; //Ancho de margen para las etiquetas de dirección. + pic : TPicCore; begin - case used of - true: begin - Canvas.Brush.Color := clGray; - lbl := 'Used'; - end; - false: begin - Canvas.Brush.Color := clWhite; - lbl := 'Free'; - end; + cxp := cxp0; + pic := cxp0.picCore; + //Configura registros de acuerdo al tipo de arquitectura del compilador + WREGptr := nil; + STATptr := nil; + //Obtiene referencias a los registros importantes + case cxp.ID of + 10: begin + WREGptr := @(TPIC10(pic).W); + StringGrid2.Cells[2,0] := 'GPWUF'; + if copy(pic.Model,1,6) = 'PIC12F' then begin + StringGrid2.Cells[3,0] := ''; + StringGrid2.Cells[4,0] := 'PA0'; + STATptr := @(pic.ram[Pic10Utils._STATUS].dvalue); + end else begin + //Habría que revisar si esto se cumple siempre + StringGrid2.Cells[3,0] := 'CWUF'; + StringGrid2.Cells[4,0] := ''; + STATptr := @(pic.ram[Pic10Utils._STATUS].dvalue); + end; end; - //Convierte direcciones a texto y calcula ancho de margen de direcciones - ancMargenDir := 0; //Por defecto - if (alto>20) and (dirIni<>-1) then begin - etiqIni := '$'+IntToHex(dirIni, 3); + 16: begin + WREGptr := @(TPIC16(pic).W); + StringGrid2.Cells[2,0] := 'IRP'; + StringGrid2.Cells[3,0] := 'RP1'; + StringGrid2.Cells[4,0] := 'RP0'; + STATptr := @(pic.ram[Pic16Utils._STATUS].dvalue); end; - if (alto>20) and (dirFin<>-1) then begin - etiqFin := '$'+IntToHex(dirFin, 3); - altTxt := Canvas.TextHeight(etiqFin); + 17: begin + WREGptr := @(TPIC16(pic).W); + StringGrid2.Cells[2,0] := ''; + StringGrid2.Cells[3,0] := ''; + StringGrid2.Cells[4,0] := ''; + STATptr := @(pic.ram[Pic17Utils._STATUS].dvalue); end; - ancMargenDir := canvas.TextWidth(etiqIni); - //Dibuja barra de fondo y direcciones - if ancMargenDir>(x2-x1)*0.5 then begin - //El ancho es muy pequeño para dibujar direcciones - DibBar(x1, x2, y, alto, dirIni, dirFin, lbl); - end else begin - DibBar(x1+ancMargenDir, x2, y, alto, dirIni, dirFin, lbl); - //Dibuja etiquetas de dirección - Canvas.TextOut(x1, y+1, etiqIni); - Canvas.TextOut(x1, y+alto-altTxt-1, etiqFin); end; end; -procedure TfraPicRegisters.DibPaginaROM(x, y, ancho, alto: integer; pag: TFlashPage; - dirIni: integer); -begin - //Dibuja fondo - Canvas.Brush.Color := clWhite; -// Canvas.Rectangle(x, y, x + ancho, y + alto); - DibBloque(x, x+ancho, y, alto, 0, 2047, false); //dibuja - -end; -procedure TfraPicRegisters.Frame1Paint(Sender: TObject); -//var -// bordlat, separ: Integer; +procedure TfraPicRegisters.Refrescar; +{Refresca valores de los registros} begin - if pic = nil then exit; - //////////////////////// - //Espaciado entre bancos -// if width < 200 then begin -// //Ancho reducido -// separ := width div 24; //espacio lateral -// bordlat := width div 24; -// end else begin -// //Ancho grande -// if (pic.NumPages=1) then begin -// //Es una sola página. Puede quedar mal proporcionada -// separ := width div 4; //espacio lateral -// bordlat := width div 4; -// end else begin -// separ := width div 18; //espacio lateral -// bordlat := width div 18; -// end; -// end; -// bordSup := (height-label1.Height) div 15; //espacio superior -// ancPag := (width - bordlat * 2 - separ * (pic.NumPages-1)) div pic.NumPages; -// altur := (height-label1.Height) - 2* bordSup; -// -// x0 := bordlat; -// y0 := bordsup + label1.Height; -// for i:=0 to pic.NumPages-1 do begin -// DibPaginaROM(x0, y0, ancPag, altur, pic.pages[i], i * $80); -// x0 := x0 + ancPag + separ; -// end; - + ShowRegister(WREGptr^, StringGrid1); + ShowRegister(STATptr^, StringGrid2); end; - constructor TfraPicRegisters.Create(AOwner: TComponent); begin inherited Create(AOwner); - self.OnPaint := @Frame1Paint; end; destructor TfraPicRegisters.Destroy; begin - inherited Destroy; end; diff --git a/Source/FrameRamExplorer.pas b/Source/FrameRamExplorer.pas index 7510cd69..0f955c53 100644 --- a/Source/FrameRamExplorer.pas +++ b/Source/FrameRamExplorer.pas @@ -3,12 +3,15 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, StdCtrls, LCLProc, - LCLIntf, LCLType, ExtCtrls, Buttons, Pic16Utils; + LCLIntf, LCLType, ExtCtrls, Buttons, PicCore, CompBase; type //Define a un bloque de RAM, que servirá para dibujo + {Los bloques de RAM se usan para separar la memoria en bloques de acuerdo a + diversos criterios, como el estado, el uso o el mapeo. Por eso tienen diversas + banderas} TRamBlock = record add1, add2: word; //Direcciones de memoria - blkType: TPIC16CellState; //Tipo de blqoue + blkType: TPICCellState; //Tipo de blqoue mapped : boolean; //Indica si el bloque está mapeado used : boolean; //Indica si el bloque está usado end; @@ -21,22 +24,24 @@ TfraRamExplorer = class(TFrame) SpeedButton1: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); private + cxp: TCompilerBase; + pic: TPicCore; blockSta: array of TRamBlock; blockMap: array of TRamBlock; blockUse: array of TRamBlock; - procedure SepararEnBloquesEstado(dir1, dir2: word); - procedure SepararEnBloquesMapeado(dir1, dir2: word); + procedure SplitInStateRAM(dir1, dir2: word); + procedure SplitInMappedRAM(dir1, dir2: word); procedure SplitInUsedRAM(dir1, dir2: word); - procedure DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; selected: boolean); + procedure DrawRAMbank(const marcoRam: TRect; bnk: TPICRAMBank; selected: boolean); procedure DibBar(const x1, x2: integer; y1, y2: integer; lbl: string); procedure DrawBlockTxt(const marcoRam: TRect; ancMargenDir: integer; dirIni, - dirFin: integer; lbl: string); + dirFin, BankSize: word; lbl: string); procedure DrawBlock(const marcoRam: TRect; ancMargenDir: integer; dirIni, - dirFin: integer); + dirFin, BankSize: word); procedure panGraphPaint(Sender: TObject); public - pic: TPIC16; OnCloseFrame: procedure of object; //Evento de cierre + procedure SetCompiler(cxp0: TCompilerBase); constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; end; @@ -48,14 +53,14 @@ procedure TfraRamExplorer.SpeedButton1Click(Sender: TObject); begin if OnCloseFrame<>nil then OnCloseFrame; end; -procedure TfraRamExplorer.SepararEnBloquesEstado(dir1, dir2: word); +procedure TfraRamExplorer.SplitInStateRAM(dir1, dir2: word); {Explora la memoria RAM, entre las direcciones dir1, y dir2, y almacena los bloques encontrados (de distinto campo "state"), en el arreglo "blockSta". } var n: Integer; i, pos1, pos2: Word; - tipBloque: TPIC16CellState; + tipBloque: TPICCellState; begin setlength(blockSta, 1); //abre un bloque n := high(blockSta); //índice actual @@ -89,7 +94,7 @@ procedure TfraRamExplorer.SepararEnBloquesEstado(dir1, dir2: word); blockSta[n].add2 := pos2; blockSta[n].blkType := tipBloque; end; -procedure TfraRamExplorer.SepararEnBloquesMapeado(dir1, dir2: word); +procedure TfraRamExplorer.SplitInMappedRAM(dir1, dir2: word); {Explora la memoria RAM, entre las direcciones dir1, y dir2, y almacena los bloques encontrados (de acuerdo a si están mapeados), en el arreglo "blockMap". } @@ -212,11 +217,10 @@ procedure TfraRamExplorer.DibBar(const x1, x2: integer; y1, y2: integer; end; procedure TfraRamExplorer.DrawBlockTxt(const marcoRam: TRect; ancMargenDir: integer; - dirIni, dirFin: integer; lbl: string); -{Dibuja un bloque de un banco de RAM (definida en el área marcoRam), pone etiqueta + dirIni, dirFin, BankSize: word; lbl: string); +{Dibuja un bloque de un banco de RAM (definida en el área "marcoRam"), pone etiqueta descriptiva y pinta con color indicativo. -El bloque a dibujar, empieza en la dirección "dirIni" y termina en "dirFin". -Se asume que todo el alto del banco RAM, tiene $80 bytes} +El bloque a dibujar, empieza en la dirección "dirIni" y termina en "dirFin".} var etiqIni, etiqFin: String; altTxt: integer; //Ancho de margen para las etiquetas de dirección. @@ -224,12 +228,15 @@ procedure TfraRamExplorer.DrawBlockTxt(const marcoRam: TRect; x1, x2: LongInt; altoByte: Double; y1, y2, alto: integer; + BankMask: Word; begin + BankMask := BankSize-1; //Máscara para el banco: $7F (Mid-range) o $1F (Baseline) + x1 := marcoRam.Left; x2 := marcoRam.Right; - altoByte := (marcoRam.Bottom - marcoRam.Top)/$80; - y1 := round(marcoRam.Top + (dirIni and $7F) * altoByte); - y2 := round(marcoRam.Top + ((dirFin and $7F)+1) * altoByte); + altoByte := (marcoRam.Bottom - marcoRam.Top)/BankSize; + y1 := round(marcoRam.Top + (dirIni and BankMask) * altoByte); + y2 := round(marcoRam.Top + ((dirFin and BankMask)+1) * altoByte); alto := y2 - y1; cv := panGraph.Canvas; @@ -250,7 +257,8 @@ procedure TfraRamExplorer.DrawBlockTxt(const marcoRam: TRect; end; end; procedure TfraRamExplorer.DrawBlock(const marcoRam: TRect; - ancMargenDir: integer; dirIni, dirFin: integer); + ancMargenDir: integer; + dirIni, dirFin, BankSize: word); {Similar a DrawBlockTxt(), pero no pone las etiquetas de dirección, ni la etiqueta central.} var @@ -258,18 +266,21 @@ procedure TfraRamExplorer.DrawBlock(const marcoRam: TRect; x1, x2: LongInt; altoByte: Double; y1, y2: integer; + BankMask: Word; begin + BankMask := BankSize-1; //Máscara para el banco: $7F (Mid-range) o $1F (Baseline) + x1 := marcoRam.Left; x2 := marcoRam.Right; - altoByte := (marcoRam.Bottom - marcoRam.Top)/$80; - y1 := round(marcoRam.Top + (dirIni and $7F) * altoByte); - y2 := round(marcoRam.Top + ((dirFin and $7F)+1) * altoByte); + altoByte := (marcoRam.Bottom - marcoRam.Top)/BankSize; + y1 := round(marcoRam.Top + (dirIni and BankMask) * altoByte); + y2 := round(marcoRam.Top + ((dirFin and BankMask)+1) * altoByte); //Dibuja barra de fondo cv := panGraph.Canvas; cv.Rectangle(x1+ancMargenDir, y1, x2, y2+1); //Corrige y2, porque Rectangle, dibuja hasta un pincel antes end; -procedure TfraRamExplorer.DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; +procedure TfraRamExplorer.DrawRAMbank(const marcoRam: TRect; bnk: TPICRAMBank; selected: boolean); {Dibuja el banco de RAM completo, en el área "marcoRam", separando por bloques de acuerdo al campo "state" } @@ -277,38 +288,33 @@ procedure TfraRamExplorer.DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; i, ancMargenDir, j: integer; cv: TCanvas; lbl: String; - tarAdd, tarBnk: Word; + tarAdd, tarBnk, tmp: Word; begin cv := panGraph.Canvas; + //protección + if bnk.AddrStart > high(pic.ram) then exit; + if bnk.AddrEnd > high(pic.ram) then exit; //Calcula el ancho de las etqiuetas ancMargenDir := cv.TextWidth('XXX'); if ancMargenDir>(marcoRam.Right - marcoRam.Left)*0.5 then begin ancMargenDir := 0; end; - //Limpia fondo -// DrawBlock(marcoRam, ancMargenDir, blockSta[i].add1, blockSta[i].add2); //dibuja; - //Dibuja primero los bloques de memoria usadas - SplitInUsedRAM(0+bnk.AddrStart, $7F+bnk.AddrStart); + SplitInUsedRAM(bnk.AddrStart, bnk.AddrEnd); cv.Pen.Color := $80FF80; cv.Brush.Style := bsSolid; for i:=0 to high(blockUse) do begin if blockUse[i].used then begin cv.Brush.Color := $80FF80; - DrawBlock(marcoRam, ancMargenDir, blockUse[i].add1, blockUse[i].add2); //dibuja; + DrawBlock(marcoRam, ancMargenDir, + blockUse[i].add1, blockUse[i].add2, pic.PICBANKSIZE); //dibuja; end; end; //Dibuja zonas de la RAM - //Verifica si está seleccionada - if selected then begin - cv.Pen.Width := 2; - cv.Pen.Color := clBlue; - cv.Frame(marcoRam.Left+ancMargenDir-1, marcoRam.Top-1, marcoRam.Right+2, marcoRam.Bottom+3); - end; cv.Pen.Width := 1; cv.Pen.Color := clBlack; //Separa bloques - SepararEnBloquesEstado(0+bnk.AddrStart, $7F+bnk.AddrStart); + SplitInStateRAM(0+bnk.AddrStart, bnk.AddrEnd); // Dibuja los bloques for i:=0 to high(blockSta) do begin //Crea etiqueta @@ -319,7 +325,7 @@ procedure TfraRamExplorer.DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; lbl := 'SFR'; end; cs_impleGPR: begin - cv.Brush.Color := clWhite; +// cv.Brush.Color := clWhite; cv.Brush.Color := clNone; lbl := 'GPR'; end; @@ -328,12 +334,13 @@ procedure TfraRamExplorer.DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; lbl := 'Uninplemented'; end; end; + tmp := pic.PICBANKSIZE; if blockSta[i].blkType = cs_impleGPR then begin //Divide el bloque, para ver zonas mapeadas - SepararEnBloquesMapeado(blockSta[i].add1, blockSta[i].add2); + SplitInMappedRAM(blockSta[i].add1, blockSta[i].add2); for j:=0 to high(blockMap) do begin if blockMap[j].mapped then begin - //Calcual en donde se está mapeado + //Calcula en donde está mapeado tarAdd := pic.ram[blockMap[j].add1].mappedTo^.addr; tarBnk := tarAdd >> 7; lbl := 'Mapped in bank'+ IntToStr(tarBnk); @@ -343,43 +350,54 @@ procedure TfraRamExplorer.DibBancoRAM(const marcoRam: TRect; bnk: TRAMBank; cv.Brush.Style := bsSolid; end; DrawBlockTxt(marcoRam, ancMargenDir, - blockMap[j].add1, blockMap[j].add2, lbl); //dibuja; + blockMap[j].add1, blockMap[j].add2, tmp, lbl); //dibuja; end; end else begin //Dibuja el bloque de forma normal. cv.Brush.Style := bsSolid; DrawBlockTxt(marcoRam, ancMargenDir, - blockSta[i].add1, blockSta[i].add2, lbl); //dibuja; + blockSta[i].add1, blockSta[i].add2, tmp, lbl); //dibuja; end; end; + //Verifica si está seleccionada + if selected then begin + cv.Pen.Width := 2; + cv.Pen.Color := clBlue; + cv.Frame(marcoRam.Left+ancMargenDir-1, marcoRam.Top-1, marcoRam.Right+2, marcoRam.Bottom+3); + end; end; procedure TfraRamExplorer.panGraphPaint(Sender: TObject); var bordlat, ancPag, x0, i, separ, alto, bordSup, y0: Integer; bnkSel: byte; begin - if pic = nil then exit; //////////////////////// + if pic = nil then exit; //Espaciado entre bancos - if width < 300 then begin - separ := panGraph.width div 24; //espacio lateral - bordlat := panGraph.width div 24; - end else begin - separ := panGraph.width div 18; //espacio lateral - bordlat := panGraph.width div 18; + ancPag := panGraph.width div (cxp.picCore.NumBanks+1); + bordlat := ancPag div 2; + separ := 0; + if ancPag>15 then begin + Dec(ancPag,5); + separ := 5; end; - bordSup := (panGraph.height) div 15; //espacio superior - ancPag := (panGraph.width - bordlat * 2 - separ * (pic.NumBanks-1)) div pic.NumBanks; - alto := (panGraph.height) - 2* bordSup; + + bordSup := panGraph.height div 15; //espacio superior + alto := panGraph.height - 2* bordSup; //debugln('panGraph.width: %d bordLat: %d', [panGraph.width, bordlat]); x0 := bordlat; y0 := bordsup; - bnkSel := pic.STATUS >> 5; - for i:=0 to pic.NumBanks-1 do begin - DibBancoRAM(Rect(x0, y0, x0+ancPag, y0+alto), pic.banks[i], i = bnkSel); + bnkSel := cxp.PICCurBank; + for i:=0 to cxp.PICnBanks-1 do begin + DrawRAMbank(Rect(x0, y0, x0+ancPag+1, y0+alto), cxp.PICBank(i), i = bnkSel); x0 := x0 + ancPag + separ; end; end; +procedure TfraRamExplorer.SetCompiler(cxp0: TCompilerBase); +begin + pic := cxp0.picCore; + cxp := cxp0; +end; constructor TfraRamExplorer.Create(AOwner: TComponent); begin inherited Create(AOwner); diff --git a/Source/FrameRegWatcher.pas b/Source/FrameRegWatcher.pas index 507640ca..cc48a22c 100644 --- a/Source/FrameRegWatcher.pas +++ b/Source/FrameRegWatcher.pas @@ -3,8 +3,8 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Grids, ExtCtrls, StdCtrls, - Buttons, Graphics, LCLType, Menus, Pic16Utils, MisUtils, CibGrillas, Parser, - XpresTypesPIC, XpresElementsPIC; + Buttons, Graphics, LCLType, Menus, LCLProc, Pic16Utils, MisUtils, UtilsGrilla, + CibGrillas, XpresTypesPIC, XpresElementsPIC, CompBase, PicCore, Globales; type { TfraRegWatcher } @@ -24,115 +24,206 @@ TfraRegWatcher = class(TFrame) private UtilGrilla: TGrillaEdicFor; procedure AddWatch(varAddr: word); - function FilaEstaVacia(f: integer): boolean; + function RowIsEmpty(f: integer): boolean; procedure grillaKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure RefrescarPorDireccion(f: integer); - procedure RefrescarPorNombre(f: integer); + procedure CompleteFromAddress(f: integer); + procedure CompleteFromName(f: integer); + procedure RefreshRow(f: integer); procedure UtilGrillaFinEditarCelda(var eveSal: TEvSalida; col, fil: integer; var ValorAnter, ValorNuev: string); procedure UtilGrillaKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); function UtilGrillaLeerColorFondo(col, fil: integer): TColor; + private + TIT_ADD: string; + TIT_NAM: string; + TIT_VAL: string; + private //Índice de columnas + pic: TPicCore; + cxp: TCompilerBase; + //Columnas ocultas + col_adr: word; //Direción física + col_bit: byte; //Posición de bit +// col_set: string[] + //Columnas visibles + COL_ADD: integer; //Columna de dirección + COL_NAM: integer; //Columna de nombre + COL_VAL: integer; //Columna de valor public - pic: TPIC16; - cxp: TCompiler; + procedure SetCompiler(cxp0: TCompilerBase); procedure AddWatch(varName: string); procedure Refrescar; + procedure SetLanguage; constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; end; implementation {$R *.lfm} -const - COLDIR = 1; //Columna de dirección - COLNOM = 2; //Columna de nombre - COLVAL = 3; //Columna de valor { TfraRegWatcher } +procedure TfraRegWatcher.SetLanguage; +begin + {$I ..\language\tra_RegWatcher.pas} + grilla.Cells[COL_ADD, 0] := TIT_ADD; + grilla.Cells[COL_NAM, 0] := TIT_NAM; + grilla.Cells[COL_VAL, 0] := TIT_VAL; +end; procedure TfraRegWatcher.Refrescar; //Refresca el valor de los registros, en base a la dirección de memoria que tengan var f: Integer; begin if not Visible then exit; - if pic = nil then exit; grilla.BeginUpdate; for f := 1 to grilla.RowCount-1 do begin grilla.Objects[1, f] := Tobject(Pointer(0)); //inicia con texto color negro - RefrescarPorDireccion(f); + RefreshRow(f); end; grilla.EndUpdate(); end; -procedure TfraRegWatcher.RefrescarPorDireccion(f: integer); -{Refresca la fila f de la grilla, a partir del campo de dirección } +procedure TfraRegWatcher.CompleteFromAddress(f: integer); +{Refresca la fila f de la grilla, a partir del campo de dirección. +No actualiza el valor.} var addrStr: String; addr: Longint; begin - if pic = nil then exit; - addrStr := grilla.Cells[COLDIR,f]; + addrStr := grilla.Cells[COL_ADD,f]; if trim(addrStr) = '' then begin //No hay dato - grilla.Cells[COLNOM,f] := ''; - grilla.Cells[COLVAL,f] := ''; + grilla.Cells[col_adr,f] := ''; + grilla.Cells[COL_NAM,f] := '#Error'; end else begin //Hay dirección if addrStr[1] = '$' then begin + //Debe ser hexadecimal if not TryStrToInt('$'+copy(addrSTr,2,10), addr) then begin - grilla.Cells[COLNOM,f] := '#error'; - grilla.Cells[COLVAL,f] := '#error'; + grilla.Cells[col_adr,f] := ''; + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_NAM,f] := '#Error'; exit; end; end else begin //Debe ser decimal if not TryStrToInt(addrSTr, addr) then begin - grilla.Cells[COLNOM,f] := '#error'; - grilla.Cells[COLVAL,f] := '#error'; + grilla.Cells[col_adr,f] := ''; + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_NAM,f] := '#Error'; exit; end; end; - if (addr<0) or (addr>$1FF) then begin - grilla.Cells[COLNOM,f] := '#error'; - grilla.Cells[COLVAL,f] := '#error'; + if (addr<0) or (addr>cxp.RAMmax) then begin + grilla.Cells[col_adr,f] := ''; + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_NAM,f] := '#Error'; exit; end; - grilla.Cells[COLNOM,f] := pic.ram[addr].name; - if grilla.Cells[COLVAL,f] <> '$'+IntToHex(pic.ram[addr].value, 2) then begin - //hubo cambio - grilla.Objects[1, f] := Tobject(Pointer(255)); //Pone color -// grilla.Cells[0,f] := 'C'; //indica que hubo cambio - grilla.Cells[COLVAL,f] := '$'+IntToHex(pic.ram[addr].value, 2); - end; + //Escribe dirección y nombre + grilla.Cells[col_adr,f] := '$'+IntToHex(addr, 3); + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_NAM,f] := pic.ram[addr].name; end; end; -procedure TfraRegWatcher.RefrescarPorNombre(f: integer); +procedure TfraRegWatcher.CompleteFromName(f: integer); {Refresca la fila f de la grilla, a partir del campo de Nombre } var nameStr: String; addr, i: integer; + nbit : smallint; begin - if pic = nil then exit; - nameStr := UpCase(grilla.Cells[COLNOM,f]); + nameStr := UpCase(grilla.Cells[COL_NAM,f]); if trim(nameStr) = '' then begin //No hay dato - grilla.Cells[COLDIR,f] := ''; - grilla.Cells[COLVAL,f] := ''; + grilla.Cells[col_adr,f] := ''; + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_ADD,f] := ''; end else begin //Hay nombre addr := -1; - for i:=0 to PIC_MAX_RAM-1 do begin + nbit := -1; + //Busca nombre de bytes + for i:=0 to cxp.RAMmax do begin if UpCase(pic.ram[i].name) = nameStr then begin addr := i; break; end; end; if addr=-1 then begin //No encontrado - grilla.Cells[COLDIR,f] := ''; - grilla.Cells[COLVAL,f] := '#error'; + //No encontró como byte, busca como bit + for i:=0 to cxp.RAMmax do begin + if UpCase(pic.ram[i].bitname[0]) = nameStr then nbit := 0; + if UpCase(pic.ram[i].bitname[1]) = nameStr then nbit := 1; + if UpCase(pic.ram[i].bitname[2]) = nameStr then nbit := 2; + if UpCase(pic.ram[i].bitname[3]) = nameStr then nbit := 3; + if UpCase(pic.ram[i].bitname[4]) = nameStr then nbit := 4; + if UpCase(pic.ram[i].bitname[5]) = nameStr then nbit := 5; + if UpCase(pic.ram[i].bitname[6]) = nameStr then nbit := 6; + if UpCase(pic.ram[i].bitname[7]) = nameStr then nbit := 7; + if nbit <> -1 then begin + addr := i; + break; + end; + end; + end; + if addr=-1 then begin //No encontrado + grilla.Cells[col_adr,f] := ''; + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_ADD,f] := ''; exit; end; - grilla.Cells[COLDIR,f] := '$'+IntToHex(addr,3); - grilla.Cells[COLVAL,f] := '$'+IntToHex(pic.ram[addr].value, 2); + //Encontró dirección + grilla.Cells[col_adr,f] := '$'+IntToHex(addr,3); + if nbit=-1 then begin + //No hay bit + grilla.Cells[col_bit,f] := ''; + grilla.Cells[COL_ADD,f] := '$'+IntToHex(addr,3); + end else begin + //Hay bit + grilla.Cells[col_bit,f] := IntToStr(nbit); + grilla.Cells[COL_ADD,f] := '$'+IntToHex(addr,3)+'.'+IntToStr(nbit); + end; + end; +end; +procedure TfraRegWatcher.RefreshRow(f: integer); +{Refresca el valor de la fila indicada. No toca ni la dirección ni el nombre. +Se usa para cuando se quiere ver la grilla actualizada.} +var + addrStr, newValue, bitStr: String; + addr: Longint; + bit, valByte: byte; +begin + //Lee dirección + addrStr := grilla.Cells[col_adr,f]; + bitStr := grilla.Cells[col_bit,f]; + {No se hacen muchas validaciones porque se espera que el campo "col_adr" + deba contener solo valores predecibles, ya que no son modiifcados por el + usuario.} + if addrStr = '' then begin + //No hay dato + grilla.Cells[COL_VAL, f] := ''; + end else begin + //Debe haber dirección hexadecimal. No se hará comprobación. + addr := StrToInt(addrStr); //Debe incluir '$' + //Escribe valor + if bitStr<>'' then begin + bit := ord(bitStr[1])-ord('0'); //convierte + //Imprime bit + valByte := pic.ram[addr].value; + if (valByte and (1< newValue then begin + //Hubo cambio + grilla.Objects[1, f] := Tobject(Pointer(255)); //Pone color + grilla.Cells[COL_VAL,f] := newValue; + end; + end else begin + //Imprime byte + newValue := '$'+IntToHex(pic.ram[addr].value, 2); + if grilla.Cells[COL_VAL,f] <> newValue then begin + //Hubo cambio + grilla.Objects[1, f] := Tobject(Pointer(255)); //Pone color + grilla.Cells[COL_VAL,f] := newValue; + end; + end; end; end; procedure TfraRegWatcher.UtilGrillaFinEditarCelda(var eveSal: TEvSalida; col, @@ -140,30 +231,30 @@ procedure TfraRegWatcher.UtilGrillaFinEditarCelda(var eveSal: TEvSalida; col, begin if eveSal = evsTecEscape then exit; // MsgBox('Editado: %d, %d', [fil, col]); - if col=COLDIR then begin + if col=COL_ADD then begin //Se editó la dirección grilla.Cells[col, fil] := ValorNuev; //adelanta la escritura - RefrescarPorDireccion(fil); + CompleteFromAddress(fil); end; - if col=COLNOM then begin + if col=COL_NAM then begin //Se editó el nombre grilla.Cells[col, fil] := ValorNuev; //adelanta la escritura - RefrescarPorNombre(fil); + CompleteFromName(fil); end; - + RefreshRow(fil); end; -function TfraRegWatcher.FilaEstaVacia(f: integer): boolean; +function TfraRegWatcher.RowIsEmpty(f: integer): boolean; begin - Result := (grilla.cells[COLDIR, f]='') and - (grilla.cells[COLNOM, f]='') and - (grilla.cells[COLVAL, f]=''); + Result := (grilla.cells[COL_ADD, f]='') and + (grilla.cells[COL_NAM, f]='') and + (grilla.cells[COL_VAL, f]=''); end; procedure TfraRegWatcher.grillaKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_UP) and //Se presiona flecha arriba (grilla.Row = grilla.RowCount-2) and //Y pasó a la penúltima fila - (FilaEstaVacia(grilla.RowCount-1)) //y la que sigue está vacía + (RowIsEmpty(grilla.RowCount-1)) //y la que sigue está vacía then begin grilla.RowCount := grilla.RowCount -1; // MsgBox('asdsad'); @@ -174,7 +265,7 @@ procedure TfraRegWatcher.UtilGrillaKeyDown(Sender: TObject; var Key: Word; begin if (Key = VK_DOWN) and //Se presiona flecha abajo (grilla.Row = grilla.RowCount-1) and //Y es la última fila - (not FilaEstaVacia(grilla.Row)) + (not RowIsEmpty(grilla.Row)) then begin grilla.RowCount := grilla.RowCount + 1; //agrega fila end; @@ -183,19 +274,26 @@ function TfraRegWatcher.UtilGrillaLeerColorFondo(col, fil: integer): TColor; begin Result := clWhite; end; + +procedure TfraRegWatcher.SetCompiler(cxp0: TCompilerBase); +begin + cxp := cxp0; + pic := cxp0.picCore; +end; + procedure TfraRegWatcher.AddWatch(varName: string); {Agrega una variable para vigilar} var f: Integer; begin f := grilla.RowCount-1; //última fila - if not FilaEstaVacia(f) then begin + if not RowIsEmpty(f) then begin //Hay que agregar una fila grilla.RowCount := grilla.RowCount + 1; f := grilla.RowCount-1; end; - grilla.Cells[2,f] := varName; - RefrescarPorNombre(f); + grilla.Cells[COL_NAM,f] := varName; + CompleteFromName(f); //Actualiza dirección y valor end; procedure TfraRegWatcher.AddWatch(varAddr: word); {Agrega una variable para vigilar, por su dirección} @@ -203,13 +301,13 @@ procedure TfraRegWatcher.AddWatch(varAddr: word); f: Integer; begin f := grilla.RowCount-1; //última fila - if not FilaEstaVacia(f) then begin + if not RowIsEmpty(f) then begin //Hay que agregar una fila grilla.RowCount := grilla.RowCount + 1; f := grilla.RowCount-1; end; - grilla.Cells[1,f] := '$'+IntToHex(varAddr, 3); - RefrescarPorDireccion(f); + grilla.Cells[COL_ADD, f] := '$'+IntToHex(varAddr, 3); + CompleteFromAddress(f); end; procedure TfraRegWatcher.mnAddVarsClick(Sender: TObject); {Agrega todas las variables usdas, del programa al inspector.} @@ -220,7 +318,7 @@ procedure TfraRegWatcher.mnAddVarsClick(Sender: TObject); for v in cxp.TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. if v.nCalled = 0 then continue; if v.typ.IsBitSize then begin - + AddWatch(v.name); end else if v.typ.IsByteSize then begin AddWatch(v.name); end else if v.typ.IsWordSize then begin @@ -236,7 +334,7 @@ procedure TfraRegWatcher.mnAddVarsClick(Sender: TObject); //Agrega primer byte AddWatch(v.name); //agrega bytes siguientes - maxBytes := v.typ.arrSize * v.typ.refType.size-1; + maxBytes := v.typ.nItems * v.typ.itmType.size-1; //if maxBytes > 10 then for i:=1 to maxBytes do begin AddWatch(v.adrByte0.addr + i); @@ -248,15 +346,17 @@ procedure TfraRegWatcher.mnAddVarsClick(Sender: TObject); end; end; + Refrescar; end; procedure TfraRegWatcher.mnAddRTClick(Sender: TObject); +{Agrega los registros de trabajo} var reg: TPicRegister; nam: String; begin for reg in cxp.ProplistRegAux do begin if not reg.assigned then continue; //puede haber registros de trabajo no asignados - nam := pic.NameRAM(reg.offs, reg.bank); //debería tener nombre + nam := pic.ram[reg.addr].name; //debería tener nombre AddWatch(nam); end; // for rbit in cxp.ProplistRegAuxBit do begin @@ -264,6 +364,7 @@ procedure TfraRegWatcher.mnAddRTClick(Sender: TObject); // adStr := '0x' + IntToHex(rbit.AbsAdrr, 3); // lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); // end; + Refrescar; end; procedure TfraRegWatcher.mnClearAllClick(Sender: TObject); begin @@ -272,19 +373,31 @@ procedure TfraRegWatcher.mnClearAllClick(Sender: TObject); end; constructor TfraRegWatcher.Create(AOwner: TComponent); +var + tmp: TugGrillaCol; begin inherited Create(AOwner); //grilla.Options := grilla.Options + [goEditing, goColSizing]; UtilGrilla := TGrillaEdicFor.Create(grilla); UtilGrilla.IniEncab; - UtilGrilla.AgrEncab('' , 10).visible := false; //para gaurdar cambios - UtilGrilla.AgrEncab('Address' , 30); //Con 40 pixeles de ancho - UtilGrilla.AgrEncab('Name' , 40); //Con 60 pixeles de ancho - UtilGrilla.AgrEncab('Value' , 40, -1, taRightJustify); //Justificado a la derecha + //Columnas ocultas. En estas columnas se guardan lso campos qeu se usarán para refrescar toda la fila. + //UtilGrilla.AgrEncab('' , 10).visible := false; + tmp := UtilGrilla.AgrEncab('Add' , 35); + tmp.visible := false; + col_adr := tmp.idx; + tmp := UtilGrilla.AgrEncab('Bit' , 35); + tmp.visible := false; + col_bit := tmp.idx; + //Faltaría una o más columbas para el formato + //Columnas visibles + COL_ADD := UtilGrilla.AgrEncab('Address' , 40).idx; + COL_NAM := UtilGrilla.AgrEncab('Name' , 60).idx; + COL_VAL := UtilGrilla.AgrEncab('Value' , 50, -1, taRightJustify).idx; UtilGrilla.FinEncab; UtilGrilla.OnFinEditarCelda := @UtilGrillaFinEditarCelda; Utilgrilla.OnLeerColorFondo := @UtilGrillaLeerColorFondo; Utilgrilla.OnKeyDown := @UtilGrillaKeyDown; + grilla.FixedCols := 2; grilla.OnKeyUp := @grillaKeyUp; grilla.RowCount := 2; diff --git a/Source/FrameRomExplorer.lfm b/Source/FrameRomExplorer.lfm index 75ec0965..2f8d88b1 100644 --- a/Source/FrameRomExplorer.lfm +++ b/Source/FrameRomExplorer.lfm @@ -20,4 +20,12 @@ object fraRomExplorer: TfraRomExplorer ParentColor = False Transparent = False end + object panGraph: TPanel + Left = 0 + Height = 308 + Top = 17 + Width = 438 + Align = alClient + TabOrder = 0 + end end diff --git a/Source/FrameRomExplorer.pas b/Source/FrameRomExplorer.pas index 0028691e..95b52812 100644 --- a/Source/FrameRomExplorer.pas +++ b/Source/FrameRomExplorer.pas @@ -3,24 +3,39 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, StdCtrls, LCLProc, - LCLIntf, LCLType, Pic16Utils; + LCLIntf, LCLType, ExtCtrls, PicCore, CompBase; type + //Define a un bloque de RAM, que servirá para dibujo + {Los bloques de RAM se usan para separar la memoria en bloques de acuerdo a + diversos criterios} + TRomBlock = record + add1, add2 : word; //Direcciones de memoria + implemented: boolean; //Indica si está implementado + used : boolean; //Indica si el bloque está usado + end; { TfraRomExplorer } TfraRomExplorer = class(TFrame) Label1: TLabel; + panGraph: TPanel; private - procedure DibPaginaROM(x, y, ancho, alto: integer; pag: TFlashPage; - dirIni: integer); - procedure DibBar(const x1, x2: integer; y, alto: integer; dirIni, - dirFin: integer; lbl: string); - procedure DibBloque(const x1, x2: integer; y, alto: integer; dirIni, - dirFin: integer; used: boolean); - procedure Frame1Paint(Sender: TObject); - procedure TextCEnt(x, y: integer; txt: string); + cxp: TCompilerBase; + pic: TPicCore; + blockUse: array of TRomBlock; + blockSta: array of TRomBlock; + procedure DrawBlock(const marcoRam: TRect; ancMargenDir: integer; dirIni, + dirFin, PageSize: word); + procedure DrawBlockTxt(const marcoRam: TRect; ancMargenDir: integer; + dirIni, dirFin, PageSize: word; lbl: string); + procedure DrawROMpage(const marcoRam: TRect; pag: TPICFlashPage; + selected: boolean); + procedure DibBar(const x1, x2: integer; y1, y2: integer; lbl: string); + procedure panGraphPaint(Sender: TObject); + procedure SplitInStateROM(dir1, dir2: word); + procedure SplitInUsedROM(dir1, dir2: word); public - pic: TPIC16; + procedure SetCompiler(cxp0: TCompilerBase); constructor Create(AOwner: TComponent) ; override; destructor Destroy; override; end; @@ -28,167 +43,297 @@ TfraRomExplorer = class(TFrame) implementation {$R *.lfm} { TfraRamExplorer } -procedure TfraRomExplorer.TextCent(x, y: integer; txt: string); -{Excribe texto centrado} +procedure TfraRomExplorer.SplitInUsedROM(dir1, dir2: word); +{Explora la memoria ROM, entre las direcciones dir1, y dir2, y almacena los bloques +encontrados (de acuerdo a si están usados o no), en el arreglo "blockUse". +} +var + n: Integer; + i, pos1, pos2: Word; + used: boolean; +begin + setlength(blockUse, 1); //abre un bloque + n := high(blockUse); //índice actual + for i := dir1 to dir2 do begin + if i = dir1 then begin + //Define el bloque inicial + used := pic.flash[i].used; + pos1 := i; + pos2 := i; + end else begin + if pic.flash[i].used = used then begin + //Es del bloque anterior + pos2 := i; //actualiza límite + end else begin + //Es otro tipo de bloque. + //Cierra el anterior + blockUse[n].add1 := pos1; + blockUse[n].add2 := pos2; + blockUse[n].used:= used; + n := n + 1; + setlength(blockUse, n+1); + //Define nuevo blqoue + used := pic.flash[i].used; + pos1 := i; + pos2 := i; + end; + end; + end; + //Cierra el último bloque + blockUse[n].add1 := pos1; + blockUse[n].add2 := pos2; + blockUse[n].used:= used; +end; +procedure TfraRomExplorer.SplitInStateROM(dir1, dir2: word); +{Explora la memoria ROM, entre las direcciones dir1, y dir2, y almacena los bloques +encontrados (de acuerdo a si están implementados o no), en el arreglo "blockSta". +} var - ancTxt, altTxt: Integer; + MaxAddrFlash: Word; begin - altTxt := Canvas.TextHeight(txt); - ancTxt := Canvas.TextWidth(txt); - Canvas.Brush.Color := clWhite; - Canvas.TextOut(x - ancTxt div 2, y - altTxt div 2, txt); + MaxAddrFlash := pic.MaxFlash - 1; //Dirección final implementada + {La memoria Flash solo puede estar implementada o no. Se asume que toda la memoria + por debajo de MaxAddrFlash, está implementada.} + if MaxAddrFlash=0 then begin + //No se aplica MaxFlash. + setlength(blockSta, 1); //abre un bloque + blockSta[0].add1 := dir1; + blockSta[0].add2 := dir2; + blockSta[0].implemented:= true; + end else if MaxAddrFlash >= dir2 then begin + //Estamos dentro del rango de Flash implementada + setlength(blockSta, 1); //abre un bloque + blockSta[0].add1 := dir1; + blockSta[0].add2 := dir2; + blockSta[0].implemented:= true; + end else if MaxAddrFlash >= dir1 then begin + //Esta página contiene parte de la memoria implementada + setlength(blockSta, 2); //abre dos bloques + blockSta[0].add1 := dir1; + blockSta[0].add2 := MaxAddrFlash; + blockSta[0].implemented:= true; + //Parte no implementada + blockSta[1].add1 := MaxAddrFlash+1; + blockSta[1].add2 := dir2; + blockSta[1].implemented:= false; + end else begin + //Toda la página está no implementada + setlength(blockSta, 1); //abre un bloque + blockSta[0].add1 := dir1; + blockSta[0].add2 := dir2; + blockSta[0].implemented:= false; + end; end; -procedure TfraRomExplorer.DibBar(const x1, x2: integer; y, alto: integer; - dirIni, dirFin: integer; lbl: string); +procedure TfraRomExplorer.DibBar(const x1, x2: integer; y1, y2: integer; + lbl: string); //Dibuja una barra, en la posición: x1, x2, y, con altura "alto". var - altTxt, ancho, ancTxt, xt, yt: Integer; + altTxt, ancho, ancTxt, xt, yt, alto: Integer; ARect: TRect; TextStyle: TTextStyle; + cv: TCanvas; begin - Canvas.Rectangle(x1, y, x2, y + alto); + alto := y2 - y1; + cv := panGraph.Canvas; + if (cv.Brush.Color = clNone) and (cv.Brush.Style = bsSolid) then begin + //Sin fondo + cv.Frame(x1, y1, x2, y2+1); //Corrige y2, porque Rectangle, dibuja hasta un pincel antes + end else begin + //Con fondo + cv.Rectangle(x1, y1, x2, y2+1); //Corrige y2, porque Rectangle, dibuja hasta un pincel antes + end; //////// Escribe etiqueta centrada ///////////// ancho := x2 - x1; - altTxt := Canvas.TextHeight(lbl); - ancTxt := Canvas.TextWidth(lbl); + altTxt := cv.TextHeight(lbl); + ancTxt := cv.TextWidth(lbl); ARect.Left := x1; ARect.Right := x2; - ARect.Top := y; - ARect.Bottom := y + alto; + ARect.Top := y1; + ARect.Bottom := y2; if ancTxt> ancho then xt := x1 //no centra else xt := x1 + ancho div 2 - ancTxt div 2; //centra - yt := y + alto div 2 - altTxt div 2; -// Canvas.Pen.Color := clred; - TextStyle := Canvas.TextStyle; + yt := y1 + alto div 2 - altTxt div 2; +// cv.Pen.Color := clred; + TextStyle := cv.TextStyle; TextStyle.EndEllipsis := true; - Canvas.Brush.Style := bsClear; //texto sin fondo - Canvas.TextRect(Arect, xt, yt, lbl, TextStyle); - + TextStyle.SingleLine := false; + cv.Brush.Style := bsClear; //texto sin fondo + cv.TextRect(Arect, xt, yt, lbl, TextStyle); end; -procedure TfraRomExplorer.DibBloque(const x1, x2: integer; y, alto: integer; - dirIni, dirFin: integer; - used: boolean); -{Dibuja un bloque, de memoria RAM, pone etqiueta descriptiva y pinta con color -indicativo.} +procedure TfraRomExplorer.DrawBlockTxt(const marcoRam: TRect; + ancMargenDir: integer; + dirIni, dirFin, PageSize: word; lbl: string); +{Dibuja un bloque de un banco de RAM (definida en el área "marcoRam"), pone etiqueta +descriptiva y pinta con color indicativo. +El bloque a dibujar, empieza en la dirección "dirIni" y termina en "dirFin".} var - lbl, etiqIni, etiqFin: String; - ancMargenDir, + etiqIni, etiqFin: String; altTxt: integer; //Ancho de margen para las etiquetas de dirección. + cv: TCanvas; + x1, x2: LongInt; + altoByte: Double; + y1, y2, alto: integer; + BankMask: Word; begin - case used of - true: begin - Canvas.Brush.Color := clGray; - lbl := 'Used'; - end; - false: begin - Canvas.Brush.Color := clWhite; - lbl := 'Free'; + BankMask := PageSize-1; //Máscara para el banco: $7F (Mid-range) o $1F (Baseline) + + x1 := marcoRam.Left; + x2 := marcoRam.Right; + altoByte := (marcoRam.Bottom - marcoRam.Top)/PageSize; + y1 := round(marcoRam.Top + (dirIni and BankMask) * altoByte); + y2 := round(marcoRam.Top + ((dirFin and BankMask)+1) * altoByte); + alto := y2 - y1; + + cv := panGraph.Canvas; + //Convierte direcciones a texto y1 + etiqIni := IntToHex(dirIni, 3); + etiqFin := IntToHex(dirFin, 3); + //Dibuja barra de fondo + DibBar(x1+ancMargenDir, x2, y1, y2, lbl); + //Dibuja etiquetas de dirección + if ancMargenDir <> 0 then begin + altTxt := cv.TextHeight(etiqFin); + if (alto>0.8*altTxt) then begin + cv.TextOut(x1, y1, etiqIni); + end; + if (alto>1.6*altTxt) then begin + cv.TextOut(x1, y2-altTxt, etiqFin); + end; end; +end; +procedure TfraRomExplorer.DrawBlock(const marcoRam: TRect; + ancMargenDir: integer; + dirIni, dirFin, PageSize: word); +{Similar a DrawBlockTxt(), pero no pone las etiquetas de dirección, ni la etiqueta +central.} +var + cv: TCanvas; + x1, x2: LongInt; + altoByte: Double; + y1, y2: integer; + BankMask: Word; +begin + BankMask := PageSize-1; //Máscara para el banco: $7F (Mid-range) o $1F (Baseline) + + x1 := marcoRam.Left; + x2 := marcoRam.Right; + altoByte := (marcoRam.Bottom - marcoRam.Top)/PageSize; + y1 := round(marcoRam.Top + (dirIni and BankMask) * altoByte); + y2 := round(marcoRam.Top + ((dirFin and BankMask)+1) * altoByte); + //Dibuja barra de fondo + cv := panGraph.Canvas; + cv.Rectangle(x1+ancMargenDir, + y1, x2, y2+1); //Corrige y2, porque Rectangle, dibuja hasta un pincel antes +end; +procedure TfraRomExplorer.DrawROMpage(const marcoRam: TRect; pag: TPICFlashPage; + selected: boolean); +{Dibuja la página de ROM completa, en el área "marcoRam", separando por bloques +de acuerdo al campo "state" } +var + cv: TCanvas; + ancMargenDir, i: Integer; + lbl: String; + tmp: Word; +begin + cv := panGraph.Canvas; + //Calcula el ancho de las etqiuetas + ancMargenDir := cv.TextWidth('XXX'); + if ancMargenDir>(marcoRam.Right - marcoRam.Left)*0.5 then begin + ancMargenDir := 0; end; - //Convierte direcciones a texto y calcula ancho de margen de direcciones - ancMargenDir := 0; //Por defecto - if (alto>20) and (dirIni<>-1) then begin - etiqIni := '$'+IntToHex(dirIni, 3); + //Limpia fondo +// DrawBlock(marcoRam, ancMargenDir, blockSta[i].add1, blockSta[i].add2); //dibuja; + + //Dibuja primero los bloques de memoria usadas + SplitInUsedROM(pag.AddrStart, pag.AddrEnd); + cv.Pen.Color := $80FF80; + cv.Brush.Style := bsSolid; + for i:=0 to high(blockUse) do begin + if blockUse[i].used then begin + cv.Brush.Color := $80FF80; + DrawBlock(marcoRam, ancMargenDir, + blockUse[i].add1, blockUse[i].add2, pic.PICPAGESIZE); //dibuja; + end; end; - if (alto>20) and (dirFin<>-1) then begin - etiqFin := '$'+IntToHex(dirFin, 3); - altTxt := Canvas.TextHeight(etiqFin); + //Verifica si está seleccionada + if selected then begin + cv.Pen.Width := 2; + cv.Pen.Color := clBlue; + cv.Frame(marcoRam.Left+ancMargenDir-1, marcoRam.Top-1, marcoRam.Right+2, marcoRam.Bottom+3); end; - ancMargenDir := canvas.TextWidth(etiqIni); - //Dibuja barra de fondo y direcciones - if ancMargenDir>(x2-x1)*0.5 then begin - //El ancho es muy pequeño para dibujar direcciones - DibBar(x1, x2, y, alto, dirIni, dirFin, lbl); - end else begin - DibBar(x1+ancMargenDir, x2, y, alto, dirIni, dirFin, lbl); - //Dibuja etiquetas de dirección - Canvas.TextOut(x1, y+1, etiqIni); - Canvas.TextOut(x1, y+alto-altTxt-1, etiqFin); + cv.Pen.Width := 1; + cv.Pen.Color := clBlack; + //Separa bloques + SplitInStateROM(0+pag.AddrStart, pag.AddrEnd); + // Dibuja los bloques + for i:=0 to high(blockSta) do begin + //Crea etiqueta + if blockSta[i]. implemented then begin +// cv.Brush.Color := clWhite; + cv.Brush.Color := clNone; //Transparente + lbl := 'ROM'; + end else begin + cv.Brush.Color := clGray; + lbl := 'Uninplemented'; + end; + tmp := pic.PICPAGESIZE; + if blockSta[i].implemented then begin + //Bloque implementado + DrawBlockTxt(marcoRam, ancMargenDir, + blockSta[i].add1, blockSta[i].add2, tmp, lbl); //dibuja; + end else begin + //Bloque no implementado + cv.Brush.Style := bsSolid; + DrawBlockTxt(marcoRam, ancMargenDir, + blockSta[i].add1, blockSta[i].add2, tmp, lbl); //dibuja; + end; end; -end; -procedure TfraRomExplorer.DibPaginaROM(x, y, ancho, alto: integer; pag: TFlashPage; - dirIni: integer); -begin - //Dibuja fondo - Canvas.Brush.Color := clWhite; -// Canvas.Rectangle(x, y, x + ancho, y + alto); - DibBloque(x, x+ancho, y, alto, 0, 2047, false); //dibuja -// for i := 0 to $7F do begin -// if i = 0 then begin -// //Define el bloque inicial -// tipBloque := pag.ramPtr^[i + pag.AddrStart].state; -// //tipBloque := pag.mem[i]^.state; -// pos1 := i; -// pos2 := i; -// end else begin -// if pag.ramPtr^[i + pag.AddrStart].state = tipBloque then begin -// //if pag.mem[i]^.state = tipBloque then begin -// //Es del bloque anterior -// pos2 := i; //actualiza límite -// end else begin -// //Es otro tipo de bloque. -// //Cierra el anterior -// numBytes := pos2 - pos1 + 1; -// altBloq := round((numBytes/$80) * alto)+1; //Suma 1, para corregir el hecho de subir 1 en "y" -// DibBloque(x, x+ancho, y, altBloq, pos1, -1, tipBloque); //dibuja -// y := y + altBloq-1; //nueva posición de inicio. Sube 1 para ni tener dos líneas juntas -// //Define nuevo blqoue -// //tipBloque := pag.mem[i]^.state; -// tipBloque := pag.ramPtr^[i + pag.AddrStart].state;; -// pos1 := i; -// pos2 := i; -// end; -// end; -// end; -// //Cierra el último bloque -// numBytes := pos2 - pos1 + 1; -// altBloq := round((numBytes/$80) * alto); -// DibBloque(x, x + ancho, y, altBloq, pos1, -1, tipBloque); //dibuja end; -procedure TfraRomExplorer.Frame1Paint(Sender: TObject); +procedure TfraRomExplorer.panGraphPaint(Sender: TObject); var - bordlat, ancPag, x0, i, separ, altur, bordSup, y0: Integer; + bordlat, ancPag, x0, i, separ, alto, bordSup, y0: Integer; begin - if pic = nil then exit; - //////////////////////// //Espaciado entre bancos - if width < 200 then begin + if panGraph.width < 200 then begin //Ancho reducido - separ := width div 24; //espacio lateral - bordlat := width div 24; + separ := panGraph.width div 24; //espacio lateral + bordlat := panGraph.width div 24; end else begin //Ancho grande - if (pic.NumPages=1) then begin + if (cxp.PICnPages=1) then begin //Es una sola página. Puede quedar mal proporcionada - separ := width div 4; //espacio lateral - bordlat := width div 4; + separ := panGraph.width div 4; //espacio lateral + bordlat := panGraph.width div 4; end else begin - separ := width div 18; //espacio lateral - bordlat := width div 18; + separ := panGraph.width div 18; //espacio lateral + bordlat := panGraph.width div 18; end; end; - bordSup := (height-label1.Height) div 15; //espacio superior - ancPag := (width - bordlat * 2 - separ * (pic.NumPages-1)) div pic.NumPages; - altur := (height-label1.Height) - 2* bordSup; -//debugln('width: %d bordLat: %d', [width, bordlat]); + bordSup := panGraph.height div 15; //espacio superior + ancPag := (panGraph.width - bordlat * 2 - separ * (cxp.PICnPages-1)) div cxp.PICnPages; + alto := panGraph.height - 2* bordSup; +//debugln('panGraph.width: %d bordLat: %d', [panGraph.width, bordlat]); x0 := bordlat; - y0 := bordsup + label1.Height; - for i:=0 to pic.NumPages-1 do begin - DibPaginaROM(x0, y0, ancPag, altur, pic.pages[i], i * $80); + y0 := bordsup; + for i:=0 to cxp.PICnPages-1 do begin + DrawROMpage(Rect(x0, y0, x0+ancPag, y0+alto), cxp.PICPage(i), false); x0 := x0 + ancPag + separ; end; - end; - +procedure TfraRomExplorer.SetCompiler(cxp0: TCompilerBase); +begin + cxp := cxp0; + pic := cxp0.picCore; +end; constructor TfraRomExplorer.Create(AOwner: TComponent); begin inherited Create(AOwner); - self.OnPaint := @Frame1Paint; + //self.OnPaint := @Frame1Paint; + panGraph.OnPaint := @panGraphPaint; end; - destructor TfraRomExplorer.Destroy; begin diff --git a/Source/FrameSyntaxTree.pas b/Source/FrameSyntaxTree.pas index 0a052b95..7faeed24 100644 --- a/Source/FrameSyntaxTree.pas +++ b/Source/FrameSyntaxTree.pas @@ -4,7 +4,7 @@ interface uses Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, StdCtrls, ComCtrls, Menus, ActnList, ExtCtrls, ComboEx, LCLProc, Graphics, - XpresElementsPIC, Globales, FormElemProperty, XpresParserPIC, FormConfig, + XpresElementsPIC, Globales, FormElemProperty, CompBase, FormConfig, FrameArcExplor, MisUtils; type { TfraSyntaxTree } @@ -73,6 +73,8 @@ TfraSyntaxTree = class(TFrame) OnSelecFileExplorer: procedure of object; //Se requiere información del archivo actual // OnReqCurFile: procedure(var filname: string) of object; + function HasFocus: boolean; + function FileSelected: string; property BackColor: TColor read FBackColor write SetBackColor; property TextColor: TColor read FTextColor write SetTextColor; procedure LocateFile(filname: string); @@ -96,6 +98,7 @@ implementation procedure TfraSyntaxTree.SetLanguage; begin {$I ..\language\tra_FrameSyntaxTree.pas} + frmArcExplor1.SetLanguage; Refresh; end; procedure TfraSyntaxTree.frmArcExplor1DoubleClickFile(nod: TExplorNode); @@ -120,8 +123,9 @@ procedure TfraSyntaxTree.Init(syntaxTree0: TXpTreeElements); frmArcExplor1.Filter.Visible := false; frmArcExplor1.InternalPopupFile := true; frmArcExplor1.InternalPopupFolder := true; - frmArcExplor1.OnDoubleClickFile := @frmArcExplor1DoubleClickFile; - frmArcExplor1.OnMenuOpenFile := @frmArcExplor1MenuOpenFile; + frmArcExplor1.OnDoubleClickFile:= @frmArcExplor1DoubleClickFile; + frmArcExplor1.OnKeyEnterOnFile := @frmArcExplor1DoubleClickFile; + frmArcExplor1.OnMenuOpenFile := @frmArcExplor1MenuOpenFile; end; function TfraSyntaxTree.AddNodeTo(nodParent: TTreeNode; elem: TxpElement): TTreeNode; {Agrega un elemento a un noco.} @@ -276,6 +280,7 @@ procedure TfraSyntaxTree.Refresh; nodMain := TreeView1.Items.AddChild(nil, TIT_MAIN); nodMain.ImageIndex := 1; nodMain.SelectedIndex := 1; + nodMain.Data := syntaxTree.main; //Elemento raiz RefreshByGroups(nodMain, syntaxTree.main); TreeView1.Items.EndUpdate; end; @@ -288,6 +293,7 @@ procedure TfraSyntaxTree.Refresh; nodMain := TreeView1.Items.AddChild(nil, TIT_MAIN); nodMain.ImageIndex := 1; nodMain.SelectedIndex := 1; + nodMain.Data := syntaxTree.main; //Elemento raiz RefreshByDeclar(nodMain, syntaxTree.main); TreeView1.Items.EndUpdate; end; @@ -367,7 +373,31 @@ procedure TfraSyntaxTree.TreeView1AdvancedCustomDrawItem( DefaultDraw := true; //Para que siga ejecutando la rutina de dibujo end; end; - +function TfraSyntaxTree.HasFocus: boolean; +{Indica si el frame tiene el enfoque.} +begin + if frmArcExplor1.Visible then begin + //Modo de explorador de archivo + Result := frmArcExplor1.TreeView1.Focused; + end else begin + //Modo normal + Result := TreeView1.Focused; + end; +end; +function TfraSyntaxTree.FileSelected: string; +{Devuelve el archivo seleccionado. Solo es válido cuando está en modo "vmFileExp" +} +begin + if Config.viewMode = vmFileExp then begin + if frmArcExplor1.SelectedFile = nil then begin + Result := ''; + end else begin + Result := frmArcExplor1.SelectedFile.Path; + end; + end else begin + Result := ''; + end; +end; procedure TfraSyntaxTree.LocateFile(filname: string); begin //Ubica el archivo actual en el explorador de archivo diff --git a/Source/GenCod.inc b/Source/GenCod.inc new file mode 100644 index 00000000..f66f29fd --- /dev/null +++ b/Source/GenCod.inc @@ -0,0 +1,2002 @@ +////////////operaciones con Bit +procedure TGenCod.ROB_bit_asig_bit(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante + {Actualmente no existen constantes de tipo "Bit", ya que el número menor que se + reconoce es de typo byte. Por eso se define ROB_bit_asig_byte(). } + if p2^.valBool then begin + kBSF(bit1); + end else begin + kBCF(bit1); + end; + end; + stVariab: begin + SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante + if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin + //Es asignación de la misma variable. + if p2^.Inverted then begin //Es a := not a + //verifica error. + kMOVLW(p1^.rVar.BitMask); //carga máscara + kXORWF(byte1, toF); //Se usa como byte + end else begin //Es a := a + PutTopComm('No code, by optimizing.'); + end; + end else begin + //Es asignación de otra variable + if p1^.rVar.bank = p2^.rVar.bank then begin //Están en el mismo banco + //No se usa el registro W + kBCF(bit1); + if p2^.Inverted then kBTFSS(bit2) else kBTFSC(bit2); + kBSF(bit1); + //No hay problema con el banco final, porque es el mismo + end else begin //Están en bancos diferentes + //No se usa el registro W + kBCF(bit1); + if p2^.Inverted then kBTFSS(bit2) else kBTFSC(bit2); + kBSF(bit1); + CurrBank := 255; //No se puede predecir el banco + end; + end; + end; + stExpres: begin //ya está en STATUS.Z + SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante + if p2^.Inverted then begin //está invertido + //No se usa el registro W + kBCF(bit1); + kBTFSS(Z); + kBSF(bit1); + end else begin //caso normal + //No se usa el registro W + kBCF(bit1); + kBTFSC(Z); + kBSF(bit1); + end; + end; + else + genError('Cannot Compile: "%s"', [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_bit_asig_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante + {Esta es la única opción válida, pero solo para los valores 0 y 1} + if p2^.valInt = 0 then begin + //No se usa el registro W + kBCF(bit1); + end else if p2^.valInt = 1 then begin + //No se usa el registro W + kBSF(bit1); + end else begin + GenError('Invalid value for a bit variable.'); exit; + end; + end; + stVariab, + stExpres: begin //ya está en STATUS.Z + GenError('Cannot asign: (bit) := (byte).'); exit; + end; + else + genError('Cannot Compile: "%s"', [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_bit_and_bit(Opt: TxpOperation; SetRes: boolean); +begin + case stoOperation of + stConst_Const: begin //AND de dos constantes. Caso especial + SetROBResultConst_bit(p1^.valBool and p2^.valBool); + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if p1^.valBool then begin //p1 = 1 + //No usa ningún registro + //Optimiza devolviendo la misma variable + SetROBResultVariab(p2^.rVar, p2^.Inverted); //mantiene la lógica + end else begin //p1 = 0 + //No usa ningún registro + //Optimiza devolviendo constante = 0 + SetROBResultConst_bit(false); + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if p1^.valBool then begin //p1 = 1 + //No usa ningún registro + //Optimiza devolviendo la misma expresión en Z + SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica + end else begin //p1 = 0 + //No usa ningún registro + //Optimiza devolviendo constante = 0 + SetROBResultConst_bit(false); + Z.used := false; //libera el bit Z, porque ya no importa la expresión + end; + end; + stVariab_Const: begin + if p2^.valBool then begin //p2 = 1 + //No usa ningún registro + //Optimiza devolviendo la misma variable + SetROBResultVariab(p1^.rVar, p1^.Inverted); //mantiene la lógica + end else begin //p2 = 0 + //No usa ningún registro + //Optimiza devolviendo constante = 0 + SetROBResultConst_bit(false); + end; + end; + stVariab_Variab:begin + if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin + //Es la misma variable: a AND a + //Optimiza devolviendo la misma variable + if p1^.Inverted and p2^.Inverted then begin + //not a and not a = not a + SetROBResultVariab(p1^.rVar, p1^.Inverted); + end else if p1^.Inverted then begin + //not a and a = 0 + SetROBResultConst_bit(false); + end else if p2^.Inverted then begin + //a and not a = 0 + SetROBResultConst_bit(false); + end else begin //Caso normal + //a and a = a + SetROBResultVariab(p1^.rVar, p1^.Inverted); + end; + end else begin + if p1^.Inverted and p2^.Inverted then begin + //Por La ley de Morgan, se convierten em OR + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_or_bit(Opt, SetRes); //procesa como OR + res.Invert; //y niega todo + exit; + end else if p1^.Inverted then begin + //Este caso es lo inverso, no vale la pena implementarlo de nuevo + ExchangeP1_P2; + ROB_bit_and_bit(Opt, SetRes); //procesa como OR + exit; + end else if p2^.Inverted then begin + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Mueve p2 a Z + kMOVLW(p2^.rVar.BitMask); + kANDWF(byte2, toW); //Z aparece normal + //Aplica un AND entre Z y p1, + kBTFSS(bit1); //Si es 1, deja tal cual + kBCF(Z); //Si es 0, devuelve cero + end else begin //Caso normal + SetROBResultExpres_bit(Opt, true); //Fija resultado, con lógica invertida + //Mueve p2 a Z + kMOVLW(p2^.rVar.BitMask); + kANDWF(byte2, toW); //Z está invertido + //Aplica un AND entre Z' y p1. Trabajamos con lógica invertida, por optimización + kBTFSS(bit1); //Si es 1, deja tal cual (pero sigue con lógica invertida) + kBSF(Z); //Si es 0, devuelve cero (1 porque debe quedar con lógica invertida) + end; + end; + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + if p1^.Inverted and p2^.Inverted then begin + //Por La ley de Morgan, se convierten em OR + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_or_bit(Opt, SetRes); //procesa como OR + exit; + end else if p1^.Inverted then begin //lógica invertida en p1 + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un AND entre p1' y Z. + kBTFSC(bit1); //Si es 0, deja tal cual + kBCF(Z); //Si es 1, devuelve cero + end else if p2^.Inverted then begin //lógica invertida en Z + SetROBResultExpres_bit(Opt, true); //Deja la lógica invertida por optimización + //Aplica un AND entre p1 y Z'. + kBTFSS(bit1); //Si es 1, deja tal cual + kBSF(Z); //Si es 0, devuelve cero (1, porque es lógica es invertida) + end else begin //lógica normal + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un AND entre p1 y Z. + kBTFSS(bit1); //Si es 1, deja tal cual + kBCF(Z); //Si es 0, devuelve cero + end; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stConst_Expres + ROB_bit_and_bit(Opt, SetRes); + exit; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stVariab_Expres + ROB_bit_and_bit(Opt, SetRes); + exit; + end; + stExpres_Expres:begin + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarBitFromStk); + //Luego el caso es similar a variable-expresión + ROB_bit_and_bit(Opt, SetRes); + FreeStkRegisterBit; //Libera pila. Ya se usó el dato. + end; + else + genError('Cannot Compile: "%s"', [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_bit_and_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p2^.Sto <> stConst then begin + GenError('Incompatible types: (bit) AND (byte).'); exit; + end; + //p2 es constante + if p2^.valInt = 0 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := false; + ROB_bit_and_bit(Opt, SetRes); //opera como bit + end else if p2^.valInt = 1 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := true; + ROB_bit_and_bit(Opt, SetRes); //opera como bit + end else begin + GenError('Incompatible types: (bit) AND (byte).'); exit; + end; +end; +procedure TGenCod.ROB_bit_or_bit(Opt: TxpOperation; SetRes: boolean); +begin + case stoOperation of + stConst_Const: begin //AND de dos constantes. Caso especial + SetROBResultConst_bit(p1^.valBool or p2^.valBool); + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if p1^.valBool then begin //p1 = 1 + //No usa ningún registro + //Optimiza devolviendo constante = 1 + SetROBResultConst_bit(true); + end else begin //p1 = 0 + //No usa ningún registro + //Optimiza devolviendo la misma variable + SetROBResultVariab(p2^.rVar, p2^.Inverted); + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if p1^.valBool then begin //p1 = 1 + //No usa ningún registro + //Optimiza devolviendo constante = 1 + SetROBResultConst_bit(true); + Z.used := false; //libera el bit Z, porque ya no importa la expresión + end else begin //p1 = 0 + //No usa ningún registro + //Optimiza devolviendo la misma expresión en Z + SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica + end; + end; + stVariab_Const: begin + if p2^.valBool then begin //p2 = 1 + //No usa ningún registro + //Optimiza devolviendo constante = 1 + SetROBResultConst_bit(true); + end else begin //p2 = 0 + //No usa ningún registro + //Optimiza devolviendo la misma variable + SetROBResultVariab(p1^.rVar, p1^.Inverted); + end; + end; + stVariab_Variab:begin + if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin + //Es la misma variable: a OR a. Optimiza + if p1^.Inverted and p2^.Inverted then begin + //not a or not a = not a + SetROBResultVariab(p1^.rVar, p1^.Inverted); + end else if p1^.Inverted then begin + //not a or a = 1 + SetROBResultConst_bit(true); + end else if p2^.Inverted then begin + //a or not a = 1 + SetROBResultConst_bit(true); + end else begin //Caso normal + //a and a = a + SetROBResultVariab(p1^.rVar, p1^.Inverted); + end; + end else begin + if p1^.Inverted and p2^.Inverted then begin + //Por La ley de Morgan, se convierten em AND + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_and_bit(Opt, SetRes); //procesa como OR + res.Invert; + exit; + end else if p1^.Inverted then begin + //Este caso es lo inverso, no vale la pena implementarlo de nuevo + ExchangeP1_P2; + ROB_bit_or_bit(Opt, SetRes); //procesa como OR + exit; + end else if p2^.Inverted then begin + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Mueve p2 a Z + kMOVLW(p2^.rVar.BitMask); + kANDWF(byte2, toW); //Z aparece normal + //Aplica un OR entre Z y p1, + kBTFSC(bit1); //Si es 0, deja tal cual + kBSF(Z); //Si es 1, devuelve uno + end else begin //Caso normal + SetROBResultExpres_bit(Opt, true); //Fija resultado, con lógica invertida + //Mueve p2 a Z + kMOVLW(p2^.rVar.BitMask); + kANDWF(byte2, toW); //Z está invertido + //Aplica un OR entre p1 y Z'. Trabajamos con lógica invertida, por optimización + kBTFSC(bit1); //Si es 0, deja tal cual (pero sigue con lógica invertida) + kBCF(Z); //Si es 1, devuelve 1 (0 porque debe quedar con lógica invertida) + end; + end; + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + if p1^.Inverted and p2^.Inverted then begin + //Por La ley de Morgan, se convierten em AND + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_and_bit(Opt, SetRes); //procesa como OR + exit; + end else if p1^.Inverted then begin //lógica invertida + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un OR entre p1' y Z. + kBTFSS(bit1); //Si es 1, deja tal cual + kBSF(Z); //Si es 0, devuelve uno + end else if p2^.Inverted then begin //lógica invertida en Z + SetROBResultExpres_bit(Opt, true); //Deja la lógica invertida por optimización + //Aplica un OR entre p1 y Z. + kBTFSC(bit1); //Si es 0, deja tal cual + kBCF(Z); //Si es 1, devuelve uno (0 porque es lógica invertida) + end else begin //lógica normal + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un OR entre p1 y Z. + kBTFSC(bit1); //Si es 0, deja tal cual + kBSF(Z); //Si es 1, devuelve uno + end; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stConst_Expres + ROB_bit_or_bit(Opt, SetRes); + exit; + end; + stExpres_Variab:begin //la expresión p2 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stVariab_Expres + ROB_bit_or_bit(Opt, SetRes); + exit; + end; + stExpres_Expres:begin + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarBitFromStk); + //Luego el caso es similar a variable-expresión + ROB_bit_or_bit(Opt, SetRes); + FreeStkRegisterBit; //Libera pila. Ya se usó el dato. + end; + else + genError('Cannot Compile: "%s"', [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_bit_or_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p2^.Sto <> stConst then begin + GenError('Incompatible types: (bit) OR (byte).'); exit; + end; + //p2 es constante + if p2^.valInt = 0 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := false; + ROB_bit_or_bit(Opt, SetRes); //opera como bit + end else if p2^.valInt = 1 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := true; + ROB_bit_or_bit(Opt, SetRes); //opera como bit + end else begin + GenError('Incompatible types: (bit) OR (byte).'); exit; + end; +end; +procedure TGenCod.ROB_bit_xor_bit(Opt: TxpOperation; SetRes: boolean); +begin + case stoOperation of + stConst_Const: begin //XOR de dos constantes. Caso especial + SetROBResultConst_bit(p1^.valBool xor p2^.valBool); + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if p1^.valBool then begin //p1 = 1 + //Optimiza devolviendo la variable invertida + SetROBResultVariab(p2^.rVar, not p2^.Inverted); + end else begin //p1 = 0 + //Optimiza devolviendo la misma variable + SetROBResultVariab(p2^.rVar, p2^.Inverted); + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if p1^.valBool then begin //p1 = 1 + //Optimiza devolviendo la expresión invertida + SetROBResultExpres_bit(Opt, not p2^.Inverted); //mantiene la lógica + end else begin //p1 = 0 + //Optimiza devolviendo la misma expresión en Z + SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica + end; + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_bit_xor_bit(Opt, SetRes); + exit; + end; + stVariab_Variab:begin + if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin + //Es la misma variable: a XOR a + //Optimiza devolviendo cero + SetROBResultConst_bit(false); + end else begin + if p1^.Inverted and p2^.Inverted then begin + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_xor_bit(Opt, SetRes); //es lo mismo + exit; + end else if p1^.Inverted then begin + //Este caso es lo inverso, no vale la pena implementarlo de nuevo + ExchangeP1_P2; + ROB_bit_xor_bit(Opt, SetRes); //procesa como OR + exit; + end else if p2^.Inverted then begin + //a XOR b' = (z XOR b)' + p2^.Inverted := false; + ROB_bit_xor_bit(Opt, SetRes); + res.Invert; //Invierte la lógica + exit; + end else begin //Caso normal + {Se optimiza bien, esta operación, porque es una rutina muy usada para loa + las operaciones XOR, y porque también se utiliza el XOR para las comparaciones + de bits.} + if p1^.bit = p2^.bit then begin + //Están en el mismo bit, se puede optimizar + SetROBResultExpres_bit(Opt, true); //Fija resultado + kMOVF(byte2, toW); //mueve a W + kXORWF(byte1, toW); //APlica XOR, + kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido + end else if p1^.bit = p2^.bit +1 then begin + //p1 está a un bit a la izquierda, se puede optimizar + SetROBResultExpres_bit(Opt, true); //Fija resultado + kRLF(byte2, toW); //alinea y mueve a W + kXORWF(byte1, toW); //APlica XOR, + kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido + end else if p1^.bit = p2^.bit-1 then begin + //p1 está a un bit a la derecha, se puede optimizar + SetROBResultExpres_bit(Opt, true); //Fija resultado + kRRF(byte2, toW); //alinea y mueve a W + kXORWF(byte1, toW); //APlica XOR, + kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido + end else if abs(p1^.bit - p2^.bit) = 4 then begin + //p1 está a un nibble de distancia, se puede optimizar + SetROBResultExpres_bit(Opt, true); //Fija resultado + kSWAPF(byte2, toW); //alinea y mueve a W + kXORWF(byte1, toW); //APlica XOR, + kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido + end else begin + //La forma larga + SetROBResultExpres_bit(Opt, false); //Fija resultado, + //Mueve p2 a Z + kMOVLW(p2^.rVar.BitMask); + kANDWF(byte2, toW); //Z está invertido + //Aplica un XOR entre p1 y Z'. + _BANKSEL(p1^.bank); + _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es que se necesita + _BTFSS(p1^.offs, p1^.bit); //Si es 1, invierte, pero ya esta invertido, así que lo deja + _ANDWF(Z.offs, toW); //Si es 0, deja tal cual, pero como está invertido, hay que corregir + end; + end; + end; + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + if p1^.Inverted and p2^.Inverted then begin + p1^.Inverted := false; + p2^.Inverted := false; + ROB_bit_xor_bit(Opt, SetRes); //es lo mismo + exit; + end else if p1^.Inverted then begin //lógica invertida + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un XOR entre p1' y Z. + _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es eu se necesita + _BANKSEL(p1^.bank); + _BTFSS(p1^.offs, p1^.bit); //Si es 1(0), deja tal cual + _ANDWF(Z.offs, toW); //Si es 0(1), invierte + end else if p2^.Inverted then begin //lógica invertida en Z + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un XOR entre p1 y Z'. + _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es eu se necesita + _BANKSEL(p1^.bank); + _BTFSS(p1^.offs, p1^.bit); //Si es 1, invierte (deja igual porque ya está invertido) + _ANDWF(Z.offs, toW); //Si es 0, deja tal cual (realmente debe invertir) + end else begin //lógica normal + SetROBResultExpres_bit(Opt, false); //Fija resultado + //Aplica un XOR entre p1 y Z. + _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es se necesita + _BANKSEL(p1^.bank); + _BTFSC(p1^.offs, p1^.bit); //Si es 0, deja tal cual + _ANDWF(Z.offs, toW); //Si es 1, invierte + end; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stConst_Expres + ROB_bit_xor_bit(Opt, SetRes); + exit; + end; + stExpres_Variab:begin //la expresión p2 se evaluó y esta en W + ExchangeP1_P2; //Convierte en stVariab_Expres + ROB_bit_xor_bit(Opt, SetRes); + exit; + end; + stExpres_Expres:begin + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarBitFromStk); + //Luego el caso es similar a stVariab_Expres + ROB_bit_xor_bit(Opt, SetRes); + FreeStkRegisterBit; //Libera pila. Ya se usó el dato. + end; + else + genError('Cannot Compile: "%s"', [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_bit_xor_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p2^.Sto <> stConst then begin + GenError('Incompatible types: (bit) XOR (byte).'); exit; + end; + //p2 es constante + if p2^.valInt = 0 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := false; + ROB_bit_xor_bit(Opt, SetRes); //opera como bit + end else if p2^.valInt = 1 then begin + p2^.SetAsConst(typBit); //convierte en bit + p2^.valBool := true; + ROB_bit_xor_bit(Opt, SetRes); //opera como bit + end else begin + GenError('Incompatible types: (bit) XOR (byte).'); exit; + end; +end; +procedure TGenCod.ROB_bit_equ_bit(Opt: TxpOperation; SetRes: boolean); +begin + //Una comparación, es lo mismo que un XOR negado + ROB_bit_xor_bit(Opt, SetRes); //puede devolver error + //Niega la lógica + res.Invert; //Invierte la lógica + ChangeResultBitToBool; //devuelve boolean +end; +procedure TGenCod.ROB_bit_equ_byte(Opt: TxpOperation; SetRes: boolean); +begin + //Una comparación, es lo mismo que un XOR negado + ROB_bit_xor_byte(Opt, SetRes); //puede devolver error + //¿Y si devuelve variable? + res.Invert; //Invierte la lógica + ChangeResultBitToBool; //devuelve boolean +end; +procedure TGenCod.ROB_bit_dif_bit(Opt: TxpOperation; SetRes: boolean); +begin + //Esta comparación, es lo mismo que un XOR + ROB_bit_xor_bit(Opt, SetRes); //puede devolver error + ChangeResultBitToBool; //devuelve boolean +end; +procedure TGenCod.ROB_bit_dif_byte(Opt: TxpOperation; SetRes: boolean); +begin + //Una comparación, es lo mismo que un XOR + ROB_bit_xor_byte(Opt, SetRes); //puede devolver error + ChangeResultBitToBool; //devuelve boolean +end; +procedure TGenCod.ROU_not_bit(Opr: TxpOperator; SetRes: boolean); +begin + case p1^.Sto of + stConst : begin + {Actualmente no existen constantes de tipo "Bit", pero si existieran, sería así} + SetROUResultConst_bit(not p1^.valBool); + end; + stVariab: begin + {Optimiza devolviendo la misma variable, pero invirtiendo la lógica.} + SetROBResultVariab(p1^.rVar, not p1^.Inverted); + end; + stExpres: begin //ya está en STATUS.Z + //No cambiamos su valor, sino su significado. + SetROUResultExpres_bit(not p1^.Inverted); + end; + else + genError('Not implemented: "%s"', [Opr.OperationString]); + end; +end; +procedure TGenCod.ROU_not_byte(Opr: TxpOperator; SetRes: boolean); +begin + case p1^.Sto of + stConst : begin + {Actualmente no existen constantes de tipo "Bit", pero si existieran, sería así} + SetROUResultConst_byte((not p1^.valInt) and $FF); + end; + stVariab: begin + SetROUResultExpres_byte; + kCOMF(byte1, toW); + end; +// stExpres: begin +// SetROUResultExpres_byte; +// ////// +// end; + else + genError('Not implemented: "%s"', [Opr.OperationString]); + end; +end; +procedure TGenCod.ROU_address(Opr: TxpOperator; SetRes: boolean); +{Devuelve la dirección de una variable.} +begin + case p1^.Sto of + stConst : begin + genError('Cannot obtain address of constant.'); + end; + stVariab: begin + //Es una variable normal + //La dirección de una variable es constante + SetResultConst(typByte); + //No se usa p1^.offs, porque solo retorna 7 bits; + res.valInt := p1^.rVar.addr and $ff; + end; + stExpres: begin //ya está en STATUS.Z + genError('Cannot obtain address of an expression.'); + end; + else + genError('Cannot obtain address of this operand.'); + end; +end; +////////////operaciones con Boolean +procedure TGenCod.ROB_bool_asig_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_asig_bit(Opt, SetRes); //A bajo nivel es lo mismo +end; +procedure TGenCod.ROU_not_bool(Opr: TxpOperator; SetRes: boolean); +begin + ROU_not_bit(Opr, SetRes); //A bajo nivel es lo mismo + ChangeResultBitToBool; //pero debe devolver este tipo +end; +procedure TGenCod.ROB_bool_and_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_and_bit(Opt, SetRes); //A bajo nivel es lo mismo + ChangeResultBitToBool; //pero debe devolver este tipo +end; +procedure TGenCod.ROB_bool_or_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_or_bit(Opt, SetRes); //A bajo nivel es lo mismo + ChangeResultBitToBool; //pero debe devolver este tipo +end; +procedure TGenCod.ROB_bool_xor_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_xor_bit(Opt, SetRes); //A bajo nivel es lo mismo + ChangeResultBitToBool; //pero debe devolver este tipo +end; +procedure TGenCod.ROB_bool_equ_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_equ_bit(Opt, SetRes); //Es lo mismo +end; +procedure TGenCod.ROB_bool_dif_bool(Opt: TxpOperation; SetRes: boolean); +begin + ROB_bit_dif_bit(Opt, SetRes); +end; +////////////operaciones con Byte +procedure TGenCod.ROB_byte_and_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + + case stoOperation of + stConst_Const: begin //suma de dos constantes. Caso especial + SetROBResultConst_byte(value1 and value2); //puede generar error + end; + stConst_Variab: begin + if value1 = 0 then begin //Caso especial + SetROBResultConst_byte(0); //puede generar error + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultVariab(p2^.rVar); //puede generar error + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kANDLW(value1); //leave in W + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1 = 0 then begin //Caso especial + SetROBResultConst_byte(0); //puede generar error + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultExpres_byte(Opt); //No es necesario hacer nada. Ya está en W + exit; + end; + SetROBResultExpres_byte(Opt); + kANDLW(value1); //leave in W + end; + stVariab_Const: begin + if value2 = 0 then begin //Caso especial + SetROBResultConst_byte(0); //puede generar error + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultVariab(p1^.rVar); //puede generar error + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value2); + kANDWF(byte1, toW); //leave in W + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kANDWF(byte1, toW); //leave in W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kANDWF(byte1, toW); //leave in W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin //Caso especial + SetROBResultConst_byte(0); //puede generar error + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultExpres_byte(Opt); //No es necesario hacer nada. Ya está en W + exit; + end; + SetROBResultExpres_byte(Opt); + kANDLW(value2); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kANDWF(byte2, toW); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //p1 está en la pila y p2 en el acumulador + rVar := GetVarByteFromStk; + kANDWF(rVar.addr0, toW); + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_and_bit(Opt: TxpOperation; SetRes: boolean); +begin + {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, + no se implementa ROB_bit_and_byte.} + ExchangeP1_P2; //Invierte los operandos + ROB_bit_and_byte(Opt, SetRes); +end; +procedure TGenCod.ROB_byte_or_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + + case stoOperation of + stConst_Const: begin //suma de dos constantes. Caso especial + SetROBResultConst_byte(value1 or value2); //puede generar error + end; + stConst_Variab: begin + if value1 = 0 then begin //Caso especial + SetROBResultVariab(p2^.rVar); + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultConst_byte(255); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kIORLW(value1); //leave in W + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1 = 0 then begin //Caso especial + SetROBResultExpres_byte(Opt); //No es necesario hacer nada. Ya está en W + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultConst_byte(255); + exit; + end; + SetROBResultExpres_byte(Opt); + kIORLW(value1); //leave in W + end; + stVariab_Const: begin + if value2 = 0 then begin //Caso especial + SetROBResultVariab(p1^.rVar); + exit; + end else if value1 = 255 then begin //Caso especial + SetROBResultConst_byte(255); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value2); + kIORWF(byte1, toW); //leave in W + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kIORWF(byte1, toW); //leave in W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kIORWF(byte1, toW); //leave in W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin //Caso especial + SetROBResultExpres_byte(Opt); //No es necesario hacer nada. Ya está en W + exit; + end else if value2 = 255 then begin //Caso especial + SetROBResultConst_byte(255); + exit; + end; + SetROBResultExpres_byte(Opt); + kIORLW(value2); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kIORWF(byte2, toW); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //p1 está en la pila y p2 en el acumulador + rVar := GetVarByteFromStk; + kIORWF(rVar.addr0, toW); + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_or_bit(Opt: TxpOperation; SetRes: boolean); +begin + {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, + no se implementa ROB_bit_or_byte.} + ExchangeP1_P2; //Invierte los operandos + ROB_bit_or_byte(Opt, SetRes); +end; +procedure TGenCod.ROB_byte_xor_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + + case stoOperation of + stConst_Const: begin //suma de dos constantes. Caso especial + SetROBResultConst_byte(value1 xor value2); //puede generar error + end; + stConst_Variab: begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kXORLW(value1); //leave in W + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kXORLW(value1); //leave in W + end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); + kMOVLW(value2); + kXORWF(byte1, toW); //leave in W + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kXORWF(byte1, toW); //leave in W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kXORWF(byte1, toW); //leave in W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kXORLW(value2); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kXORWF(byte2, toW); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //p1 está en la pila y p2 en el acumulador + rVar := GetVarByteFromStk; + kXORWF(rVar.addr0, toW); + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_xor_bit(Opt: TxpOperation; SetRes: boolean); +begin + {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, + no se implementa ROB_bit_xor_byte.} + ExchangeP1_P2; //Invierte los operandos + ROB_bit_xor_byte(Opt, SetRes); +end; +procedure TGenCod.ROB_byte_equal_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 = value2); + end; + stConst_Variab: begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + if value1 = 0 then begin //caso especial + _BANKSEL(p2^.bank); //verifica banco destino + _MOVF(p2^.offs, toF); //si iguales _Z=1 + end else if value1 = 1 then begin //caso especial + _BANKSEL(p2^.bank); //verifica banco destino + _DECF(p2^.offs, toW); //si el resultado es cero _Z=1 + end else if value1 = 255 then begin //caso especial + _BANKSEL(p2^.bank); //verifica banco destino + _INCF(p2^.offs, toW); //si el resultado es cero _Z=1 + end else begin + _MOVLW(value1); + _BANKSEL(p2^.bank); //verifica banco destino + _SUBWF(p2^.offs, toW); //si iguales _Z=1 + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kXORLW(value1); //Si son iguales Z=1. Se usa XORLW, porque SUBLW no existe en la gama baja + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_byte_equal_byte(Opt, SetRes); + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVF(byte1, toW); + kSUBWF(byte2, toW); //si iguales _Z=1 + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kSUBWF(byte1, toW); //si iguales _Z=1 + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kXORLW(value2); //Si son iguales Z=1. Se usa XORLW, porque SUBLW no existe en la gama baja + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //ReserveW; if HayError then exit; + _BANKSEL(p2^.bank); //verifica banco destino + _SUBWF(p2^.offs, toW); //si iguales _Z=1 + end; + stExpres_Expres:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kSUBWF(rVar.addr0, toW); //compara directamente a lo que había en pila. + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_difer_byte(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_equal_byte(Opt, SetRes); //usa el mismo código + res.Invert; //Invierte la lógica +end; +procedure TGenCod.ROB_byte_difer_bit(Opt: TxpOperation; SetRes: boolean); +begin + {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, + no se implementa ROB_bit_dif_byte.} + ExchangeP1_P2; + ROB_bit_dif_byte(Opt, SetRes); +end; +////////////operaciones con Word +procedure TGenCod.ROB_word_asig_word(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Realiza la asignación + if p1^.Sto = stVariab then begin + case p2^.Sto of + stConst : begin + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + _BANKSEL(p1^.bank); + if value2L = 0 then begin //optimiza + kCLRF(byte1L); + end else begin + kMOVLW(value2L); + kMOVWF(byte1L); + end; + if value2H = 0 then begin //optimiza + kCLRF(byte1H); + end else begin + kMOVLW(value2H); + kMOVWF(byte1H); + end; + end; + stVariab: begin + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + kMOVF(byte2L, toW); + kMOVWF(byte1L); + kMOVF(byte2H, toW); + kMOVWF(byte1H); + end; + stExpres: begin //se asume que se tiene en (H,w) + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + kMOVWF(byte1L); + _BANKSEL(H.bank); + _MOVF(H.offs, toW); + kMOVWF(byte1H); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona byte bajo + //Asignación normal + if value2L=0 then begin + //caso especial + _CLRF(0); + end else begin + kMOVLW(value2L); + _MOVWF(0); + end; + _INCF(FSR.offs, toF); //direcciona byte alto + if value2H=0 then begin + //caso especial + _CLRF(0); + end else begin + kMOVLW(value2H); + _MOVWF(0); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero dereferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona byte bajo + //Asignación normal + kMOVF(byte2L, toW); + _MOVWF(0); + _INCF(FSR.offs, toF); //direcciona byte alto + kMOVF(byte2H, toW); + _MOVWF(0); + end; + stExpres: begin //ya está en H,w + //Caso especial de asignación a puntero dereferenciado: variable^ + aux := GetAuxRegisterByte; + _BANKSEL(aux.bank); + _MOVWF(aux.offs); //Salva W (p2.L) + //Apunta con p1 + kMOVF(byte1, toW); + _MOVWF(FSR.offs); //direcciona a byte bajo + //Asignación normal + _BANKSEL(aux.bank); + _MOVF(aux.offs, toW); //recupero p2.L + _MOVWF(0); //escribe + _BANKSEL(H.bank); + _MOVF(H.offs, toW); //recupero p2.H + _INCF(FSR.offs, toF); //apunta a byte alto + _MOVWF(0); //escribe + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_word_asig_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto = stVariab then begin + case p2^.Sto of + stConst : begin + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //caso especial + kCLRF(byte1L); + kCLRF(byte1H); + end else begin; + kCLRF(byte1H); + kMOVLW(value2); + kMOVWF(byte1L); + end; + end; + stVariab: begin + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + kCLRF(byte1H); + kMOVF(byte2L, toW); + kMOVWF(byte1L); + end; + stExpres: begin //se asume que está en w + SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante + kCLRF(byte1H); + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_word_equal_word(Opt: TxpOperation; SetRes: boolean); +var + tmp: TPicRegister; + sale: integer; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 = value2); + end; + stConst_Variab: begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + ////////// Compara byte alto + if value1H = 0 then begin //caso especial + kMOVF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + end else if value1H = 1 then begin //caso especial + kDECF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + {De no ser porque se tiene que devolver siempre, el valor de Z, + las 2 instrucciones anteriores, se podrían reemplazar con un i_DECFSZ, + pero i_DECFSZ, no actualiza Z} + _GOTO_PEND(sale); //no son iguales + end else if value1H = 255 then begin //caso especial + kINCF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + {De no ser porque se tiene que devolver siempre, el valor de Z, + las 2 instrucciones anteriores, se podrían reemplazar con un i_DECFSZ, + pero i_DECFSZ, no actualiza Z} + _GOTO_PEND(sale); //no son iguales + end else begin //caso general + kMOVLW(value1H); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + end; + ////////// Son iguales, comparar el byte bajo + if value1L = 0 then begin //caso especial + kMOVF(byte2L,toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end else if value1L = 1 then begin //caso especial + kDECF(byte2L,toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end else if value1L = 255 then begin //caso especial + kINCF(byte2L,toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end else begin + kMOVLW(value1L); + kSUBWF(byte2L,toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó p2 esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + if HayError then exit; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVLW(value1H); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVLW(value1L); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + tmp.used := false; + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_word_equal_word(Opt, SetRes); + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte alto + kMOVF(byte1H, toW); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + kSUBWF(byte2L,toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVF(byte1H, toW); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 + tmp.used := false; +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte a stConst_Expres; + ROB_word_equal_word(Opt, SetRes); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte a stVariab_Expres; + ROB_word_equal_word(Opt, SetRes); + end; + stExpres_Expres:begin + //La expresión p1, debe estar salvada y p2 en (H,W) + p1^.SetAsVariab(GetVarWordFromStk); + //Luego el caso es similar a variable-expresión + ROB_word_equal_word(Opt, SetRes); + FreeStkRegisterWord; + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_difer_word(Opt: TxpOperation; SetRes: boolean); +begin + ROB_word_equal_word(Opt, SetRes); + res.Invert; +end; + +procedure TGenCod.ROB_word_mul_byte(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else if value1*value2 < $10000 then begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end else begin + SetROBResultConst_dword((value1*value2) and $FFFFFFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; + // stConst_Variab: begin + // if value1=0 then begin //caso especial + // SetROBResultConst_byte(0); + // exit; + // end else if value1=1 then begin //caso especial + // SetROBResultVariab(p2^.rVar); + // exit; + // end else if value1=2 then begin + // SetROBResultExpres_word(Opt); + // _BANKSEL(H.bank); + // _CLRF(H.offs); + // _BCF(STATUS, _C); + // _BANKSEL(P2^.bank); + // _RLF(p2^.offs, toW); + // _BANKSEL(H.bank); + // _RLF(H.offs, toF); + // exit; + // end; + // SetROBResultExpres_word(Opt); + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value1); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stConst_Expres: begin //la expresión p2 se evaluó y esta en W + // SetROBResultExpres_word(opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value1); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Const: begin + // SetROBResultExpres_word(opt); + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value2); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Variab:begin + // SetROBResultExpres_word(Opt); + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p2 -> E + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); //p1 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Const: begin //la expresión p1 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p1 -> E + // kMOVLW(value2); //p2 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p1 -> E + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); //p2 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Expres:begin + // SetROBResultExpres_word(Opt); + // //la expresión p1 debe estar salvada y p2 en el acumulador + // rVar := GetVarByteFromStk; + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p2 -> E + // _BANKSEL(rVar.adrByte0.bank); + // _MOVF(rVar.adrByte0.offs, toW); //p1 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + // {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + // variable) temporal, si se tuviera una rutina de multiplicación que compilara a + // partir de la direccion de una variable (en este caso de la pila, que se puede + // modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + // AddCallerTo(f_byte_mul_byte_16); + // end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_mul_word(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else if value1*value2 < $10000 then begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end else begin + SetROBResultConst_dword((value1*value2) and $FFFFFFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; + // stConst_Variab: begin + // if value1=0 then begin //caso especial + // SetROBResultConst_byte(0); + // exit; + // end else if value1=1 then begin //caso especial + // SetROBResultVariab(p2^.rVar); + // exit; + // end else if value1=2 then begin + // SetROBResultExpres_word(Opt); + // _BANKSEL(H.bank); + // _CLRF(H.offs); + // _BCF(STATUS, _C); + // _BANKSEL(P2^.bank); + // _RLF(p2^.offs, toW); + // _BANKSEL(H.bank); + // _RLF(H.offs, toF); + // exit; + // end; + // SetROBResultExpres_word(Opt); + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value1); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stConst_Expres: begin //la expresión p2 se evaluó y esta en W + // SetROBResultExpres_word(opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value1); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Const: begin + // SetROBResultExpres_word(opt); + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // kMOVLW(value2); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Variab:begin + // SetROBResultExpres_word(Opt); + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p2 -> E + // _BANKSEL(p1^.bank); + // _MOVF(p1^.offs, toW); //p1 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Const: begin //la expresión p1 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p1 -> E + // kMOVLW(value2); //p2 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + // SetROBResultExpres_word(Opt); + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p1 -> E + // _BANKSEL(p2^.bank); + // _MOVF(p2^.offs, toW); //p2 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // AddCallerTo(f_byte_mul_byte_16); + // end; + // stExpres_Expres:begin + // SetROBResultExpres_word(Opt); + // //la expresión p1 debe estar salvada y p2 en el acumulador + // rVar := GetVarByteFromStk; + // _BANKSEL(E.bank); + // _MOVWF(E.offs); //p2 -> E + // _BANKSEL(rVar.adrByte0.bank); + // _MOVF(rVar.adrByte0.offs, toW); //p1 -> W + // _CALL(f_byte_mul_byte_16.adrr); + // FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + // {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + // variable) temporal, si se tuviera una rutina de multiplicación que compilara a + // partir de la direccion de una variable (en este caso de la pila, que se puede + // modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + // AddCallerTo(f_byte_mul_byte_16); + // end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_umulword_word(Opt: TxpOperation; SetRes: boolean); +begin + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + exit; //sale aquí, porque es un caso particular + end; +// stConst_Variab: begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _BANKSEL(H.bank); +// _MOVWF(H.offs); +// kMOVLW(value1); +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// _BANKSEL(H.bank); +// _MOVWF(H.offs); +// kMOVLW(value1); +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stVariab_Const: begin +// SetROBResultExpres_byte(Opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(H.bank); +// _MOVWF(H.offs); +// kMOVLW(value2); +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stVariab_Variab:begin +// SetROBResultExpres_byte(Opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(H.bank); +// _MOVWF(H.offs); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// _BANKSEL(H.bank); +// _MOVWF(H.offs); //p2 -> H +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); //p1 -> W +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stExpres_Const: begin //la expresión p1 se evaluó y esta en W +// _MOVWF(H.offs); //p1 -> H +// kMOVLW(value2); //p2 -> W +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// _BANKSEL(H.bank); +// _MOVWF(H.offs); //p1 -> H +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); //p2 -> W +// _CALL(f_byteXbyte_byte.adrr); +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; +// stExpres_Expres:begin +// SetROBResultExpres_byte(Opt); +// //la expresión p1 debe estar salvada y p2 en el acumulador +// FreeStkRegisterByte(r); //libera pila porque se usará el dato ahí contenido +// _BANKSEL(H.bank); +// _MOVWF(H.offs); //p2 -> H +// _BANKSEL(r.bank); +// _MOVF(r.offs, toW); //p1 -> W +// _CALL(f_byteXbyte_byte.adrr); +// {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una +// variable) temporal, si se tuviera una rutina de multiplicación que compilara a +// partir de la direccion de una variable (en este caso de la pila, que se puede +// modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} +// if FirstPass then f_byteXbyte_byte.AddCaller; +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_and_byte(Opt: TxpOperation; SetRes: boolean); +begin + case stoOperation of + stConst_Const: begin + //Optimiza + SetROBResultConst_byte(value1 and value2); + end; + stConst_Variab: begin + SetROBResultExpres_byte(Opt); + kMOVLW(value1L); //Carga menos peso del dato 1 + kANDWF(byte2L,toW); //deja en W + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (W) + SetROBResultExpres_byte(Opt); + _andlw(value1L); //Deja en W + end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1L, toW); + _ANDLW(value2L); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1L, toW); + kANDWF(byte2L, toW); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (_H,W) + SetROBResultExpres_byte(Opt); + kANDWF(byte1L, toW); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_byte(Opt); + _ANDLW(value2L); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_byte(Opt); + kANDWF(byte2L, toW); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //p1 está salvado en pila y p2 en (W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + kANDWF(byte1L, toW); + FreeStkRegisterWord; //libera pila + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; + +//////////// Operaciones con Dword +procedure TGenCod.ROB_dword_asig_byte(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //caso especial + kCLRF(byte1L); + kCLRF(byte1H); + kCLRF(byte1E); + kCLRF(byte1U); + end else begin; + kCLRF(byte1U); + kCLRF(byte1E); + kCLRF(byte1H); + kMOVLW(value2); + kMOVWF(byte1L); + end; + end; + stVariab: begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kCLRF(byte1U); + kCLRF(byte1E); + kCLRF(byte1H); + kMOVF(byte2L, toW); + kMOVWF(byte1L); + end; + stExpres: begin //se asume que está en w + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kCLRF(byte1U); + kCLRF(byte1E); + kCLRF(byte1H); + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +procedure TGenCod.ROB_dword_asig_word(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //caso especial + kCLRF(byte1U); + kCLRF(byte1E); + kCLRF(byte1H); + kCLRF(byte1L); + end else begin; + kCLRF(byte1U); + kCLRF(byte1E); + kMOVLW(value2H); + kMOVWF(byte1H); + kMOVLW(value2L); + kMOVWF(byte1L); + end; + end; + stVariab: begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kCLRF(byte1U); + kCLRF(byte1E); + kMOVF(byte2H, toW); + kMOVWF(byte1H); + kMOVF(byte2L, toW); + kMOVWF(byte1L); + end; + stExpres: begin //se asume que está en w + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kCLRF(byte1U); + kCLRF(byte1E); + kMOVWF(byte1L); + _MOVF(H.offs, toW); + kMOVWF(byte1H); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +procedure TGenCod.ROB_dword_asig_dword(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //caso especial + kCLRF(byte1U); + kCLRF(byte1E); + kCLRF(byte1H); + kCLRF(byte1L); + end else begin; + kMOVLW(p2^.UByte); + kMOVWF(byte1U); + kMOVLW(p2^.EByte); + kMOVWF(byte1E); + kMOVLW(value2H); + kMOVWF(byte1H); + kMOVLW(value2L); + kMOVWF(byte1L); + end; + end; + stVariab: begin + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kMOVF(byte2U, toW); + kMOVWF(byte1U); + kMOVF(byte2E, toW); + kMOVWF(byte1E); + kMOVF(byte2H, toW); + kMOVWF(byte1H); + kMOVF(byte2L, toW); + kMOVWF(byte1L); + end; + stExpres: begin //se asume que está en w + SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kMOVWF(byte1L); + _BANKSEL(H.bank); + _MOVF(H.offs, toW); + kMOVWF(byte1H); + _BANKSEL(E.bank); + _MOVF(E.offs, toW); + kMOVWF(byte1E); + kMOVF(U.addr, toW); + kMOVWF(byte1U); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +procedure TGenCod.ROB_dword_equal_dword(Opt: TxpOperation; SetRes: boolean); +var + sale1, sale2, sale3: integer; +begin + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 = value2); + end; + stConst_Variab: begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte U + if p1^.UByte = 0 then begin //caso especial + kMOVF(byte2U, toW); //p2=0? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + end else if p1^.UByte = 1 then begin //caso especial + kDECF(byte2U, toW); //p2=1? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + end else if p1^.UByte = 255 then begin //caso especial + kINCF(byte2U, toW); //p2=255? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + end else begin //caso general + kMOVLW(p1^.UByte); + kSUBWF(byte2U, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + end; + //Compara byte E + if p1^.EByte = 0 then begin //caso especial + kMOVF(byte2E, toW); //p2=0? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + end else if p1^.EByte = 1 then begin //caso especial + kDECF(byte2E, toW); //p2=1? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + end else if p1^.EByte = 255 then begin //caso especial + kINCF(byte2E, toW); //p2=255? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + end else begin //caso general + kMOVLW(p1^.EByte); + kSUBWF(byte2E, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + end; + //Compara byte H + if value1H = 0 then begin //caso especial + kMOVF(byte2H, toW); //p2=0? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + end else if value1H = 1 then begin + kDECF(byte2H, toW); //p2=1? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + end else if value1H = 255 then begin + kINCF(byte2H, toW); //p2=255? + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + end else begin //caso general + kMOVLW(value1H); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + end; + //Son iguales, comparar el byte bajo + if value1L = 0 then begin //caso especial + kMOVF(byte2L,toW); //p2=0? + end else if value1L = 1 then begin //caso especial + kDECF(byte2L,toW); //p2=1? + end else if value1L = 255 then begin //caso especial + kINCF(byte2L,toW); //p2=255? + end else begin //caso general + kMOVLW(value1L); + kSUBWF(byte2L,toW); //p2-p1 + end; +_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. +_LABEL(sale2); +_LABEL(sale3); + end; + stConst_Expres: begin //la expresión p2 se evaluó y está en UEHW + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + if HayError then exit; + //Compara byte L + kXORLW(value1L); //Debería funcionar igual que SUBLW + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + //Compara byte H + kMOVLW(value1H); + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + //Compara byte E + kMOVLW(p1^.EByte); + _SUBWF(E.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + //Comparar el byte U + kMOVLW(p1^.UByte); + _SUBWF(U.offs,toW); //p2-p1 +_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. +_LABEL(sale2); +_LABEL(sale3); + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_dword_equal_dword(Opt, SetRes); + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte U + kMOVF(byte1U, toW); + kSUBWF(byte2U, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + //Compara byte E + kMOVF(byte1E, toW); + kSUBWF(byte2E, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + //Compara byte alto + kMOVF(byte1H, toW); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + kSUBWF(byte2L,toW); //p2-p1 +_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. +_LABEL(sale2); +_LABEL(sale3); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte L + kSUBWF(byte1L, toW); //p2^.L ya está en W + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale1); //no son iguales + //Compara byte H + kMOVF(byte1H, toW); + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale2); //no son iguales + //Compara byte E + kMOVF(byte1E, toW); + _SUBWF(E.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale3); //no son iguales + //Comparar el byte U + kMOVF(byte1U, toW); + _SUBWF(U.offs,toW); //p2-p1 +_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. +_LABEL(sale2); +_LABEL(sale3); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte a stConst_Expres; + ROB_dword_equal_dword(Opt, SetRes); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + ExchangeP1_P2; //Convierte a stVariab_Expres; + ROB_dword_equal_dword(Opt, SetRes); + end; + stExpres_Expres:begin + //La expresión p1, debe estar salvada y p2 en (H,W,E,U) + p1^.SetAsVariab(GetVarDWordFromStk); + //Luego el caso es similar a variable-expresión + ROB_dword_equal_dword(Opt, SetRes); + FreeStkRegisterdWord; + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_dword_difer_dword(Opt: TxpOperation; SetRes: boolean); +begin + ROB_dword_equal_dword(Opt, SetRes); + res.Invert; +end; + +//////////// Operaciones con Char +procedure TGenCod.ROB_string_add_string(Opt: TxpOperation; SetRes: boolean); +{Implementation of string is incomplete. Just created this oepration to facilitate +initialization of ARRAY OF chars with string} +begin + case stoOperation of + stConst_Const: begin //Special case. Comapares constants. + SetResultConst(typString); + res.valStr := p1^.valStr + p2^.valStr; + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_string_add_char(Opt: TxpOperation; SetRes: boolean); +{Implementation of string is incomplete. Just created this oepration to facilitate +initialization of ARRAY OF chars with string} +begin + case stoOperation of + stConst_Const: begin //Special case. Comapares constants. + SetResultConst(typString); + res.valStr := p1^.valStr + chr(p2^.valInt); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; + diff --git a/Source/GenCodBas_PIC10.pas b/Source/GenCodBas_PIC10.pas new file mode 100644 index 00000000..12d56311 --- /dev/null +++ b/Source/GenCodBas_PIC10.pas @@ -0,0 +1,3502 @@ +{Unidad que agrega campos necesarios a la clase TCompilerBase, para la generación de +código con el PIC16F.} +unit GenCodBas_PIC10; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, XpresElementsPIC, XpresTypesPIC, PicCore, Pic10Utils, + CompBase, ParserDirec, Globales, CompOperands, MisUtils, LCLType, LCLProc; +const + STACK_SIZE = 2; //tamaño de pila para subrutinas en el PIC + MAX_REGS_AUX_BYTE = 5; //cantidad máxima de registros a usar + MAX_REGS_AUX_BIT = 4; //cantidad máxima de registros bit a usar + MAX_REGS_STACK_BYTE = 6; //cantidad máxima de registros a usar en la pila + MAX_REGS_STACK_BIT = 4; //cantidad máxima de registros a usar en la pila + +type + { TGenCodBas } + TGenCodBas = class(TParserDirecBase) + private + linRep : string; //línea para generar de reporte + posFlash: Integer; + procedure ClearDeviceError; + procedure Cod_JumpIfTrue; + procedure CompileFOR; + procedure CompileIF; + procedure CompileProcBody(fun: TxpEleFun); + procedure CompileREPEAT; + procedure CompileWHILE; + function CurrFlash(): integer; + function DeviceError: string; + procedure GenCodPicReqStartCodeGen; + procedure GenCodPicReqStopCodeGen; + function GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; + function GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out + value: TOperand): boolean; + procedure ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); + procedure ResetFlashAndRAM; + function ReturnAttribIn(typ: TxpEleType; const Op: TOperand; offs: integer + ): boolean; + procedure SetSharedUnused; + procedure SetSharedUsed; + procedure word_ClearItems(const OpPtr: pointer); + procedure word_GetItem(const OpPtr: pointer); + procedure word_SetItem(const OpPtr: pointer); + protected + procedure StartCodeSub(fun: TxpEleFun); + procedure EndCodeSub; + procedure FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure FunctParam(fun: TxpEleFunBase); + protected + //Registros de trabajo + W : TPicRegister; //Registro Interno. + Z : TPicRegisterBit; //Registro Interno. + C : TPicRegisterBit; //Registro Interno. + H : TxpEleVar; //Registros de trabajo. Se crean siempre. + E : TxpEleVar; //Registros de trabajo. Se crean siempre. + //U : TPicRegister; //Registros de trabajo. Se crean siempre. + U : TxpEleVar; + //Registros auxiliares + INDF : TPicRegister; //Registro Interno. + FSR : TPicRegister; //Registro Interno. + procedure PutLabel(lbl: string); inline; + procedure PutTopComm(cmt: string; replace: boolean = true); inline; + procedure PutComm(cmt: string); inline; + procedure PutFwdComm(cmt: string); inline; + function ReportRAMusage: string; + function ValidateByteRange(n: integer): boolean; + function ValidateWordRange(n: integer): boolean; + function ValidateDWordRange(n: Int64): boolean; + protected + procedure GenerateROBdetComment; + procedure GenerateROUdetComment; + protected //Rutinas de gestión de memoria de bajo nivel + procedure AssignRAM(out addr: word; regName: string; shared: boolean); //Asigna a una dirección física + procedure AssignRAMbit(out addr: word; out bit: byte; regName: string; + shared: boolean); //Asigna a una dirección física + function CreateRegisterByte(RegType: TPicRegType): TPicRegister; + function CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; + protected //Variables temporales + {Estas variables temporales, se crean como forma de acceder a campos de una variable + como varbyte.bit o varword.low. Se almacenan en "varFields" y se eliminan al final} + varFields: TxpEleVars; //Contenedor + function CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; + {Estas variables se usan para operaciones en el generador de código. + No se almacenan en "varFields". Así se definió al principio, pero podrían también + almacenarse, asumiendo que no importe crear variables dinámicas.} + function NewTmpVarWord(rL, rH: TxpEleVar): TxpEleVar; + function NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; + protected //Rutinas de gestión de memoria para registros + varStkBit : TxpEleVar; //variable bit. Usada para trabajar con la pila + varStkByte: TxpEleVar; //variable byte. Usada para trabajar con la pila + varStkWord: TxpEleVar; //variable word. Usada para trabajar con la pila + varStkDWord: TxpEleVar; //variable dword. Usada para trabajar con la pila + function GetAuxRegisterByte: TPicRegister; + function GetAuxRegisterBit: TPicRegisterBit; + //Gestión de la pila + function GetStkRegisterByte: TPicRegister; + function GetStkRegisterBit: TPicRegisterBit; + function GetVarBitFromStk: TxpEleVar; + function GetVarByteFromStk: TxpEleVar; + function GetVarWordFromStk: TxpEleVar; + function GetVarDWordFromStk: TxpEleVar; + function FreeStkRegisterBit: boolean; + function FreeStkRegisterByte: boolean; + function FreeStkRegisterWord: boolean; + function FreeStkRegisterDWord: boolean; + protected //Rutinas de gestión de memoria para variables + {Estas rutinas estarían mejor ubicadas en TCompilerBase, pero como dependen del + objeto "pic", se colocan mejor aquí.} + procedure AssignRAMinBit(absAdd, absBit: integer; var addr: word; + var bit: byte; regName: string; shared: boolean = false); + procedure AssignRAMinByte(absAdd: integer; var addr: word; regName: string; + shared: boolean = false); + procedure CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); + protected //Métodos para fijar el resultado + //Métodos básicos + procedure SetResultNull; + procedure SetResultConst(typ: TxpEleType); + procedure SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); + procedure SetResultVarRef(rVarBase: TxpEleVar); + procedure SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); + //Fija el resultado de ROB como constante. + procedure SetROBResultConst_bool(valBool: boolean); + procedure SetROBResultConst_bit (valBit: boolean); + procedure SetROBResultConst_byte(valByte: integer); + procedure SetROBResultConst_char(valByte: integer); + procedure SetROBResultConst_word(valWord: integer); + procedure SetROBResultConst_dword(valWord: Int64); + //Fija el resultado de ROB como variable + procedure SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + //Fija el resultado de ROB como expresión + {El parámetro "Opt", es más que nada para asegurar que solo se use con Operaciones + binarias.} + procedure SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_byte(Opt: TxpOperation); + procedure SetROBResultExpres_char(Opt: TxpOperation); + procedure SetROBResultExpres_word(Opt: TxpOperation); + procedure SetROBResultExpres_dword(Opt: TxpOperation); + //Fija el resultado de ROU + procedure SetROUResultConst_bit(valBit: boolean); + procedure SetROUResultConst_byte(valByte: integer); + procedure SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetROUResultVarRef(rVarBase: TxpEleVar); + procedure SetROUResultExpres_bit(Inverted: boolean); + procedure SetROUResultExpres_byte; + procedure SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); + //Adicionales + procedure ChangeResultBitToBool; + procedure ChangeResultCharToByte; + function ChangePointerToExpres(var ope: TOperand): boolean; + protected //Instrucciones que no manejan el cambio de banco + procedure CodAsmFD(const inst: TPIC10Inst; const f: byte; d: TPIC10Destin); + procedure CodAsmK(const inst: TPIC10Inst; const k: byte); + procedure _BANKSEL(targetBank: byte); + procedure GenCodBank(targetAdrr: word); + procedure _BANKRESET; + function _PC: word; + function _CLOCK: integer; + procedure _LABEL(igot: integer); + //Instrucciones simples + procedure _ADDWF(const f: byte; d: TPIC10Destin); + procedure _ANDLW(const k: word); + procedure _ANDWF(const f: byte; d: TPIC10Destin); + procedure _BCF(const f, b: byte); + procedure _BSF(const f, b: byte); + procedure _BTFSC(const f, b: byte); + procedure _BTFSS(const f, b: byte); + procedure _CALL(const a: word); + procedure _CLRF(const f: byte); + procedure _CLRW; + procedure _CLRWDT; + procedure _COMF(const f: byte; d: TPIC10Destin); + procedure _DECF(const f: byte; d: TPIC10Destin); + procedure _DECFSZ(const f: byte; d: TPIC10Destin); + procedure _GOTO(const a: word); + procedure _GOTO_PEND(out igot: integer); + procedure _INCF(const f: byte; d: TPIC10Destin); + procedure _INCFSZ(const f: byte; d: TPIC10Destin); + procedure _IORLW(const k: word); + procedure _IORWF(const f: byte; d: TPIC10Destin); + procedure _MOVF(const f: byte; d: TPIC10Destin); + procedure _MOVLW(const k: word); + procedure _MOVWF(const f: byte); + procedure _NOP; + procedure _RETFIE; + procedure _RETLW(const k: word); + procedure _RETURN; + procedure _RLF(const f: byte; d: TPIC10Destin); + procedure _RRF(const f: byte; d: TPIC10Destin); + + procedure _SLEEP; + procedure _SUBWF(const f: byte; d: TPIC10Destin); + procedure _SWAPF(const f: byte; d: TPIC10Destin); + procedure _XORLW(const k: word); + procedure _XORWF(const f: byte; d: TPIC10Destin); + procedure _TRIS(const f: byte); + //macros + procedure _IFZERO; + procedure _IFNZERO; + protected //Instrucciones que manejan el cambio de banco + procedure kADDWF(addr: word; d: TPIC10Destin); + procedure kANDLW(const k: word); + procedure kANDWF(addr: word; d: TPIC10Destin); + procedure kBCF(const f: TPicRegisterBit); + procedure kBSF(const f: TPicRegisterBit); + procedure kBTFSC(const f: TPicRegisterBit); + procedure kBTFSS(const f: TPicRegisterBit); + procedure kCALL(const a: word); + procedure kCLRF(addr: word); + procedure kCLRW; + procedure kCLRWDT; + procedure kCOMF(addr: word; d: TPIC10Destin); + procedure kDECF(addr: word; d: TPIC10Destin); + procedure kDECFSZ(const f: word; d: TPIC10Destin); + procedure kGOTO(const a: word); + procedure kGOTO_PEND(out igot: integer); + procedure kINCF(addr: word; d: TPIC10Destin); + procedure kINCFSZ(const f: word; d: TPIC10Destin); + procedure kIORLW(const k: word); + procedure kIORWF(addr: word; d: TPIC10Destin); + procedure kMOVF(addr: word; d: TPIC10Destin); + procedure kMOVLW(const k: word); + procedure kMOVWF(addr: word); + procedure kNOP; + procedure kRETFIE; + procedure kRETLW(const k: word); + procedure kRETURN; + procedure kRLF(addr: word; d: TPIC10Destin); + procedure kRRF(addr: word; d: TPIC10Destin); + procedure kSLEEP; + procedure kSUBLW_x(const k: word); + procedure kSUBWF(addr: word; d: TPIC10Destin); + procedure kSWAPF(addr: word; d: TPIC10Destin); + procedure kXORLW(const k: word); + procedure kXORWF(addr: word; d: TPIC10Destin); + //Instrucciones adicionales + procedure kSHIFTR(addr: word; d: TPIC10destin); + procedure kSHIFTL(addr: word; d: TPIC10destin); + procedure kIF_BSET(const f: TPicRegisterBit; out igot: integer); + procedure kIF_BSET_END(igot: integer); + procedure kIF_BCLR(const f: TPicRegisterBit; out igot: integer); + procedure kIF_BCLR_END(igot: integer); + procedure kIF_ZERO(out igot: integer); + procedure kIF_ZERO_END(igot: integer); + procedure kIF_NZERO(out igot: integer); + procedure kIF_NZERO_END(igot: integer); + public //Acceso a registro de trabajo +// property H_register: TPicRegister read H; +// property E_register: TPicRegister read E; +// property U_register: TPicRegister read U; + protected //Funciones de tipos + ///////////////// Tipo Bit //////////////// + procedure bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure bit_DefineRegisters; + procedure bit_SaveToStk; + //////////////// Tipo Byte ///////////// + procedure byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure byte_DefineRegisters; + procedure byte_SaveToStk; + procedure byte_GetItem(const OpPtr: pointer); + procedure byte_SetItem(const OpPtr: pointer); + procedure byte_ClearItems(const OpPtr: pointer); + procedure byte_bit(const OpPtr: pointer; nbit: byte); + procedure byte_bit0(const OpPtr: pointer); + procedure byte_bit1(const OpPtr: pointer); + procedure byte_bit2(const OpPtr: pointer); + procedure byte_bit3(const OpPtr: pointer); + procedure byte_bit4(const OpPtr: pointer); + procedure byte_bit5(const OpPtr: pointer); + procedure byte_bit6(const OpPtr: pointer); + procedure byte_bit7(const OpPtr: pointer); + //////////////// Tipo Word ///////////// + procedure word_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure word_DefineRegisters; + procedure word_SaveToStk; + procedure word_Low(const OpPtr: pointer); + procedure word_High(const OpPtr: pointer); + //////////////// Tipo DWord ///////////// + procedure dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure dword_DefineRegisters; + procedure dword_SaveToStk; + procedure dword_Extra(const OpPtr: pointer); + procedure dword_High(const OpPtr: pointer); + procedure dword_HighWord(const OpPtr: pointer); + procedure dword_Low(const OpPtr: pointer); + procedure dword_LowWord(const OpPtr: pointer); + procedure dword_Ultra(const OpPtr: pointer); + public //Acceso a campos del PIC + function PICName: string; override; + function PICNameShort: string; override; + function PICnBanks: byte; override; //Number of RAM banks + function PICCurBank: byte; override; //Current RAM bank + function PICBank(i: byte): TPICRAMBank; override; //Return a RAM bank + function PICnPages: byte; override; //Number of FLASH pages + function PICPage(i: byte): TPICFlashPage; override; //Return a FLASH page + function RAMmax: integer; override; + public //Inicialización + pic : TPIC10; //Objeto PIC de la serie 16. + procedure StartRegs; + function CompilerName: string; override; + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; +implementation +var + TXT_SAVE_W, TXT_SAVE_Z, TXT_SAVE_H, MSG_NO_ENOU_RAM, MSG_VER_CMP_EXP, + MSG_STACK_OVERF, MSG_NOT_IMPLEM, ER_VARIAB_EXPEC, ER_ONL_BYT_WORD, + ER_ASIG_EXPECT + : string; + +procedure SetLanguage; +begin + ParserDirec.SetLanguage; + {$I ..\language\tra_GenCodBas.pas} +end; +{ TGenCodPic } +procedure TGenCodBas.ProcByteUsed(offs, bnk: byte; + regPtr: TPICRamCellPtr); +begin + linRep := linRep + regPtr^.name + + ' DB ' + 'bnk'+ IntToStr(bnk) + ':$' + IntToHex(offs, 3) + LineEnding; +end; +procedure TGenCodBas.PutLabel(lbl: string); +{Agrega uan etiqueta antes de la instrucción. Se recomienda incluir solo el nombre de +la etiqueta, sin ":", ni comentarios, porque este campo se usará para desensamblar.} +begin + pic.addTopLabel(lbl); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutTopComm(cmt: string; replace: boolean = true); +//Agrega comentario al inicio de la posición de memoria +begin + pic.addTopComm(cmt, replace); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutComm(cmt: string); +//Agrega comentario lateral al código. Se llama después de poner la instrucción. +begin + pic.addSideComm(cmt, true); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutFwdComm(cmt: string); +//Agrega comentario lateral al código. Se llama antes de poner la instrucción. +begin + pic.addSideComm(cmt, false); //agrega línea al código ensmblador +end; +function TGenCodBas.ReportRAMusage: string; +{Genera un reporte de uso de la memoria RAM} +begin + linRep := ''; + pic.ExploreUsed(@ProcByteUsed); + Result := linRep; +end; +function TGenCodBas.ValidateByteRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<256) then + exit(true) + else begin + GenError('Numeric value exceeds a byte range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateWordRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<65536) then + exit(true) + else begin + GenError('Numeric value exceeds a word range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateDWordRange(n: Int64): boolean; +begin + if (n>=0) and (n<$100000000) then + exit(true) + else begin + GenError('Numeric value exceeds a dword range.'); + exit(false); + end; +end; +procedure TGenCodBas.GenerateROBdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación binaria, que es cuando está definido operType, p1, y p2.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ',' + + p2^.StoOpChr + ':' + p2^.Typ.name + ')', false); + end; +end; +procedure TGenCodBas.GenerateROUdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación unaria, que es cuando está definido operType, y p1.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ')', false); + end; +end; +//Rutinas de gestión de memoria de bajo nivel +procedure TGenCodBas.AssignRAM(out addr: word; regName: string; shared: boolean); +//Asocia a una dirección física de la memoria del PIC. +//Si encuentra error, devuelve el mensaje de error en "MsjError" +begin + {Esta dirección física, la mantendrá este registro hasta el final de la compilación + y en teoría, hasta el final de la ejecución de programa en el PIC.} + if not pic.GetFreeByte(addr, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, regName); //pone nombre a registro +end; +procedure TGenCodBas.AssignRAMbit(out addr: word; out bit: byte; regName: string; shared: boolean); +begin + if not pic.GetFreeBit(addr, bit, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAMbit(addr, bit, regName); //pone nombre a bit +end; +function TGenCodBas.CreateRegisterByte(RegType: TPicRegType): TPicRegister; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegister; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegister.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAux.Add(reg); //agrega a lista + if listRegAux.Count > MAX_REGS_AUX_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegisterBit; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegisterBit.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAuxBit.Add(reg); //agrega a lista + if listRegAuxBit.Count > MAX_REGS_AUX_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; +{Crea una variable temporal agregándola al contenedor varFields, que es +limpiado al iniciar la compilación. Notar que la variable temporal creada, no tiene +RAM asiganda.} +var + tmpVar: TxpEleVar; +begin + tmpVar:= TxpEleVar.Create; + tmpVar.name := nam; + tmpVar.typ := eleTyp; + tmpVar.adicPar.hasAdic := decNone; + tmpVar.adicPar.hasInit := false; + tmpVar.IsTmp := true; //Para que se pueda luego identificar. + varFields.Add(tmpVar); //Agrega + Result := tmpVar; +end; +function TGenCodBas.NewTmpVarWord(rL, rH: TxpEleVar): TxpEleVar; +{Crea una variable temporal Word, con las direcciones de las varaibles indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typWord; + Result.addr0 := rL.addr; //asigna direcciones + Result.addr1 := rH.addr; +end; +//Variables temporales +function TGenCodBas.NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; +{Crea una variable temporal DWord, con las direcciones de los registros indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typDWord; + Result.addr0 := adL; //asigna direcciones + Result.addr1 := adH; + Result.addr2 := adE; + Result.addr3 := adU; +end; +//Rutinas de Gestión de memoria +function TGenCodBas.GetAuxRegisterByte: TPicRegister; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegister; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAux do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then begin + reg.used := true; + exit(reg); + end; + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterByte(prtAuxReg); + if reg = nil then exit(nil); //hubo errir + regName := 'aux'+IntToSTr(listRegAux.Count); + AssignRAM(reg.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetAuxRegisterBit: TPicRegisterBit; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegisterBit; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAuxBit do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then + exit(reg); + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterBit(prtAuxReg); + if reg = nil then exit(nil); //hubo errir + regName := 'aux'+IntToSTr(listRegAuxBit.Count); + AssignRAMbit(reg.addr, reg.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetStkRegisterByte: TPicRegister; +{Pone un registro de un byte, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterByte(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegister; + regName: String; +begin + //Validación + if stackTop>MAX_REGS_STACK_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTop>listRegStk.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegister.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStk.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStk.Count); + AssignRAM(reg0.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStk[stackTop]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTop); //actualiza +end; +function TGenCodBas.GetStkRegisterBit: TPicRegisterBit; +{Pone un registro de un bit, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterBit(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegisterBit; + regName: String; +begin + //Validación + if stackTopBit>MAX_REGS_STACK_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTopBit>listRegStkBit.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegisterBit.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStkBit.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStkBit.Count); + AssignRAMbit(reg0.addr, reg0.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStkBit[stackTopBit]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTopBit); //actualiza +end; +function TGenCodBas.GetVarBitFromStk: TxpEleVar; +{Devuelve la referencia a una variable bit, que representa al último bit agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegisterBit; +begin + topreg := listRegStkBit[stackTopBit-1]; //toma referecnia de registro de la pila + //Usamos la variable "varStkBit" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkBit.addr0 := topreg.addr; + varStkBit.bit0 := topreg.bit; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkBit; +end; +function TGenCodBas.GetVarByteFromStk: TxpEleVar; +{Devuelve la referencia a una variable byte, que representa al último byte agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + //Usamos la variable "varStkByte" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkByte.addr0 := topReg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkByte; +end; +function TGenCodBas.GetVarWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable word, que representa al último word agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkWord; +end; +function TGenCodBas.GetVarDWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable Dword, que representa al último Dword agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkDWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkDWord.addr3 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkDWord.addr2 := topreg.addr; + topreg := listRegStk[stackTop-3]; //toma referencia de registro de la pila + varStkDWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-4]; //toma referencia de registro de la pila + varStkDWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkDWord; +end; +function TGenCodBas.FreeStkRegisterBit: boolean; +{Libera el último bit, que se pidió a la RAM. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTopBit=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTopBit); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterByte: boolean; +{Libera el último byte, que se pidió a la RAM. Devuelve en "reg", la dirección del último + byte pedido. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTop=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterWord: boolean; +{Libera el último word, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=1 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 2); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterDWord: boolean; +{Libera el último dword, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=3 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 4); //Baja puntero + exit(true); +end; +////Rutinas de gestión de memoria para variables +procedure TGenCodBas.AssignRAMinBit(absAdd, absBit: integer; + var addr: word; var bit: byte; regName: string; shared: boolean = false); +{Aeigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAMbit(addr, bit, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + bit := absBit; //para los bits no hay transformación + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAMbit(addr, bit, regName); + end; +end; +procedure TGenCodBas.AssignRAMinByte(absAdd: integer; + var addr: word; regName: string; shared: boolean = false); +{Asigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAM(addr, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAM(addr, regName); + if pic.MsjError<>'' then begin + GenError(pic.MsjError); + pic.MsjError := ''; //Para evitar generar otra vez el mensaje + exit; + end; + end; +end; +procedure TGenCodBas.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); +{Rutina para asignar espacio físico a una variable. La variable, es creada en memoria +con los parámetros que posea en ese momento. Si está definida como ABSOLUTE, se le +creará en la posicón indicada. } +var + varName: String; + absAdd: integer; + absBit, nbytes: integer; + typ: TxpEleType; + //offs, bnk: byte; + addr: word; +begin + //Valores solicitados. Ya deben estar iniciado este campo. + varName := nVar.name; + typ := nVar.typ; + if nVar.adicPar.hasAdic = decAbsol then begin + absAdd := nVar.adicPar.absAddr; + if typ.IsBitSize then begin + absBit := nVar.adicPar.absBit; + end else begin + absBit := -1; + end; + end else begin + absAdd := -1; //no aplica + absBit := -1; //no aplica + end; + //Asigna espacio, de acuerdo al tipo + if typ = typBit then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typBool then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typByte then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typChar then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 2 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + end; + end else if typ = typDWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 4 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + AssignRAMinByte(-1, nVar.addr2, varName+'@2', shared); + AssignRAMinByte(-1, nVar.addr3, varName+'@3', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + AssignRAMinByte(absAdd+2, nVar.addr2, varName+'@2'); + AssignRAMinByte(absAdd+3, nVar.addr3, varName+'@3'); + end; + end else if typ.catType = tctArray then begin + //Es un arreglo de algún tipo + if absAdd<>-1 then begin + //Se pide mapearlo de forma absoluta + GenError(MSG_NOT_IMPLEM, [varName]); + exit; + end; + //Asignamos espacio en RAM + nbytes := typ.nItems * typ.itmType.size; + if not pic.GetFreeBytes(nbytes, addr) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, nVar.name); //Nombre solo al primer byte + //Fija dirección física. Se usa solamente "addr0", como referencia, porque + //no se tienen suficientes registros para modelar todo el arreglo. + nVar.addr0 := addr; + end else if typ.catType = tctPointer then begin + //Es un puntero a algún tipo. + //Los punteros cortos, se manejan como bytes + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else begin + GenError(MSG_NOT_IMPLEM, [varName]); + end; + if HayError then exit; + if typ.OnGlobalDef<>nil then typ.OnGlobalDef(varName, ''); +end; +//Métodos para fijar el resultado +procedure TGenCodBas.SetResultNull; +{Fija el resultado como NULL.} +begin + res.SetAsNull; + InvertedFromC:=false; //para limpiar el estado + res.Inverted := false; +end; +procedure TGenCodBas.SetResultConst(typ: TxpEleType); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsConst(typ); + InvertedFromC:=false; //para limpiar el estado + {Se asume que no se necesita invertir la lógica, en una constante (booleana o bit), ya + que en este caso, tenemos control pleno de su valor} + res.Inverted := false; +end; +procedure TGenCodBas.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsVariab(rVar); + InvertedFromC:=false; //para limpiar el estado + //"Inverted" solo tiene sentido, para los tipos bit y boolean + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); +{Fija los parámetros del resultado de una subexpresion (en "res"). Este método se debe +ejecutar, siempre antes de evaluar cada subexpresión. Más exactamente, antes de generar +código para ña subexpresión, porque esta rutina puede generar su propio código.} +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + //Fija como expresión + res.SetAsExpres(typ); + //Limpia el estado. Esto es útil que se haga antes de generar el código para una operación + InvertedFromC:=false; + //Actualiza el estado de los registros de trabajo. + RTstate := typ; +end; +procedure TGenCodBas.SetResultVarRef(rVarBase: TxpEleVar); +begin + res.SetAsVarRef(rVarBase); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +procedure TGenCodBas.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + res.SetAsExpRef(rVarBase, typ); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +//Fija el resultado de ROP como constante +procedure TGenCodBas.SetROBResultConst_bool(valBool: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBool); + res.valBool := valBool; +end; +procedure TGenCodBas.SetROBResultConst_bit(valBit: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROBResultConst_byte(valByte: integer); +begin + GenerateROBdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_char(valByte: integer); +begin + GenerateROBdetComment; + SetResultConst(typChar); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_word(valWord: integer); +begin + GenerateROBdetComment; + if not ValidateWordRange(valWord) then + exit; //Error de rango + SetResultConst(typWord); + res.valInt := valWord; +end; +procedure TGenCodBas.SetROBResultConst_dword(valWord: Int64); +begin + GenerateROBdetComment; + if not ValidateDWordRange(valWord) then + exit; //Error de rango + SetResultConst(typDWord); + res.valInt := valWord; +end; +//Fija el resultado de ROP como variable +procedure TGenCodBas.SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROBdetComment; + SetResultVariab(rVar, Inverted); +end; +//Fija el resultado de ROP como expresión +procedure TGenCodBas.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^ y p2^, porque toma infiormación de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Boolean, y se asegura de reservar el +registro Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma infiormación de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBool, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBool); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_byte(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_char(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Char, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma infiormación de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typChar, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typChar); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_word(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typWord); + end; +end; +procedure TGenCodBas.SetROBResultExpres_dword(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + typDWord.DefineRegister; //Se asegura que exista H, E y U + SetResultExpres(typDWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typDWord); + end; +end; +//Fija el resultado de ROU +procedure TGenCodBas.SetROUResultConst_bit(valBit: boolean); +begin + GenerateROUdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROUResultConst_byte(valByte: integer); +begin + GenerateROUdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROUdetComment; + SetResultVariab(rVar, Inverted); +end; +procedure TGenCodBas.SetROUResultVarRef(rVarBase: TxpEleVar); +{Fija el resultado como una referencia de tipo stVarRefVar} +begin + GenerateROUdetComment; + SetResultVarRef(rVarBase); +end; +procedure TGenCodBas.SetROUResultExpres_bit(Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROUResultExpres_byte; +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); +{Define el resultado como una expresión stVarRefExp, protegiendo los RT si es necesario. +Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpRef(rVarBase, typ, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpRef(rVarBase, typ); //actualiza "RTstate" + end; +end; +//Adicionales +procedure TGenCodBas.ChangeResultBitToBool; +{Cambia el tipo de dato del resultado (que se supone es Bit), a Boolean.} +var + tmpVar: TxpEleVar; +begin + {Lo más fácil sería hacer: res.Typ := typBool; + pero cuando "res", sea una variable, se estaría cambiando el ¡tipo de la variable! } + case res.Sto of + stConst : res.SetAsConst(typBool); + stExpres: res.SetAsExpres(typBool); + stVariab: begin + {Para el caso de variables es más complejo, porque no se puede modificar su tipo + real, sino que hay que crear una variable temporal.} + tmpVar := CreateTmpVar('', typBool); //crea variable temporal Boolean + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo bit + tmpVar.bit0 := res.rVar.bit0; + res.SetAsVariab(tmpVar); //Devuelve boolean + end; + end; +end; +procedure TGenCodBas.ChangeResultCharToByte; +begin + +end; +function TGenCodBas.ChangePointerToExpres(var ope: TOperand): boolean; +{Convierte un operando de tipo puntero dereferenciado (x^), en una expresión en los RT, +para que pueda ser evaluado, sin problemas, por las ROP. +Si hay error devuelve false.} +begin + Result := true; + if ope.Sto = stVarRef then begin + //Se tiene una variable puntero dereferenciada: x^ + {Convierte en expresión, verificando los RT} + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + if HayError then exit(false); + end; + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end else if ope.Sto = stExpRef then begin + //Es una expresión. + {Se asume que el operando tiene su resultado en los RT. SI estuvieran en la pila + no se aplicaría.} + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end; +end; +//Rutinas generales para la codificación +procedure TGenCodBas.CodAsmFD(const inst: TPIC10Inst; const f: byte; + d: TPIC10Destin); +begin + pic.codAsmFD(inst, f, d); +end; +procedure TGenCodBas.CodAsmK(const inst: TPIC10Inst; const k: byte); +begin + pic.codAsmK(inst, k); +end; +{procedure CodAsm(const inst: TPIC16Inst; const f, b: byte); inline; +begin + pic.codAsmFB(inst, f, b); +end;} +//rutinas que facilitan la codifición de instrucciones +procedure TGenCodBas._BANKRESET; +{Reinicia el banco al banco 0, independientemente de donde se pueda encontrar antes. +Siempre genera dos instrucciones. Se usa cuando no se puede predecir exactamente, en que +banco se encontrará el compilador.} +begin + if pic.NumBanks > 1 then begin + _BCF(_STATUS, _RP0); PutComm(';Bank reset.'); + end; + if pic.NumBanks > 2 then begin + _BCF(_STATUS, _RP1); PutComm(';Bank reset.'); + end; + CurrBank:=0; +end; +procedure TGenCodBas._BANKSEL(targetBank: byte); +{Verifica si se está en el banco deseado, de no ser así genera las instrucciones + para el cambio de banco. + Devuelve el número de instrucciones generado.} +var + curRP0: Byte; + newRP0, curRP1, newRP1: byte; +begin + if pic.NumBanks = 1 then + exit; //Caso especial. ¿Hay un PIC de esta serie con un banco? + if targetBank = CurrBank then + exit; //Ya estamos en el banco pedido + //Se está en un banco diferente + ////////// Verifica RP0 //////////// + curRP0 := CurrBank and $01; + newRP0 := targetBank and $01; + if (CurrBank = 255) or (curRP0 <> newRP0) then begin + //Debe haber cambio + if curRP0 = 0 then begin + _BSF(_STATUS, _RP0); PutComm(';Bank set.'); + end else begin + _BCF(_STATUS, _RP0); PutComm(';Bank set.'); + end; + end; + //Verifica si ya no hay más bancos + if pic.NumBanks <= 2 then begin + CurrBank := targetBank; + exit; + end; + ////////// Verifica RP1 //////////// + curRP1 := CurrBank and $02; + newRP1 := targetBank and $02; + if (CurrBank = 255) or (curRP1 <> newRP1) then begin + //Debe haber cambio + if curRP1 = 0 then begin + _BSF(_STATUS, _RP1); PutComm(';Bank set.'); + end else begin + _BCF(_STATUS, _RP1); PutComm(';Bank set.'); + end; + end; + ////////////////////////////////////// + CurrBank := targetBank; + exit; +end; +procedure TGenCodBas.GenCodBank(targetAdrr: word); +{Genera código de cambio de banco para acceder a la dirección indicada. +Se debe usar antes de una instrucción que va a acceder a RAM.} +var + targetBank: byte; +begin + if targetAdrr and $03f = $000 then exit; //Mapeada siempre en los 4 bancos + if targetAdrr and $03f = $004 then exit; //Mapeada siempre en los 4 bancos + targetBank := targetAdrr >> 7; + { TODO : Se debería ver un medio rápido para detectar si la variable "targetAdrr" está + mapeada, también, en otros bancos y así evitar cambios innecesarios de banco. } + _BANKSEL(targetBank); +end; + +function TGenCodBas._PC: word; inline; +{Devuelve la dirección actual en Flash} +begin + Result := pic.iFlash; +end; +function TGenCodBas._CLOCK: integer; inline; +{Devuelve la frecuencia de reloj del PIC} +begin + Result := pic.frequen; +end; +procedure TGenCodBas._LABEL(igot: integer); +{Termina de codificar el GOTO_PEND} +begin + pic.codGotoAt(igot, _PC); +end; +//Instrucciones simples +{Estas instrucciones no guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas._ANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas._ADDWF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, f,d); +end; +procedure TGenCodBas._ANDWF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, f,d); +end; +procedure TGenCodBas._CLRF(const f: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, f); +end; +procedure TGenCodBas._CLRW; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas._COMF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, f,d); +end; +procedure TGenCodBas._DECF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, f,d); +end; +procedure TGenCodBas._DECFSZ(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas._INCF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, f,d); +end; +procedure TGenCodBas._INCFSZ(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +procedure TGenCodBas._IORWF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, f,d); +end; +procedure TGenCodBas._MOVF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, f,d); +end; +procedure TGenCodBas._MOVWF(const f: byte); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, f); +end; +procedure TGenCodBas._NOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas._RLF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, f,d); +end; +procedure TGenCodBas._RRF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, f,d); +end; +procedure TGenCodBas._SUBWF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, f,d); +end; +procedure TGenCodBas._SWAPF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, f,d); +end; +procedure TGenCodBas._BCF(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f, b); +end; +procedure TGenCodBas._BSF(const f, b: byte); //inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f, b); +end; +procedure TGenCodBas._BTFSC(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f, b); +end; +procedure TGenCodBas._BTFSS(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f, b); +end; +procedure TGenCodBas._CALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas._CLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas._GOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas._GOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas._IORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas._MOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas._RETFIE; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas._RETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas._RETURN; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas._SLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas._XORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas._XORWF(const f: byte; d: TPIC10Destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, f,d); +end; +procedure TGenCodBas._TRIS(const f: byte); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_TRIS, f); +end; +procedure TGenCodBas._IFZERO; +begin + _BTFSC(_STATUS, _Z); +end; +procedure TGenCodBas._IFNZERO; +begin + _BTFSS(_STATUS, _Z); +end; +//Instrucciones que manejan el cambio de banco +{Estas instrucciones guardan la instrucción compilada en "lastOpCode".} +//procedure TGenCodBas.kADDWF(const f: word; d: TPIC10Destin); +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_ADDWF, f,d); +//end; +procedure TGenCodBas.kADDWF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, addr, d); +end; +procedure TGenCodBas.kANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas.kANDWF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, addr, d); +end; +procedure TGenCodBas.kCLRF(addr: word); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, addr); +end; +procedure TGenCodBas.kCLRW; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas.kCOMF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, addr, d); +end; +procedure TGenCodBas.kDECF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, addr, d); +end; +procedure TGenCodBas.kDECFSZ(const f: word; d: TPIC10Destin); +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas.kINCF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, addr, d); +end; +procedure TGenCodBas.kINCFSZ(const f: word; d: TPIC10Destin); +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +//procedure TGenCodBas.kIORWF(const f: word; d: TPIC10Destin); +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_IORWF, f,d); +//end; +procedure TGenCodBas.kIORWF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, addr, d); +end; +procedure TGenCodBas.kMOVF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, addr, d); +end; +procedure TGenCodBas.kMOVWF(addr: word); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, addr); +end; +procedure TGenCodBas.kNOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas.kRLF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, addr, d); +end; +procedure TGenCodBas.kRRF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, addr, d); +end; +//procedure TGenCodBas.kSUBWF(const f: word; d: TPIC10Destin); +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_SUBWF, f,d); +//end; +procedure TGenCodBas.kSUBWF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, addr, d); +end; +procedure TGenCodBas.kSWAPF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, addr, d); +end; +procedure TGenCodBas.kBCF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f.addr, f.bit); +end; +procedure TGenCodBas.kBSF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSC(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSS(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f.addr, f.bit); +end; +procedure TGenCodBas.kCALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas.kCLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas.kGOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas.kGOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas.kIORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas.kMOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas.kRETFIE; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas.kRETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas.kRETURN; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas.kSLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas.kSUBLW_x(const k: word); +{Instrucción simulada, ya que en esta familia, no existe la instrucción SUBLW.} +var + aux, aux2: TPicRegister; +begin + aux := GetAuxRegisterByte; + aux2 := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W + kMOVLW(k); + kMOVWF(aux2.addr); + kMOVF(aux.addr, toW); + kSUBWF(aux2.addr, toW); + aux.used := false; + aux2.used := false; +////Esta versión es más corta pero no actualiza el bit C de la misma forma +// aux := GetAuxRegisterByte; +// kMOVWF(aux); //Salva W +// kMOVLW(k+1); +// kSUBWF(aux, toF); //W - K -> aux +// kCOMF(aux, toW); +// aux.used := false; +end; +procedure TGenCodBas.kXORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas.kXORWF(addr: word; d: TPIC10Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, addr, d); +end; +//Instrucciones adicionales +procedure TGenCodBas.kSHIFTR(addr: word; d: TPIC10destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RRF(addr, d); +end; +procedure TGenCodBas.kSHIFTL(addr: word; d: TPIC10destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RLF(addr, d); +end; +procedure TGenCodBas.kIF_BSET(const f: TPicRegisterBit; out igot: integer); +{Conditional instruction. Test if the specified bit is set. In this case, execute +the following block. +This instruction require to call to kEND_BSET() to define the End of the block. +The strategy here is to generate the sequence: + + + i_BTFSS f + GOTO + ;--- Block start --- + + ;--- Block end --- + +This scheme is the worst case (assuming the GOTO instruction is only one word), later +if the body of the IF, is only one word, it will be optimized to: + + + i_BTFSC f + ;--- Block start --- + + ;--- Block end --- + +It's not used the best case first, because in case it needs to change to the worst case, +it would need to insert and move several words, including, probably, GOTOs and LABELs, +needing to recalculate jumps. +} +begin + GenCodBank(f.addr); + _BTFSS(f.addr, f.bit); + igot := pic.iFlash; //guarda posición de instrucción de salto + _GOTO(0); //salto pendiente +end; +procedure TGenCodBas.kIF_BSET_END(igot: integer); +{Define the End of the block, created with kIF_BSET().} +begin + if _PC = igot+1 then begin + //No hay instrucciones en en bloque + pic.iFlash:=pic.iFlash-2 ; //Elimina hasta el i_BTFSS, porque no tiene sentido + end else if _PC = igot+2 then begin + //Es un bloque de una sola instrucción. Se puede optimizar + pic.BTFSC_sw_BTFSS(igot-1); //Cambia i_BTFSS por i_BTFSC + pic.flash[igot] := pic.flash[igot+1]; //Desplaza la instrucción + pic.flash[igot].used:=false; //Elimina + end else begin + //Bloque de varias instrucciones + pic.codGotoAt(igot, _PC); //termina de codificar el salto + end; +end; +procedure TGenCodBas.kIF_BCLR(const f: TPicRegisterBit; out igot: integer); +{Conditional instruction. Test if the specified bit is zero. In this case, execute +the following block.} +begin + GenCodBank(f.addr); + _BTFSC(f.addr, f.bit); + igot := pic.iFlash; //guarda posición de instrucción de salto + _GOTO(0); //salto pendiente +end; +procedure TGenCodBas.kIF_BCLR_END(igot: integer); inline; +{Define the End of the block, created with kIF_BCLR.} +begin + kIF_BSET_END(igot); +end; +procedure TGenCodBas.kIF_ZERO(out igot: integer); inline; +{Conditional instruction. Test if the STATUS.Z flag is activated. In this case, execute +the following block.} +begin + kIF_BSET(Z, igot); +end; +procedure TGenCodBas.kIF_ZERO_END(igot: integer); inline; +{Define the End of the block, created with kIF_ZERO.} +begin + kIF_BSET_END(igot); +end; +procedure TGenCodBas.kIF_NZERO(out igot: integer); +begin + kIF_BCLR(Z, igot); +end; + +procedure TGenCodBas.kIF_NZERO_END(igot: integer); +begin + kIF_BCLR_END(igot); +end; + +function TGenCodBas.PICName: string; +begin + Result := pic.Model; +end; +function TGenCodBas.PICNameShort: string; +{Genera el nombre del PIC, quitándole la parte inicial "PIC".} +begin + Result := copy(pic.Model, 4, length(pic.Model)); +end; +function TGenCodBas.PICnBanks: byte; +begin + Result := pic.NumBanks; +end; +function TGenCodBas.PICCurBank: byte; +begin + Result := pic.BSR; +end; +function TGenCodBas.PICBank(i: byte): TPICRAMBank; +begin + Result := pic.banks[i]; +end; +function TGenCodBas.PICnPages: byte; +begin + Result := pic.NumPages; +end; +function TGenCodBas.PICPage(i: byte): TPICFlashPage; +begin + Result := pic.pages[i]; +end; +function TGenCodBas.GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; +{Extrae el primer parámetro (que corresponde al índice) de las funciones getitem() o +setitem(). También reconoce las formas con corchetes [], y en ese caso pone "WithBrackets" +en TRUE. Si encuentra error, devuelve false.} +begin + if cIn.tok = '[' then begin + //Es la sintaxis a[i]; + WithBrack := true; + cIn.Next; //Toma "[" + end else begin + //Es la sintaxis a.item(i); + WithBrack := false; + cIn.Next; //Toma identificador de campo + //Captura parámetro + if not CaptureTok('(') then exit(false); + end; + par := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit(false); + if par.Typ <> typByte then begin + GenError('Expected byte as index.'); + end; + if HayError then exit(false); + exit(true); +end; +function TGenCodBas.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; +{Lee el segundo parámetro de SetItem y devuelve en "value". Valida que sea sel tipo +correcto. Si hay error, devuelve FALSE.} +var + typItem: TxpEleType; +begin + if WithBrack then begin + if not CaptureTok(']') then exit(false); + cIn.SkipWhites; + {Legalmente, aquí podría seguir otro operador, o función como ".bit0", y no solo + ":=". Esto es una implementación algo limitada. Lo que debería hacerse, si no se + encuentra ":=", sería devolver una referencia a variable, tal vez a un nuevo tipo + de variable, con dirección "indexada", pero obligaría a crear un atributo más a + las varaibles. El caso de un índice constante es más sencillo de procesar.} + if not CaptureTok(':=') then exit(false); + end else begin + if not CaptureTok(',') then exit(false); + end; + value := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + typItem := arrVar.typ.itmType; + if value.Typ <> typItem then begin //Solo debería ser byte o char + if (value.Typ = typByte) and (typItem = typWord) then begin + //Son tipos compatibles + value.SetAsConst(typWord); //Cmabiamos el tipo + end else begin + GenError('%s expression expected.', [typItem.name]); + exit(false); + end; + end; + exit(true); +end; +///////////////// Tipo Bit //////////////// +procedure TGenCodBas.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros Z.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if Op^.valBool then + _BSF(Z.offs, Z.bit) + else + _BCF(Z.offs, Z.bit); + end; + stVariab: begin + //La lógica en Z, dene ser normal, proque no hay forma de leerla. + //Como Z, está en todos los bancos, no hay mucho problema. + if Op^.Inverted then begin + //No se usa el registro W + kBCF(Z); + kBTFSS(Op^.rVar.adrBit); + kBSF(Z); + end else begin + //No se usa el registro W + kBCF(Z); + kBTFSC(Op^.rVar.adrBit); + kBSF(Z); + end; + end; + stExpres: begin //ya está en w + if Op^.Inverted then begin + //Aquí hay un problema, porque hay que corregir la lógica + _MOVLW($1 << Z.bit); + _ANDWF(Z.offs, toW); //invierte Z + end else begin + //No hay mada que hacer + end; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; + if modReturn then _RETURN; //codifica instrucción +end; +procedure TGenCodBas.bit_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.bit_SaveToStk; +{Guarda el valor bit, cargado actualmente en Z, a pila.} +var + stk: TPicRegisterBit; +begin + stk := GetStkRegisterBit; //pide memoria + if stk= nil then exit; //error + //Guarda Z + _BANKSEL(stk.bank); + _BCF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + _BTFSC(Z.offs, Z.bit); PutComm(TXT_SAVE_Z); + _BSF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + stk.used := true; +end; +//////////////// Tipo Byte ///////////// +procedure TGenCodBas.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if modReturn then _RETLW(Op^.valInt) + else _MOVLW(Op^.valInt); + end; + stVariab: begin + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //ya está en w + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kMOVF(varPtr.addr0, toW); + kMOVWF(FSR.addr); //direcciona + kMOVF(INDF.addr, toW); //deje en W + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión derefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona + _MOVF(0, toW); //deje en W + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.byte_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.byte_SaveToStk; +var + stk: TPicRegister; +begin + stk := GetStkRegisterByte; //pide memoria + //guarda W + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; +end; +procedure TGenCodBas.byte_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin + //Se aplica a una variable array. Lo Normal. + arrVar := Op^.rVar; //referencia a la variable. + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typByte); + tmpVar.addr0 := arrVar.addr0 + idx.valInt; //¿Y si es de otro banco? + SetResultVariab(tmpVar); + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _MOVLW(arrVar.addr0); //agrega OFFSET + _ADDWF(04, toF); + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _MOVLW(arrVar.addr0); //agrega OFFSET + _ADDWF(04, toF); + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_SetItem(const OpPtr: pointer); +//Función que fija un valor indexado +var + WithBrack: Boolean; +var + Op: ^TOperand; + arrVar, rVar: TxpEleVar; + idx, value: TOperand; + idxTar: word; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + res.SetAsNull; //No devuelve nada + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + //Como el índice es constante, se puede acceder directamente + idxTar := arrVar.adrByte0.offs+idx.valInt; //índice destino + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pone a cero + _CLRF(idxTar); + end else begin + //Sabemos que hay una expresión byte + LoadToRT(value); //Carga resultado en W + _MOVWF(idxTar); //Mueve a arreglo + end; + end; + stVariab: begin + //El índice es una variable + //Tenemos la referencia la variable en idx.rvar + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _MOVF(idx.offs, toW); //índice + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _MOVF(idx.offs, toW); //índice + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _MOVWF($04); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El resultado está en W + //hay que mover value a arrVar[idx.rvar] + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva H + _MOVF(idx.offs, toW); //índice + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + end; + end; + stExpres: begin + //El índice es una expresión y está en W. + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _MOVLW(arrVar.addr0); + _ADDWF(FSR.offs, toF); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El valor a asignar está en W, y el índice en la pila + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva valor a H + rVar := GetVarByteFromStk; //toma referencia de la pila + _MOVF(rVar.adrByte0.offs, toW); //índice + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + FreeStkRegisterByte; //Para liberar + end; + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + //En este modo, no se requiere ")" + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_ClearItems(const OpPtr: pointer); +{Limpia el contenido de todo el arreglo} +var + Op: ^TOperand; + xvar: TxpEleVar; + j1: Word; +begin + cIn.Next; //Toma identificador de campo + //Limpia el arreglo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + res.SetAsConst(typByte); //Realmente no es importante devolver un valor + res.valInt {%H-}:= xvar.typ.nItems; //Devuelve tamaño + if xvar.typ.nItems = 0 then exit; //No hay nada que limpiar + if xvar.typ.nItems = 1 then begin //Es de un solo byte + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + end else if xvar.typ.nItems = 2 then begin //Es de 2 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + end else if xvar.typ.nItems = 3 then begin //Es de 3 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + _CLRF(xvar.adrByte0.offs+2); + end else if xvar.typ.nItems = 4 then begin //Es de 4 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + _CLRF(xvar.adrByte0.offs+2); + _CLRF(xvar.adrByte0.offs+3); + end else if xvar.typ.nItems = 5 then begin //Es de 5 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + _CLRF(xvar.adrByte0.offs+2); + _CLRF(xvar.adrByte0.offs+3); + _CLRF(xvar.adrByte0.offs+4); + end else if xvar.typ.nItems = 6 then begin //Es de 6 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + _CLRF(xvar.adrByte0.offs+2); + _CLRF(xvar.adrByte0.offs+3); + _CLRF(xvar.adrByte0.offs+4); + _CLRF(xvar.adrByte0.offs+5); + end else if xvar.typ.nItems = 7 then begin //Es de 7 bytes + _BANKSEL(xvar.adrByte0.bank); + _CLRF(xvar.adrByte0.offs); + _CLRF(xvar.adrByte0.offs+1); + _CLRF(xvar.adrByte0.offs+2); + _CLRF(xvar.adrByte0.offs+3); + _CLRF(xvar.adrByte0.offs+4); + _CLRF(xvar.adrByte0.offs+5); + _CLRF(xvar.adrByte0.offs+6); + end else begin + //Implementa lazo, usando W como índice + _MOVLW(xvar.adrByte0.offs); //dirección inicial + _MOVWF($04); //FSR + //_MOVLW(256-xvar.typ.arrSize); +j1:= _PC; + _CLRF($00); //Limpia [FSR] + _INCF($04, toF); //Siguiente + _MOVLW(xvar.adrByte0.offs+256-xvar.typ.nItems); //End address + _SUBWF($04, toW); + _IFNZERO; + _GOTO(j1); + end; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit(const OpPtr: pointer; nbit: byte); +//Implementa la operación del campo .bit# +var + xvar, tmpVar: TxpEleVar; + msk: byte; + Op: ^TOperand; +begin + cIn.Next; //Toma el identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.bit' + IntToStr(nbit), typBit); //crea variable temporal + tmpVar.addr0 := xvar.addr0; + tmpVar.bit0 := nbit; + //Se devuelve una variable, byte + res.SetAsVariab(tmpVar); //actualiza la referencia (y actualiza el tipo). + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typBit); + msk := Op^.valInt and ($01 << nbit); + res.valBool := msk <> 0; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit0(const OpPtr: pointer); +begin + byte_bit(OpPtr, 0); +end; +procedure TGenCodBas.byte_bit1(const OpPtr: pointer); +begin + byte_bit(OpPtr, 1); +end; +procedure TGenCodBas.byte_bit2(const OpPtr: pointer); +begin + byte_bit(OpPtr, 2); +end; +procedure TGenCodBas.byte_bit3(const OpPtr: pointer); +begin + byte_bit(OpPtr, 3); +end; +procedure TGenCodBas.byte_bit4(const OpPtr: pointer); +begin + byte_bit(OpPtr, 4); +end; +procedure TGenCodBas.byte_bit5(const OpPtr: pointer); +begin + byte_bit(OpPtr, 5); +end; +procedure TGenCodBas.byte_bit6(const OpPtr: pointer); +begin + byte_bit(OpPtr, 6); +end; +procedure TGenCodBas.byte_bit7(const OpPtr: pointer); +begin + byte_bit(OpPtr, 7); +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte alto + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte bajo + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr1, toW); + kMOVWF(H.addr); + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (H,w) + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kINCF(varPtr.addr0, toW); //varPtr.offs+1 -> W (byte alto) + _MOVWF(FSR.offs); //direcciona byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión desrefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona byte bajo + _INCF(FSR.offs,toF); //apunta a byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.word_DefineRegisters; +begin + //Aparte de W, solo se requiere H + AddCallerTo(H); +end; +procedure TGenCodBas.word_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.word_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + typWord.DefineRegister; + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typWord); + tmpVar.addr0 := arrVar.addr0+idx.valInt*2; //¿Y si es de otro banco? + tmpVar.addr1 := arrVar.addr0+idx.valInt*2+1; //¿Y si es de otro banco? + SetResultVariab(tmpVar); +// SetResultExpres(arrVar.typ.refType, true); //Es array de word, devuelve word +// //Como el índice es constante, se puede acceder directamente +// add0 := arrVar.adrByte0.offs+idx.valInt*2; +// _MOVF(add0+1, toW); +// _MOVWF(H.offs); //byte alto +// _MOVF(add0, toW); //byte bajo + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de word, devuelve word + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //Multiplica Idx por 2 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _ADDWF(FSR.offs, toF); + + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de word, devuelve word + _MOVWF(FSR.offs); //idx a FSR (usa como varaib. auxiliar) + _BCF(_STATUS, _C); + _RLF(FSR.offs, toW); //Multiplica Idx por 2 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _ADDWF(FSR.offs, toF); + + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.word_SetItem(const OpPtr: pointer); +//Función que fija un valor indexado +var + WithBrack: Boolean; +var + Op: ^TOperand; + arrVar, rVar: TxpEleVar; + idx, value: TOperand; + idxTar: Int64; + aux: TPicRegister; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + res.SetAsNull; //No devuelve nada + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //Indice constante + //Como el índice es constante, se puede acceder directamente + idxTar := arrVar.adrByte0.offs+idx.valInt*2; //índice destino + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if value.Sto = stConst then begin + //Es una constante + //Byte bajo + if value.LByte=0 then begin //Caso especial + _CLRF(idxTar); + end else begin + _MOVLW(value.LByte); + _MOVWF(idxTar); + end; + //Byte alto + if value.HByte=0 then begin //Caso especial + _CLRF(idxTar+1); + end else begin + _MOVLW(value.HByte); + _MOVWF(idxTar+1); + end; + end else begin + //El valor a asignar es variable o expresión + typWord.DefineRegister; //Para usar H + //Sabemos que hay una expresión word + LoadToRT(value); //Carga resultado en H,W + _MOVWF(idxTar); //Byte bajo + _MOVF(H.offs, toW); + _MOVWF(idxTar+1); //Byte alto + end; + end; + stVariab: begin + //El índice es una variable + //Tenemos la referencia la variable en idx.rvar + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión word + if value.Sto = stConst then begin + //El valor a escribir, es una constante cualquiera + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona + ////// Byte Bajo + if value.LByte = 0 then begin + _CLRF($00); + end else begin + _MOVLW(value.LByte); + _MOVWF($00); //Escribe + end; + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + if value.HByte = 0 then begin + _CLRF($00); + end else begin + _MOVLW(value.HByte); + _MOVWF($00); //Escribe + end; + end else if value.Sto = stVariab then begin + //El valor a escribir, es una variable + //Calcula dirfección de byte bajo + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona + ////// Byte Bajo + _MOVF(value.Loffs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(value.Hoffs, toW); + _MOVWF($00); //Escribe + end else begin + //El valor a escribir, es una expresión y está en H,W + //hay que mover value a arrVar[idx.rvar] + aux := GetAuxRegisterByte; + typWord.DefineRegister; //Para usar H + _MOVWF(aux.offs); //W-> salva W (Valor.H) + //Calcula dirección de byte bajo + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona + ////// Byte Bajo + _MOVF(aux.offs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe + aux.used := false; + end; + end; + stExpres: begin + //El índice es una expresión y está en W. + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if value.Sto = stConst then begin + //El valor a asignar, es una constante + _MOVWF(FSR.offs); //Salva W. + _BCF(_STATUS, _C); + _RLF(FSR.offs, toF); //idx * 2 + _MOVLW(arrVar.addr0); + _ADDWF(FSR.offs, toF); //Direcciona a byte bajo + //Byte bajo + if value.LByte = 0 then begin + _CLRF($00); //Pone a cero + end else begin + _MOVLW(value.LByte); + _MOVWF($00); + end; + //Byte alto + _INCF(FSR.offs, toF); + if value.HByte = 0 then begin + _CLRF($00); //Pone a cero + end else begin + _MOVLW(value.HByte); + _MOVWF($00); + end; + end else if value.Sto = stVariab then begin + _MOVWF(FSR.offs); //Salva W. + _BCF(_STATUS, _C); + _RLF(FSR.offs, toF); //idx * 2 + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona a byte bajo + //Byte bajo + _MOVF(value.Loffs, toW); + _MOVWF($00); + //Byte alto + _INCF(FSR.offs, toF); + _MOVF(value.Hoffs, toW); + _MOVWF($00); + end else begin + //El valor a asignar está en H,W, y el índice (byte) en la pila + typWord.DefineRegister; //Para usar H + aux := GetAuxRegisterByte; + _MOVWF(aux.offs); //W->aux salva W + rVar := GetVarByteFromStk; //toma referencia de la pila + //Calcula dirección de byte bajo + _BCF(_STATUS, _C); + _RLF(rVar.adrByte0.offs, toF); //índice * 2 + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona + ////// Byte Bajo + _MOVF(aux.offs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe + aux.used := false; + end; + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + //En este modo, no se requiere ")" + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.word_ClearItems(const OpPtr: pointer); +begin + +end; +procedure TGenCodBas.word_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.L', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.word_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.H', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte U + if Op^.UByte = 0 then begin + _BANKSEL(U.bank); + _CLRF(U.offs); + end else begin + _MOVLW(Op^.UByte); + _BANKSEL(U.bank); + _MOVWF(U.offs); + end; + //byte E + if Op^.EByte = 0 then begin + _BANKSEL(E.bank); + _CLRF(E.offs); + end else begin + _MOVLW(Op^.EByte); + _BANKSEL(E.bank); + _MOVWF(E.offs); + end; + //byte H + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte 0 + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr3, toW); + kMOVWF(U.addr); + + kMOVF(Op^.rVar.addr2, toW); + kMOVWF(E.addr); + + kMOVF(Op^.rVar.addr1, toW); + kMOVWF(H.addr); + + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (U,E,H,w) + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.dword_DefineRegisters; +begin + //Aparte de W, se requieren H, E y U + AddCallerTo(H); + AddCallerTo(E); + AddCallerTo(U); +end; +procedure TGenCodBas.dword_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda E + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(E.bank); + _MOVF(E.offs, toW);PutComm(';save E'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda U + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(U.bank); + _MOVF(U.offs, toW);PutComm(';save U'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.dword_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Low', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante byte + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.High', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Extra(const OpPtr: pointer); +{Acceso al byte 2 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Extra', typByte); + tmpVar.addr0 := xvar.addr2; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff0000)>>16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Ultra(const OpPtr: pointer); +{Acceso al byte 3 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Ultra', typByte); + tmpVar.addr0 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff000000)>>24; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_LowWord(const OpPtr: pointer); +{Acceso al word de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.LowW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + tmpVar.addr1 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := Op^.ValInt and $ffff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_HighWord(const OpPtr: pointer); +{Acceso al word de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.HighW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr2; //byte bajo + tmpVar.addr1 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := (Op^.ValInt and $ffff0000) >> 16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.GenCodPicReqStopCodeGen; +{Required Stop the Code generation} +begin + posFlash := pic.iFlash; //Probably not the best way. +end; +procedure TGenCodBas.GenCodPicReqStartCodeGen; +{Required Start the Code generation} +begin + pic.iFlash := posFlash; //Probably not the best way. +end; +//Inicialización +procedure TGenCodBas.StartRegs; +{Inicia los registros de trabajo en la lista.} +begin + listRegAux.Clear; + listRegStk.Clear; //limpia la pila + stackTop := 0; + listRegAuxBit.Clear; + listRegStkBit.Clear; //limpia la pila + stackTopBit := 0; +end; +function TGenCodBas.CompilerName: string; +begin + Result := 'PIC10 Compiler' +end; +function TGenCodBas.RAMmax: integer; +begin + Result := high(pic.ram); +end; +function TGenCodBas.DeviceError: string; +begin + exit (pic.MsjError); +end; +procedure TGenCodBas.Cod_JumpIfTrue; +{Codifica una instrucción de salto, si es que el resultado de la última expresión es +verdadera. Se debe asegurar que la expresión es de tipo booleana y de almacenamiento +stVariab o stExpres.} +begin + if res.Sto = stVariab then begin + //Las variables booleanas, pueden estar invertidas + if res.Inverted then begin + _BANKSEL(res.bank); + _BTFSC(res.offs, res.bit); //verifica condición + end else begin + _BANKSEL(res.bank); + _BTFSS(res.offs, res.bit); //verifica condición + end; + end else if res.Sto = stExpres then begin + //Los resultados de expresión, pueden optimizarse + if InvertedFromC then begin + //El resultado de la expresión, está en Z, pero a partir una copia negada de C + //Se optimiza, eliminando las instrucciones de copia de C a Z + pic.iFlash := pic.iFlash-2; + //La lógica se invierte + if res.Inverted then begin //_Lógica invertida + _BTFSS(C.offs, C.bit); //verifica condición + end else begin + _BTFSC(C.offs, C.bit); //verifica condición + end; + end else begin + //El resultado de la expresión, está en Z. Caso normal + if res.Inverted then begin //Lógica invertida + _BTFSC(Z.offs, Z.bit); //verifica condición + end else begin + _BTFSS(Z.offs, Z.bit); //verifica condición + end; + end; + end; +end; +procedure TGenCodBas.ClearDeviceError; +begin + pic.MsjError := ''; +end; +function TGenCodBas.CurrFlash(): integer; +begin + exit(pic.iFlash); +end; +procedure TGenCodBas.ResetFlashAndRAM; +{Reinicia el dispositivo, para empezar a escribir en la posición $000 de la FLASH, y +en la posición inicial de la RAM.} +begin + pic.iFlash := 0; //Ubica puntero al inicio. + pic.ClearMemRAM; //Pone las celdas como no usadas y elimina nombres. + CurrBank := 0; + StartRegs; //Limpia registros de trabajo, auxiliares, y de pila. +end; + +function TGenCodBas.ReturnAttribIn(typ: TxpEleType; const Op: TOperand; + offs: integer): boolean; +{Return a temp variable at the specified address.} +var + tmpVar: TxpEleVar; +begin + if Op.Sto = stVariab then begin + tmpVar := CreateTmpVar('?', typ); //Create temporal variable + tmpVar.addr0 := Op.addr + offs; //Set Address + res.SetAsVariab(tmpVar); + exit(true); + end else begin + GenError('Cannot access to field of this expression.'); + exit(false); + end; +end; +procedure TGenCodBas.SetSharedUnused; +begin + pic.SetSharedUnused; +end; +procedure TGenCodBas.SetSharedUsed; +begin + pic.SetSharedUsed; +end; +procedure TGenCodBas.CompileProcBody(fun: TxpEleFun); +{Compila el cuerpo de un procedimiento} +begin + StartCodeSub(fun); //Inicia codificación de subrutina + CompileInstruction; + if HayError then exit; + if fun.IsInterrupt then begin + //Las interrupciones terminan así + _RETFIE + end else begin + //Para los procedimeintos, podemos terminar siempre con un _RETURN u optimizar, + if OptRetProc then begin + //Verifica es que ya se ha incluido exit(). + if fun.ObligatoryExit<>nil then begin + //Ya tiene un exit() obligatorio y en el final (al menos eso se espera) + //No es necesario incluir el _RETURN(). + end else begin + //No hay un exit(), seguro + _RETLW(0); //instrucción de salida + end; + end else begin + _RETLW(0); //instrucción de salida + end; + end; + EndCodeSub; //termina codificación + {Fija banco al terminar de codificar. Si no se modificó el banco en la compilación + (como en un procedimiento vacío) CurrBank, contiene el banco que se fijó antes de + llamar a CompileProcBody(), que es: + Siemrpe 0 -> en la primera pasada. + Un valor calculado -> en la segund pasada.} + fun.finBnk := CurrBank; //Banco al terminar de codificar + //Calcula tamaño + fun.srcSize := pic.iFlash - fun.adrr; +end; +procedure TGenCodBas.StartCodeSub(fun: TxpEleFun); +{debe ser llamado para iniciar la codificación de una subrutina} +begin +// iFlashTmp := pic.iFlash; //guarda puntero +// pic.iFlash := curBloSub; //empieza a codificar aquí +end; +procedure TGenCodBas.EndCodeSub; +{debe ser llamado al terminar la codificaión de una subrutina} +begin +// curBloSub := pic.iFlash; //indica siguiente posición libre +// pic.iFlash := iFlashTmp; //retorna puntero +end; +procedure TGenCodBas.FunctParam(fun: TxpEleFunBase); +{Rutina genérica, que se usa antes de leer los parámetros de una función.} +begin + {Haya o no, parámetros se debe proceder como en cualquier expresión, asumiendo que + vamos a devolver una expresión.} + SetResultExpres(fun.typ); //actualiza "RTstate" +end; +procedure TGenCodBas.FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); +{Rutina genérica para llamar a una función definida por el usuario.} +var + xfun: TxpEleFun; + fundec: TxpEleFunDec; +begin + AddrUndef := false; + if fun.idClass = eltFunc then begin + //Is a implemented function + xfun := TxpEleFun(fun); + //By now is not implemented the paging + _CALL(xfun.adrr); //codifica el salto + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := xfun.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Must be a declaration + fundec := TxpEleFunDec(fun); + if fundec.implem <> nil then begin + //Is implemented + _CALL(fundec.implem.adrr); + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := fundec.implem.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Not implemented YET + _CALL($1234); //Needs to be completed later. + AddrUndef := true; + end; + end; +end; +procedure TGenCodBas.CompileIF; +{Compila una extructura IF} + procedure SetFinalBank(bnk1, bnk2: byte); + {Fija el valor de CurrBank, de acuerdo a dos bancos finales.} + begin + if OptBnkAftIF then begin + //Optimizar banking + if bnk1 = bnk2 then begin + //Es el mismo banco (aunque sea 255). Lo deja allí. + end else begin + CurrBank := 255; //Indefinido + end; + end else begin + //Sin optimización + _BANKRESET; + end; + end; +var + jFALSE, jEND_TRUE: integer; + bnkExp, bnkTHEN, bnkELSE: Byte; +begin + if not GetExpressionBool then exit; + bnkExp := CurrBank; //Guarda el banco inicial + if not CaptureStr('then') then exit; //toma "then" + //Aquí debe estar el cuerpo del "if" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Es verdadero, siempre se ejecuta + if not CompileNoConditionBody(true) then exit; + //Compila los ELSIF que pudieran haber + while cIn.tokL = 'elsif' do begin + cIn.Next; //toma "elsif" + if not GetExpressionBool then exit; + if not CaptureStr('then') then exit; //toma "then" + //Compila el cuerpo pero sin código + if not CompileNoConditionBody(false) then exit; + end; + //Compila el ELSE final, si existe. + if cIn.tokL = 'else' then begin + //Hay bloque ELSE, pero no se ejecutará nunca + cIn.Next; //toma "else" + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end else begin + VerifyEND; + end; + end else begin + //Es falso, nunca se ejecuta + if not CompileNoConditionBody(false) then exit; + if cIn.tokL = 'else' then begin + //hay bloque ELSE, que sí se ejecutará + cIn.Next; //toma "else" + if not CompileNoConditionBody(true) then exit; + VerifyEND; + end else if cIn.tokL = 'elsif' then begin + cIn.Next; + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + //No es necesario verificar el END final. + end else begin + VerifyEND; + end; + end; + end; + stVariab, stExpres:begin + Cod_JumpIfTrue; + _GOTO_PEND(jFALSE); //salto pendiente + //Compila la parte THEN + if not CompileConditionalBody(bnkTHEN) then exit; + //Verifica si sigue el ELSE + if cIn.tokL = 'else' then begin + //Es: IF ... THEN ... ELSE ... END + cIn.Next; //toma "else" + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CurrBank := bnkExp; //Fija el banco inicial antes de compilar + if not CompileConditionalBody(bnkELSE) then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, bnkELSE); //Manejo de bancos + VerifyEND; //puede salir con error + end else if cIn.tokL = 'elsif' then begin + //Es: IF ... THEN ... ELSIF ... + cIn.Next; + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, CurrBank); //Manejo de bancos + //No es necesario verificar el END final. + end else begin + //Es: IF ... THEN ... END. (Puede ser recursivo) + _LABEL(jFALSE); //termina de codificar el salto + SetFinalBank(bnkExp, bnkTHEN); //Manejo de bancos + VerifyEND; //puede salir con error + end; + end; + end; +end; +procedure TGenCodBas.CompileREPEAT; +{Compila uan extructura WHILE} +var + l1: Word; +begin + l1 := _PC; //guarda dirección de inicio + CompileCurBlock; + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('until') then exit; //toma "until" + if not GetExpressionBool then exit; + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //lazo nulo + end else begin + //lazo infinito + _GOTO(l1); + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO(l1); + //sale cuando la condición es verdadera + end; + end; +end; +procedure TGenCodBas.CompileWHILE; +{Compila una extructura WHILE} +var + l1: Word; + dg: Integer; + bnkEND, bnkExp1, bnkExp2: byte; +begin + l1 := _PC; //guarda dirección de inicio + bnkExp1 := CurrBank; //Guarda el banco antes de la expresión + if not GetExpressionBool then exit; //Condición + bnkExp2 := CurrBank; //Guarda el banco antes de la expresión + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "while" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Lazo infinito + if not CompileNoConditionBody(true) then exit; + if not VerifyEND then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); + end else begin + //Lazo nulo. Compila sin generar código. + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkEND) then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); //salta a evaluar la condición + if not VerifyEND then exit; + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end; + end; + CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE +end; +procedure TGenCodBas.CompileFOR; +{Compila uan extructura WHILE} +var + l1: Word; + dg: Integer; + Op1, Op2: TOperand; + opr1: TxpOperator; + bnkFOR: byte; +begin + GetOperand(Op1, true); + if Op1.Sto <> stVariab then begin + GenError(ER_VARIAB_EXPEC); + exit; + end; + if HayError then exit; + if (Op1.Typ<>typByte) and (Op1.Typ<>typWord) then begin + GenError(ER_ONL_BYT_WORD); + exit; + end; + cIn.SkipWhites; + opr1 := GetOperator(Op1); //debe ser ":=" + if opr1 = nil then begin //no sigue operador + GenError(ER_ASIG_EXPECT); + exit; //termina ejecucion + end; + if opr1.txt <> ':=' then begin + GenError(ER_ASIG_EXPECT); + exit; + end; + Op2 := GetExpression(0); + if HayError then exit; + //Ya se tiene la asignación inicial + Oper(Op1, opr1, res); //codifica asignación + if HayError then exit; + if not CaptureStr('to') then exit; + //Toma expresión Final + res := GetExpression(0); + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "for" + if (res.Sto = stConst) or (res.Sto = stVariab) then begin + //Es un for con valor final de tipo constante + //Se podría optimizar, si el valor inicial es también constante + l1 := _PC; //guarda dirección de inicio + //Codifica rutina de comparación, para salir + opr1 := Op1.Typ.FindBinaryOperator('<='); //Busca operador de comparación + if opr1 = nullOper then begin + GenError('Internal: No operator <= defined for %s.', [Op1.Typ.name]); + exit; + end; + Op2 := res; //Copia porque la operación Oper() modificará res + Oper(Op1, opr1, Op2); //"res" mantiene la constante o variable + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkFOR) then exit; + if not VerifyEND then exit; + //Incrementa variable cursor + if Op1.Typ = typByte then begin + _INCF(Op1.offs, toF); + end else if Op1.Typ = typWord then begin + _BANKSEL(oP1.bank); + _INCF(Op1.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(Op1.Hoffs, toF); + end; + _GOTO(l1); //repite el lazo + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end else begin + GenError('Last value must be Constant or Variable'); + exit; + end; +end; +constructor TGenCodBas.Create; +begin + inherited Create; + ID := 10; //Identifica al compilador PIC10 + devicesPath := patDevices10; + OnReqStartCodeGen:=@GenCodPicReqStartCodeGen; + OnReqStopCodeGen:=@GenCodPicReqStopCodeGen; + pic := TPIC10.Create; + picCore := pic; //Referencia picCore + + //Crea variables de trabajo + varStkBit := TxpEleVar.Create; + varStkBit.typ := typBit; + varStkByte := TxpEleVar.Create; + varStkByte.typ := typByte; + varStkWord := TxpEleVar.Create; + varStkWord.typ := typWord; + varStkDWord := TxpEleVar.Create; + varStkDWord.typ := typDWord; + //Crea lista de variables temporales + varFields := TxpEleVars.Create(true); + //Inicializa contenedores + listRegAux := TPicRegister_list.Create(true); + listRegStk := TPicRegister_list.Create(true); + listRegAuxBit:= TPicRegisterBit_list.Create(true); + listRegStkBit:= TPicRegisterBit_list.Create(true); + stackTop := 0; //Apunta a la siguiente posición libre + stackTopBit := 0; //Apunta a la siguiente posición libre + {Crea registro de trabajo W. El registro W, es el registro interno del PIC, y no + necesita un mapeo en RAM. Solo se le crea aquí, para poder usar su propiedad "used"} + W := TPicRegister.Create; + W.assigned := false; //se le marca así, para que no se intente usar + {Crea registro de trabajo Z. El registro Z, es el registro interno del PIC, y está + siempre asignado en RAM. } + Z := TPicRegisterBit.Create; + Z.addr := _STATUS; + Z.bit := _Z; + Z.assigned := true; //ya está asignado desde el principio + {Crea registro de trabajo C. El registro C, es el registro interno del PIC, y está + siempre asignado en RAM. } + C := TPicRegisterBit.Create; + C.addr := _STATUS; + C.bit := _C; + C.assigned := true; //ya está asignado desde el principio + //Crea registro interno INDF + INDF := TPicRegister.Create; + INDF.addr := $00; + INDF.assigned := true; //ya está asignado desde el principio + {Crea registro auxiliar FSR. El registro FSR, es un registro interno del PIC, y está + siempre asignado en RAM. } + FSR := TPicRegister.Create; + FSR.addr := $04; + FSR.assigned := true; //ya está asignado desde el principio + + callCurrFlash := @CurrFlash; + callResetFlashAndRAM:=@ResetFlashAndRAM; + callCreateVarInRAM := @CreateVarInRAM; + callSetSharedUnused := @SetSharedUnused; + callSetSharedUsed := @SetSharedUsed; + callReturnAttribIn := @ReturnAttribIn; + callDeviceError := @DeviceError; + callClearDeviceError := @ClearDeviceError; + callCompileProcBody := @CompileProcBody; + callFunctParam := @FunctParam; + callFunctCall := @FunctCall; + callStartCodeSub := @StartCodeSub; + callEndCodeSub := @EndCodeSub; + + callCompileIF := @CompileIF;; + callCompileWHILE := @CompileWHILE; + callCompileREPEAT := @CompileREPEAT; + callCompileFOR := @CompileFOR; +end; +destructor TGenCodBas.Destroy; +begin + INDF.Destroy; + FSR.Destroy; + C.Destroy; + Z.Destroy; + W.Destroy; + listRegAuxBit.Destroy; + listRegStkBit.Destroy; + listRegStk.Destroy; + listRegAux.Destroy; + varFields.Destroy; + varStkBit.Destroy; + varStkByte.Destroy; + varStkWord.Destroy; + varStkDWord.Destroy; + pic.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/GenCodBas_PIC16.pas b/Source/GenCodBas_PIC16.pas new file mode 100644 index 00000000..e864b778 --- /dev/null +++ b/Source/GenCodBas_PIC16.pas @@ -0,0 +1,3314 @@ +{Unidad que agrega campos necesarios a la clase TCompilerBase, para la generación de +código con el PIC16F.} +unit GenCodBas_PIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, XpresElementsPIC, XpresTypesPIC, PicCore, Pic16Utils, + CompBase, ParserDirec, Globales, CompOperands, MisUtils, LCLType, LCLProc; +const + STACK_SIZE = 8; //tamaño de pila para subrutinas en el PIC + MAX_REGS_AUX_BYTE = 6; //cantidad máxima de registros a usar + MAX_REGS_AUX_BIT = 4; //cantidad máxima de registros bit a usar + MAX_REGS_STACK_BYTE = 8; //cantidad máxima de registros a usar en la pila + MAX_REGS_STACK_BIT = 4; //cantidad máxima de registros a usar en la pila + +type + {Información sobre los saltos con la instrucción kIF_SET} + TIfInfo = record + iFlash1 : integer; //iFlash al empezar la instrucción kIF + curBank1 : byte; //currBank al empezar la instrucción kIF + hasBankInst: boolean; //Flag to indicate there is bank switch instructions + igoto : integer; //Address where is GOTO + curBank2 : byte; + iFlash3 : integer; //iFlash al finalizar la instrucción kIF + curBank3 : byte; //currBank al finalizar la instrucción kIF + end; + + { TGenCodBas } + TGenCodBas = class(TParserDirecBase) + private + linRep : string; //línea para generar de reporte + posFlash: Integer; + procedure ClearDeviceError; + procedure Cod_JumpIfTrue; + procedure CompileFOR; + procedure CompileIF; + procedure CompileProcBody(fun: TxpEleFun); + procedure CompileREPEAT; + procedure CompileWHILE; + function CurrFlash(): integer; + function DeviceError: string; + procedure GenCodPicReqStartCodeGen; + procedure GenCodPicReqStopCodeGen; + function GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; + function GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out + value: TOperand): boolean; + procedure ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); + procedure ResetFlashAndRAM; + function ReturnAttribIn(typ: TxpEleType; const Op: TOperand; offs: integer + ): boolean; + procedure SetSharedUnused; + procedure SetSharedUsed; + procedure word_GetItem(const OpPtr: pointer); + protected + procedure FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure FunctParam(fun: TxpEleFunBase); + procedure StartCodeSub(fun: TxpEleFun); + procedure EndCodeSub; + protected + //Registros de trabajo + W : TPicRegister; //Registro Interno. + Z : TPicRegisterBit; //Registro Interno. + C : TPicRegisterBit; //Registro Interno. + H : TxpEleVar; //Registros de trabajo. Se crean siempre. + E : TxpEleVar; //Registros de trabajo. Se crean siempre. +// U : TPicRegister; //Registros de trabajo. Se crean siempre. + U : TxpEleVar; + //Registros auxiliares + INDF : TPicRegister; //Registro Interno. + FSR : TPicRegister; //Registro Interno. + procedure PutLabel(lbl: string); inline; + procedure PutTopComm(cmt: string; replace: boolean = true); inline; + procedure PutComm(cmt: string); inline; + procedure PutFwdComm(cmt: string); inline; + function ReportRAMusage: string; + function ValidateByteRange(n: integer): boolean; + function ValidateWordRange(n: integer): boolean; + function ValidateDWordRange(n: Int64): boolean; + protected + procedure GenerateROBdetComment; + procedure GenerateROUdetComment; + protected //Rutinas de gestión de memoria de bajo nivel + procedure AssignRAM(out addr: word; regName: string; shared: boolean); //Asigna a una dirección física + procedure AssignRAMbit(out addr: word; out bit: byte; regName: string; + shared: boolean); //Asigna a una dirección física + function CreateRegisterByte(RegType: TPicRegType): TPicRegister; + function CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; + protected //Variables temporales + {Estas variables temporales, se crean como forma de acceder a campos de una variable + como varbyte.bit o varword.low. Se almacenan en "varFields" y se eliminan al final} + varFields: TxpEleVars; //Contenedor + function CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; + {Estas variables se usan para operaciones en el generador de código. + No se almacenan en "varFields". Así se definió al principio, pero podrían también + almacenarse, asumiendo que no importe crear variables dinámicas.} + function NewTmpVarWord(adL, adH: word): TxpEleVar; + function NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; + protected //Rutinas de gestión de memoria para registros + varStkBit : TxpEleVar; //variable bit. Usada para trabajar con la pila + varStkByte: TxpEleVar; //variable byte. Usada para trabajar con la pila + varStkWord: TxpEleVar; //variable word. Usada para trabajar con la pila + varStkDWord: TxpEleVar; //variable dword. Usada para trabajar con la pila + function GetAuxRegisterByte: TPicRegister; + function GetAuxRegisterBit: TPicRegisterBit; + //Gestión de la pila + function GetStkRegisterByte: TPicRegister; + function GetStkRegisterBit: TPicRegisterBit; + function GetVarBitFromStk: TxpEleVar; + function GetVarByteFromStk: TxpEleVar; + function GetVarWordFromStk: TxpEleVar; + function GetVarDWordFromStk: TxpEleVar; + function FreeStkRegisterBit: boolean; + function FreeStkRegisterByte: boolean; + function FreeStkRegisterWord: boolean; + function FreeStkRegisterDWord: boolean; + protected //Rutinas de gestión de memoria para variables + {Estas rutinas estarían mejor ubicadas en TCompilerBase, pero como dependen del + objeto "pic", se colocan mejor aquí.} + procedure AssignRAMinBit(absAdd, absBit: integer; var addr: word; + var bit: byte; regName: string; shared: boolean = false); + procedure AssignRAMinByte(absAdd: integer; var addr: word; regName: string; + shared: boolean = false); + procedure CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); + protected //Métodos para fijar el resultado + //Métodos básicos + procedure SetResultNull; + procedure SetResultConst(typ: TxpEleType); + procedure SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); + procedure SetResultVarRef(rVarBase: TxpEleVar); + procedure SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); + //Fija el resultado de ROB como constante. + procedure SetROBResultConst_bool(valBool: boolean); + procedure SetROBResultConst_bit (valBit: boolean); + procedure SetROBResultConst_byte(valByte: integer); + procedure SetROBResultConst_char(valByte: integer); + procedure SetROBResultConst_word(valWord: integer); + procedure SetROBResultConst_dword(valWord: Int64); + //Fija el resultado de ROB como variable + procedure SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + //Fija el resultado de ROB como expresión + {El parámetro "Opt", es más que nada para asegurar que solo se use con Operaciones + binarias.} + procedure SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_byte(Opt: TxpOperation); + procedure SetROBResultExpres_char(Opt: TxpOperation); + procedure SetROBResultExpres_word(Opt: TxpOperation); + procedure SetROBResultExpres_dword(Opt: TxpOperation); + //Fija el resultado de ROU + procedure SetROUResultConst_bit(valBit: boolean); + procedure SetROUResultConst_byte(valByte: integer); + procedure SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetROUResultVarRef(rVarBase: TxpEleVar); + procedure SetROUResultExpres_bit(Inverted: boolean); + procedure SetROUResultExpres_byte; + procedure SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); + //Adicionales + procedure ChangeResultBitToBool; + procedure ChangeResultCharToByte; + function ChangePointerToExpres(var ope: TOperand): boolean; + protected //Instrucciones que no manejan el cambio de banco + procedure CodAsmFD(const inst: TPIC16Inst; const f: byte; d: TPIC16destin); + procedure CodAsmK(const inst: TPIC16Inst; const k: byte); + procedure _BANKSEL(targetBank: byte); + procedure GenCodBank(targetAdrr: word); + procedure _BANKRESET; + function _PC: word; + function _CLOCK: integer; + procedure _LABEL(igot: integer); + //Instrucciones simples + procedure _ADDLW(const k: word); + procedure _ADDWF(const f: byte; d: TPIC16destin); + procedure _ANDLW(const k: word); + procedure _ANDWF(const f: byte; d: TPIC16destin); + procedure _BCF(const f, b: byte); + procedure _BSF(const f, b: byte); + procedure _BTFSC(const f, b: byte); + procedure _BTFSS(const f, b: byte); + procedure _CALL(const a: word); + procedure _CLRF(const f: byte); + procedure _CLRW; + procedure _CLRWDT; + procedure _COMF(const f: byte; d: TPIC16destin); + procedure _DECF(const f: byte; d: TPIC16destin); + procedure _DECFSZ(const f: byte; d: TPIC16destin); + procedure _GOTO(const a: word); + procedure _GOTO_PEND(out igot: integer); + procedure _INCF(const f: byte; d: TPIC16destin); + procedure _INCFSZ(const f: byte; d: TPIC16destin); + procedure _IORLW(const k: word); + procedure _IORWF(const f: byte; d: TPIC16destin); + procedure _MOVF(const f: byte; d: TPIC16destin); + procedure _MOVLW(const k: word); + procedure _MOVWF(const f: byte); + procedure _NOP; + procedure _RETFIE; + procedure _RETLW(const k: word); + procedure _RETURN; + procedure _RLF(const f: byte; d: TPIC16destin); + procedure _RRF(const f: byte; d: TPIC16destin); + procedure _SLEEP; + procedure _SUBLW(const k: word); + procedure _SUBWF(const f: byte; d: TPIC16destin); + procedure _SWAPF(const f: byte; d: TPIC16destin); + procedure _XORLW(const k: word); + procedure _XORWF(const f: byte; d: TPIC16destin); + protected //Instrucciones "k" + //Instrucciones equivalentes + procedure kADDLW(const k: word); + procedure kADDWF(addr: word; d: TPIC16destin); + procedure kANDLW(const k: word); + procedure kANDWF(addr: word; d: TPIC16destin); + procedure kBCF(const f: TPicRegisterBit); + procedure kBSF(const f: TPicRegisterBit); + procedure kBTFSC(const f: TPicRegisterBit); + procedure kBTFSS(const f: TPicRegisterBit); + procedure kCALL(const a: word); + procedure kCLRF(addr: word); + procedure kCLRW; + procedure kCLRWDT; + procedure kCOMF(addr: word; d: TPIC16Destin); + procedure kDECF(addr: word; d: TPIC16Destin); + procedure kDECFSZ(const f: word; d: TPIC16destin); + procedure kGOTO(const a: word); + procedure kGOTO_PEND(out igot: integer); + procedure kINCF(addr: word; d: TPIC16destin); + procedure kINCFSZ(const f: word; d: TPIC16destin); + procedure kIORLW(const k: word); + procedure kIORWF(addr: word; d: TPIC16destin); + procedure kMOVF(addr: word; d: TPIC16destin); + procedure kMOVLW(const k: word); + procedure kMOVWF(addr: word); + procedure kNOP; + procedure kRETFIE; + procedure kRETLW(const k: word); + procedure kRETURN; + procedure kRLF(addr: word; d: TPIC16destin); + procedure kRRF(addr: word; d: TPIC16destin); + procedure kSLEEP; + procedure kSUBLW(const k: word); + procedure kSUBWF(addr: word; d: TPIC16destin); + procedure kSWAPF(addr: word; d: TPIC16destin); + procedure kXORLW(const k: word); + procedure kXORWF(addr: word; d: TPIC16destin); + //Instrucciones adicionales + procedure kSHIFTR(addr: word; d: TPIC16destin); + procedure kSHIFTL(addr: word; d: TPIC16destin); + procedure kIF_BSET(const f: TPicRegisterBit; out info: TIfInfo); + procedure kIF_BSET_END(const info: TIfInfo; UpdateBank: boolean = true); + procedure kIF_BCLR(const f: TPicRegisterBit; out igot: integer); + procedure kIF_BCLR_END(igot: integer); + + public //Acceso a registro de trabajo +// property H_register: TPicRegister read H; +// property E_register: TPicRegister read E; +// property U_register: TPicRegister read U; + protected //Funciones de tipos + ///////////////// Tipo Bit //////////////// + procedure bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure bit_DefineRegisters; + procedure bit_SaveToStk; + //////////////// Tipo Byte ///////////// + procedure byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure byte_DefineRegisters; + procedure byte_SaveToStk; + procedure byte_GetItem(const OpPtr: pointer); + procedure byte_SetItem(const OpPtr: pointer); + procedure byte_ClearItems(const OpPtr: pointer); + procedure byte_bit(const OpPtr: pointer; nbit: byte); + procedure byte_bit0(const OpPtr: pointer); + procedure byte_bit1(const OpPtr: pointer); + procedure byte_bit2(const OpPtr: pointer); + procedure byte_bit3(const OpPtr: pointer); + procedure byte_bit4(const OpPtr: pointer); + procedure byte_bit5(const OpPtr: pointer); + procedure byte_bit6(const OpPtr: pointer); + procedure byte_bit7(const OpPtr: pointer); + //////////////// Tipo Word ///////////// + procedure word_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure word_DefineRegisters; + procedure word_SaveToStk; + procedure word_Low(const OpPtr: pointer); + procedure word_High(const OpPtr: pointer); + //////////////// Tipo DWord ///////////// + procedure dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure dword_DefineRegisters; + procedure dword_SaveToStk; + procedure dword_Extra(const OpPtr: pointer); + procedure dword_High(const OpPtr: pointer); + procedure dword_HighWord(const OpPtr: pointer); + procedure dword_Low(const OpPtr: pointer); + procedure dword_LowWord(const OpPtr: pointer); + procedure dword_Ultra(const OpPtr: pointer); + public //Acceso a campos del PIC + function PICName: string; override; + function PICNameShort: string; override; + function PICnBanks: byte; override; //Number of RAM banks + function PICCurBank: byte; override; //Current RAM bank + function PICBank(i: byte): TPICRAMBank; override; //Return a RAM bank + function PICnPages: byte; override; //Number of FLASH pages + function PICPage(i: byte): TPICFlashPage; override; //Return a FLASH page + function RAMmax: integer; override; + public //Inicialización + pic : TPIC16; //Objeto PIC de la serie 16. + procedure StartRegs; + function CompilerName: string; override; + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; +implementation +var + TXT_SAVE_W, TXT_SAVE_Z, TXT_SAVE_H, MSG_NO_ENOU_RAM, MSG_VER_CMP_EXP, + MSG_STACK_OVERF, MSG_NOT_IMPLEM, ER_VARIAB_EXPEC, ER_ONL_BYT_WORD, + ER_ASIG_EXPECT + : string; + +procedure SetLanguage; +begin + ParserDirec.SetLanguage; + {$I ..\language\tra_GenCodBas.pas} +end; +{ TGenCodPic } +procedure TGenCodBas.ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); +begin + linRep := linRep + regPtr^.name + + ' DB ' + 'bnk'+ IntToStr(bnk) + ':$' + IntToHex(offs, 3) + LineEnding; +end; +procedure TGenCodBas.PutLabel(lbl: string); +{Agrega uan etiqueta antes de la instrucción. Se recomienda incluir solo el nombre de +la etiqueta, sin ":", ni comentarios, porque este campo se usará para desensamblar.} +begin + pic.addTopLabel(lbl); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutTopComm(cmt: string; replace: boolean = true); +//Agrega comentario al inicio de la posición de memoria +begin + pic.addTopComm(cmt, replace); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutComm(cmt: string); +//Agrega comentario lateral al código. Se llama después de poner la instrucción. +begin + pic.addSideComm(cmt, true); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutFwdComm(cmt: string); +//Agrega comentario lateral al código. Se llama antes de poner la instrucción. +begin + pic.addSideComm(cmt, false); //agrega línea al código ensmblador +end; +function TGenCodBas.ReportRAMusage: string; +{Genera un reporte de uso de la memoria RAM} +begin + linRep := ''; + pic.ExploreUsed(@ProcByteUsed); + Result := linRep; +end; +function TGenCodBas.ValidateByteRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<256) then + exit(true) + else begin + GenError('Numeric value exceeds a byte range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateWordRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<65536) then + exit(true) + else begin + GenError('Numeric value exceeds a word range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateDWordRange(n: Int64): boolean; +begin + if (n>=0) and (n<$100000000) then + exit(true) + else begin + GenError('Numeric value exceeds a dword range.'); + exit(false); + end; +end; +procedure TGenCodBas.GenerateROBdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación binaria, que es cuando está definido operType, p1, y p2.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ',' + + p2^.StoOpChr + ':' + p2^.Typ.name + ')', false); + end; +end; +procedure TGenCodBas.GenerateROUdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación unaria, que es cuando está definido operType, y p1.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ')', false); + end; +end; +//Rutinas de gestión de memoria de bajo nivel +procedure TGenCodBas.AssignRAM(out addr: word; regName: string; shared: boolean); +//Asocia a una dirección física de la memoria del PIC. +//Si encuentra error, devuelve el mensaje de error en "MsjError" +begin + {Esta dirección física, la mantendrá este registro hasta el final de la compilación + y en teoría, hasta el final de la ejecución de programa en el PIC.} + if not pic.GetFreeByte(addr, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, regName); //pone nombre a registro +end; +procedure TGenCodBas.AssignRAMbit(out addr: word; out bit: byte; regName: string; shared: boolean); +begin + if not pic.GetFreeBit(addr, bit, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAMbit(addr, bit, regName); //pone nombre a bit +end; +function TGenCodBas.CreateRegisterByte(RegType: TPicRegType): TPicRegister; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegister; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegister.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAux.Add(reg); //agrega a lista + if listRegAux.Count > MAX_REGS_AUX_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegisterBit; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegisterBit.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAuxBit.Add(reg); //agrega a lista + if listRegAuxBit.Count > MAX_REGS_AUX_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; +{Crea una variable temporal agregándola al contenedor varFields, que es +limpiado al iniciar la compilación. Notar que la variable temporal creada, no tiene +RAM asiganda.} +var + tmpVar: TxpEleVar; +begin + tmpVar:= TxpEleVar.Create; + tmpVar.name := nam; + tmpVar.typ := eleTyp; + tmpVar.adicPar.hasAdic := decNone; + tmpVar.adicPar.hasInit := false; + tmpVar.IsTmp := true; //Para que se pueda luego identificar. + varFields.Add(tmpVar); //Agrega + Result := tmpVar; +end; +function TGenCodBas.NewTmpVarWord(adL, adH: word): TxpEleVar; +{Crea una variable temporal Word, con las direcciones de los registros indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typWord; + Result.addr0 := adL; //asigna direcciones + Result.addr1 := adH; +end; +//Variables temporales +function TGenCodBas.NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; +{Crea una variable temporal DWord, con las direcciones de los registros indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typDWord; + Result.addr0 := adL; //asigna direcciones + Result.addr1 := adH; + Result.addr2 := adE; + Result.addr3 := adU; +end; +//Rutinas de Gestión de memoria +function TGenCodBas.GetAuxRegisterByte: TPicRegister; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegister; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAux do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then begin + reg.used := true; + exit(reg); + end; + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterByte(prtAuxReg); + if reg = nil then exit(nil); //hubo error + regName := 'aux'+IntToSTr(listRegAux.Count); + AssignRAM(reg.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetAuxRegisterBit: TPicRegisterBit; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegisterBit; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAuxBit do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then + exit(reg); + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterBit(prtAuxReg); + if reg = nil then exit(nil); //hubo errir + regName := 'aux'+IntToSTr(listRegAuxBit.Count); + AssignRAMbit(reg.addr, reg.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetStkRegisterByte: TPicRegister; +{Pone un registro de un byte, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterByte(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegister; + regName: String; +begin + //Validación + if stackTop>MAX_REGS_STACK_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTop>listRegStk.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegister.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStk.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStk.Count); + AssignRAM(reg0.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStk[stackTop]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTop); //actualiza +end; +function TGenCodBas.GetStkRegisterBit: TPicRegisterBit; +{Pone un registro de un bit, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterBit(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegisterBit; + regName: String; +begin + //Validación + if stackTopBit>MAX_REGS_STACK_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTopBit>listRegStkBit.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegisterBit.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStkBit.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStkBit.Count); + AssignRAMbit(reg0.addr, reg0.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStkBit[stackTopBit]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTopBit); //actualiza +end; +function TGenCodBas.GetVarBitFromStk: TxpEleVar; +{Devuelve la referencia a una variable bit, que representa al último bit agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegisterBit; +begin + topreg := listRegStkBit[stackTopBit-1]; //toma referecnia de registro de la pila + //Usamos la variable "varStkBit" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkBit.addr0 := topreg.addr; + varStkBit.bit0 := topreg.bit; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkBit; +end; +function TGenCodBas.GetVarByteFromStk: TxpEleVar; +{Devuelve la referencia a una variable byte, que representa al último byte agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + //Usamos la variable "varStkByte" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkByte.addr0 := topReg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkByte; +end; +function TGenCodBas.GetVarWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable word, que representa al último word agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkWord; +end; +function TGenCodBas.GetVarDWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable Dword, que representa al último Dword agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkDWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkDWord.addr3 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkDWord.addr2 := topreg.addr; + topreg := listRegStk[stackTop-3]; //toma referencia de registro de la pila + varStkDWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-4]; //toma referencia de registro de la pila + varStkDWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkDWord; +end; +function TGenCodBas.FreeStkRegisterBit: boolean; +{Libera el último bit, que se pidió a la RAM. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTopBit=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTopBit); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterByte: boolean; +{Libera el último byte, que se pidió a la RAM. Devuelve en "reg", la dirección del último + byte pedido. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTop=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterWord: boolean; +{Libera el último word, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=1 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 2); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterDWord: boolean; +{Libera el último dword, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=3 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 4); //Baja puntero + exit(true); +end; +////Rutinas de gestión de memoria para variables +procedure TGenCodBas.AssignRAMinBit(absAdd, absBit: integer; + var addr: word; var bit: byte; regName: string; shared: boolean = false); +{Aeigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAMbit(addr, bit, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + bit := absBit; //para los bits no hay transformación + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAMbit(addr, bit, regName); + end; +end; +procedure TGenCodBas.AssignRAMinByte(absAdd: integer; + var addr: word; regName: string; shared: boolean = false); +{Asigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAM(addr, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAM(addr, regName); + if pic.MsjError<>'' then begin + GenError(pic.MsjError); + pic.MsjError := ''; //Para evitar generar otra vez el mensaje + exit; + end; + end; +end; +procedure TGenCodBas.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); +{Rutina para asignar espacio físico a una variable. La variable, es creada en memoria +con los parámetros que posea en ese momento. Si está definida como ABSOLUTE, se le +creará en la posicón indicada. } +var + varName: String; + absAdd: integer; + absBit, nbytes: integer; + typ: TxpEleType; + //offs, bnk: byte; + addr: word; +begin + //Valores solicitados. Ya deben estar iniciado este campo. + varName := nVar.name; + typ := nVar.typ; + if nVar.adicPar.hasAdic = decAbsol then begin + absAdd := nVar.adicPar.absAddr; + if typ.IsBitSize then begin + absBit := nVar.adicPar.absBit; + end else begin + absBit := -1; + end; + end else begin + absAdd := -1; //no aplica + absBit := -1; //no aplica + end; + //Asigna espacio, de acuerdo al tipo + if typ = typBit then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typBool then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typByte then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typChar then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 2 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + end; + end else if typ = typDWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 4 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + AssignRAMinByte(-1, nVar.addr2, varName+'@2', shared); + AssignRAMinByte(-1, nVar.addr3, varName+'@3', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + AssignRAMinByte(absAdd+2, nVar.addr2, varName+'@2'); + AssignRAMinByte(absAdd+3, nVar.addr3, varName+'@3'); + end; + end else if typ.catType = tctArray then begin + //Es un arreglo de algún tipo + if absAdd<>-1 then begin + //Se pide mapearlo de forma absoluta + GenError(MSG_NOT_IMPLEM, [varName]); + exit; + end; + //Asignamos espacio en RAM + nbytes := typ.nItems * typ.itmType.size; + if not pic.GetFreeBytes(nbytes, addr) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, nVar.name); //Nombre solo al primer byte + //Fija dirección física. Se usa solamente "addr0", como referencia, porque + //no se tienen suficientes registros para modelar todo el arreglo. + nVar.addr0 := addr; + end else if typ.catType = tctPointer then begin + //Es un puntero a algún tipo. + //Los punteros cortos, se manejan como bytes + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else begin + GenError(MSG_NOT_IMPLEM, [varName]); + end; + if HayError then exit; + if typ.OnGlobalDef<>nil then typ.OnGlobalDef(varName, ''); +end; +//Métodos para fijar el resultado +procedure TGenCodBas.SetResultNull; +{Fija el resultado como NULL.} +begin + res.SetAsNull; + InvertedFromC:=false; //para limpiar el estado + res.Inverted := false; +end; +procedure TGenCodBas.SetResultConst(typ: TxpEleType); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsConst(typ); + InvertedFromC:=false; //para limpiar el estado + {Se asume que no se necesita invertir la lógica, en una constante (booleana o bit), ya + que en este caso, tenemos control pleno de su valor} + res.Inverted := false; +end; +procedure TGenCodBas.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsVariab(rVar); + InvertedFromC:=false; //para limpiar el estado + //"Inverted" solo tiene sentido, para los tipos bit y boolean + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); +{Fija los parámetros del resultado de una subexpresion (en "res"). Este método se debe +ejecutar, siempre antes de evaluar cada subexpresión. Más exactamente, antes de generar +código para ña subexpresión, porque esta rutina puede generar su propio código.} +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + //Fija como expresión + res.SetAsExpres(typ); + //Limpia el estado. Esto es útil que se haga antes de generar el código para una operación + InvertedFromC:=false; + //Actualiza el estado de los registros de trabajo. + RTstate := typ; +end; +procedure TGenCodBas.SetResultVarRef(rVarBase: TxpEleVar); +begin + res.SetAsVarRef(rVarBase); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +procedure TGenCodBas.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + res.SetAsExpRef(rVarBase, typ); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +//Fija el resultado de ROP como constante +procedure TGenCodBas.SetROBResultConst_bool(valBool: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBool); + res.valBool := valBool; +end; +procedure TGenCodBas.SetROBResultConst_bit(valBit: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROBResultConst_byte(valByte: integer); +begin + GenerateROBdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_char(valByte: integer); +begin + GenerateROBdetComment; + SetResultConst(typChar); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_word(valWord: integer); +begin + GenerateROBdetComment; + if not ValidateWordRange(valWord) then + exit; //Error de rango + SetResultConst(typWord); + res.valInt := valWord; +end; +procedure TGenCodBas.SetROBResultConst_dword(valWord: Int64); +begin + GenerateROBdetComment; + if not ValidateDWordRange(valWord) then + exit; //Error de rango + SetResultConst(typDWord); + res.valInt := valWord; +end; +//Fija el resultado de ROP como variable +procedure TGenCodBas.SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROBdetComment; + SetResultVariab(rVar, Inverted); +end; +//Fija el resultado de ROP como expresión +procedure TGenCodBas.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^ y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Boolean, y se asegura de reservar el +registro Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBool, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBool); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_byte(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_char(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Char, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typChar, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typChar); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_word(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typWord); + end; +end; +procedure TGenCodBas.SetROBResultExpres_dword(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + typDWord.DefineRegister; //Se asegura que exista H, E y U + SetResultExpres(typDWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typDWord); + end; +end; +//Fija el resultado de ROU +procedure TGenCodBas.SetROUResultConst_bit(valBit: boolean); +begin + GenerateROUdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROUResultConst_byte(valByte: integer); +begin + GenerateROUdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROUdetComment; + SetResultVariab(rVar, Inverted); +end; +procedure TGenCodBas.SetROUResultVarRef(rVarBase: TxpEleVar); +{Fija el resultado como una referencia de tipo stVarRefVar} +begin + GenerateROUdetComment; + SetResultVarRef(rVarBase); +end; +procedure TGenCodBas.SetROUResultExpres_bit(Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROUResultExpres_byte; +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); +{Define el resultado como una expresión stVarRefExp, protegiendo los RT si es necesario. +Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpRef(rVarBase, typ, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpRef(rVarBase, typ); //actualiza "RTstate" + end; +end; +//Adicionales +procedure TGenCodBas.ChangeResultBitToBool; +{Cambia el tipo de dato del resultado (que se supone es Bit), a Boolean.} +var + tmpVar: TxpEleVar; +begin + {Lo más fácil sería hacer: res.Typ := typBool; + pero cuando "res", sea una variable, se estaría cambiando el ¡tipo de la variable! } + case res.Sto of + stConst : res.SetAsConst(typBool); + stExpres: res.SetAsExpres(typBool); + stVariab: begin + {Para el caso de variables es más complejo, porque no se puede modificar su tipo + real, sino que hay que crear una variable temporal.} + tmpVar := CreateTmpVar('', typBool); //crea variable temporal Boolean + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo bit + tmpVar.bit0 := res.rVar.bit0; + res.SetAsVariab(tmpVar); //Devuelve boolean + end; + end; +end; +procedure TGenCodBas.ChangeResultCharToByte; +begin + +end; +function TGenCodBas.ChangePointerToExpres(var ope: TOperand): boolean; +{Convierte un operando de tipo puntero dereferenciado (x^), en una expresión en los RT, +para que pueda ser evaluado, sin problemas, por las ROP. +Si hay error devuelve false.} +begin + Result := true; + if ope.Sto = stVarRef then begin + //Se tiene una variable puntero dereferenciada: x^ + {Convierte en expresión, verificando los RT} + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + if HayError then exit(false); + end; + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end else if ope.Sto = stExpRef then begin + //Es una expresión. + {Se asume que el operando tiene su resultado en los RT. SI estuvieran en la pila + no se aplicaría.} + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end; +end; +//Rutinas generales para la codificación +procedure TGenCodBas.CodAsmFD(const inst: TPIC16Inst; const f: byte; d: TPIC16destin); inline; +begin + pic.codAsmFD(inst, f, d); +end; +procedure TGenCodBas.CodAsmK(const inst: TPIC16Inst; const k: byte); inline; +begin + pic.codAsmK(inst, k); +end; +{procedure CodAsm(const inst: TPIC16Inst; const f, b: byte); inline; +begin + pic.codAsmFB(inst, f, b); +end;} +//rutinas que facilitan la codifición de instrucciones +procedure TGenCodBas._BANKRESET; +{Reinicia el banco al banco 0, independientemente de donde se pueda encontrar antes. +Siempre genera dos instrucciones. Se usa cuando no se puede predecir exactamente, en que +banco se encontrará el compilador.} +begin + if pic.NumBanks > 1 then begin + _BCF(_STATUS, _RP0); PutComm(';Bank reset.'); + end; + if pic.NumBanks > 2 then begin + _BCF(_STATUS, _RP1); PutComm(';Bank reset.'); + end; + CurrBank:=0; +end; +procedure TGenCodBas._BANKSEL(targetBank: byte); +{Verifica si se está en el banco deseado, de no ser así genera las instrucciones + para el cambio de banco. + Devuelve el número de instrucciones generado.} +var + curRP0: Byte; + newRP0, curRP1, newRP1: byte; +begin + if pic.NumBanks = 1 then + exit; //Caso especial. ¿Hay un PIC de esta serie con un banco? + if targetBank = CurrBank then + exit; //Ya estamos en el banco pedido + //Se está en un banco diferente + ////////// Verifica RP0 //////////// + curRP0 := CurrBank and $01; + newRP0 := targetBank and $01; + if (CurrBank = 255) or (curRP0 <> newRP0) then begin + //Debe haber cambio + if newRP0 = 1 then begin + _BSF(_STATUS, _RP0); PutComm(';Bank set.'); + end else begin + _BCF(_STATUS, _RP0); PutComm(';Bank set.'); + end; + end; + //Verifica si ya no hay más bancos + if pic.NumBanks <= 2 then begin + CurrBank := targetBank; + exit; + end; + ////////// Verifica RP1 //////////// + curRP1 := CurrBank and $02; + newRP1 := targetBank and $02; + if (CurrBank = 255) or (curRP1 <> newRP1) then begin + //Debe haber cambio + if newRP1 = 2 then begin + _BSF(_STATUS, _RP1); PutComm(';Bank set.'); + end else begin + _BCF(_STATUS, _RP1); PutComm(';Bank set.'); + end; + end; + ////////////////////////////////////// + CurrBank := targetBank; + exit; +end; +procedure TGenCodBas.GenCodBank(targetAdrr: word); +{Genera código de cambio de banco para acceder a la dirección indicada. +Se debe usar antes de una instrucción que va a acceder a RAM.} +var + targetBank: byte; +begin + if targetAdrr and $03f = $000 then exit; //Mapeada siempre en los 4 bancos + if targetAdrr and $03f = $004 then exit; //Mapeada siempre en los 4 bancos + targetBank := targetAdrr >> 7; + { TODO : Se debería ver un medio rápido para detectar si la variable "targetAdrr" está + mapeada, también, en otros bancos y así evitar cambios innecesarios de banco. } + _BANKSEL(targetBank); +end; +function TGenCodBas._PC: word; inline; +{Devuelve la dirección actual en Flash} +begin + Result := pic.iFlash; +end; +function TGenCodBas._CLOCK: integer; inline; +{Devuelve la frecuencia de reloj del PIC} +begin + Result := pic.frequen; +end; +procedure TGenCodBas._LABEL(igot: integer); +{Termina de codificar el GOTO_PEND} +begin + pic.codGotoAt(igot, _PC); +end; +//Instrucciones simples +{Estas instrucciones no guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas._ADDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ADDLW, k); +end; +procedure TGenCodBas._ANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas._ADDWF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, f,d); +end; +procedure TGenCodBas._ANDWF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, f,d); +end; +procedure TGenCodBas._CLRF(const f: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, f); +end; +procedure TGenCodBas._CLRW; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas._COMF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, f,d); +end; +procedure TGenCodBas._DECF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, f,d); +end; +procedure TGenCodBas._DECFSZ(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas._INCF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, f,d); +end; +procedure TGenCodBas._INCFSZ(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +procedure TGenCodBas._IORWF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, f,d); +end; +procedure TGenCodBas._MOVF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, f,d); +end; +procedure TGenCodBas._MOVWF(const f: byte); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, f); +end; +procedure TGenCodBas._NOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas._RLF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, f,d); +end; +procedure TGenCodBas._RRF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, f,d); +end; +procedure TGenCodBas._SUBWF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, f,d); +end; +procedure TGenCodBas._SWAPF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, f,d); +end; +procedure TGenCodBas._BCF(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f, b); +end; +procedure TGenCodBas._BSF(const f, b: byte); //inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f, b); +end; +procedure TGenCodBas._BTFSC(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f, b); +end; +procedure TGenCodBas._BTFSS(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f, b); +end; +procedure TGenCodBas._CALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas._CLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas._GOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas._GOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas._IORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas._MOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas._RETFIE; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas._RETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas._RETURN; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas._SLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas._SUBLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_SUBLW, k); +end; +procedure TGenCodBas._XORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas._XORWF(const f: byte; d: TPIC16destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, f,d); +end; +//Instrucciones que manejan el cambio de banco +{Estas instrucciones guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas.kADDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; //Este es el banco esperado + pic.codAsmK(i_ADDLW, k); +end; +//procedure TGenCodBas.kADDWF(const f: word; d: TPIC16destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_ADDWF, f,d); +//end; +procedure TGenCodBas.kADDWF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, addr, d); +end; +procedure TGenCodBas.kANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas.kANDWF(addr:word; d: TPIC16destin); inline; +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, addr, d); +end; +procedure TGenCodBas.kCLRF(addr: word); inline; +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, addr); +end; +procedure TGenCodBas.kCLRW; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas.kCOMF(addr: word; d: TPIC16Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, addr, d); +end; +procedure TGenCodBas.kDECF(addr: word; d: TPIC16Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, addr, d); +end; +procedure TGenCodBas.kDECFSZ(const f: word; d: TPIC16destin); inline; +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas.kINCF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, addr, d); +end; +procedure TGenCodBas.kINCFSZ(const f: word; d: TPIC16destin); inline; +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +//procedure TGenCodBas.kIORWF(const f: word; d: TPIC16destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_IORWF, f,d); +//end; +procedure TGenCodBas.kIORWF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, addr, d); +end; +procedure TGenCodBas.kMOVF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, addr, d); +end; +procedure TGenCodBas.kMOVWF(addr: word); inline; +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, addr); +end; +procedure TGenCodBas.kNOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas.kRLF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, addr, d); +end; +procedure TGenCodBas.kRRF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, addr, d); +end; +//procedure TGenCodBas.kSUBWF(const f: word; d: TPIC16destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_SUBWF, f,d); +//end; +procedure TGenCodBas.kSUBWF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, addr, d); +end; +procedure TGenCodBas.kSWAPF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, addr, d); +end; +procedure TGenCodBas.kBCF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f.addr, f.bit); +end; +procedure TGenCodBas.kBSF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSC(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSS(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f.addr, f.bit); +end; +procedure TGenCodBas.kCALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas.kCLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas.kGOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas.kGOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas.kIORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas.kMOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas.kRETFIE; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas.kRETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas.kRETURN; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas.kSLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas.kSUBLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_SUBLW, k); +end; +procedure TGenCodBas.kXORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas.kXORWF(addr: word; d: TPIC16destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, addr, d); +end; +//Instrucciones adicionales +procedure TGenCodBas.kSHIFTR(addr: word; d: TPIC16destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RRF(addr, d); +end; +procedure TGenCodBas.kSHIFTL(addr: word; d: TPIC16destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RLF(addr, d); +end; +procedure TGenCodBas.kIF_BSET(const f: TPicRegisterBit; out info: TIfInfo); +{Conditional instruction. Test if the specified bit is set. In this case, execute +the following block. The syntax is: + +kIF_BSET(offset, bit) + +kIF_BSET_END + +This instruction require to call to kIF_BSET_END() to define the End of the block. + +The block of code can be one or more instructions. The instructions used in the jump +must be optimized, according to the length of the block. + +EXPLANATION: + +The strategy of this procedure is to generate the sequence: + + + i_BTFSS f + GOTO + ;--- Block start --- + + ;--- Block end --- + +This scheme is the worst case (assuming the GOTO instruction is only one word), later +if the body of the IF, is only one word, it will be optimized to: + + + i_BTFSC f + ;--- Block start --- + + ;--- Block end --- + +It's not used the best case first, because in case it needs to change to the worst case, +it would need to insert and move several words, including, probably, GOTOs and LABELs, +needing to recalculate jumps. +} +begin + info.iFlash1 := pic.iFlash; + info.curBank1 := CurrBank; + GenCodBank(f.addr); //Generate bank instructions + info.hasBankInst := pic.iFlash>info.iFlash1; + //Instructions of Page Select HERE: + //if multipage then begin + //_movlw high Target //Don't affect STATUS + //_movwf pclatch //Don't affect STATUS + //end; + info.curBank2 := CurrBank; //Banco antes del salto + _BTFSS(f.addr, f.bit); + info.igoto := pic.iFlash; //Guarda posición de GOTO que sigue + _GOTO(0); //salto pendiente + info.iFlash3 := pic.iFlash; + info.curBank3 := CurrBank; +end; +procedure TGenCodBas.kIF_BSET_END(const info: TIfInfo; UpdateBank: boolean = true); +{Define the End of the block, created with kIF_BSET().} +var + i: Integer; +begin + if _PC = info.iFlash3 then begin + //Elimina instrucciones + for i:= info.iFlash1 to _PC-1 do begin + pic.flash[i].used:=false; //Elimina instrucciones anteriores + end; + //No hay instrucciones en en bloque + pic.iFlash:=info.iFlash1; //Elimina hasta el inicio, porque no tiene sentido + CurrBank := info.curBank1; + end else if _PC = info.iFlash3+1 then begin + //Es un bloque de una sola instrucción. Se puede optimizar + pic.BTFSC_sw_BTFSS(info.igoto-1); //Cambia i_BTFSS por i_BTFSC + pic.flash[info.igoto] := pic.flash[info.igoto+1]; //Desplaza la instrucción + pic.flash[info.igoto].used:=false; //Elimina +// end else if (_PC = info.iFlash3+2) or (_PC = info.iFlash3+3) then begin +// {Dos o tres instrucciones. Podría ser cambio de banco y una instrucción. Se pdoría +// optimizar cuando el BTFS? opera sobre un registro mapeado en todos los bancos (como +// STATUS) poniendo el cambio de banco antes del BTFS?} + end else begin + //Bloque de varias instrucciones + pic.codGotoAt(info.igoto, _PC); //termina de codificar el salto + //Faltaría completar página cuando se geenran instrucciones de páginas + if UpdateBank then begin + //Verifica el cambio de bancos + if info.curBank2 = CurrBank then begin + //En ambos casos terminan con el mismo banco. Lo dejamos allí + end else begin + //Son bancos diferentes. No se puede predecir el banco final. + CurrBank := 255; + end; + end; + end; +end; +procedure TGenCodBas.kIF_BCLR(const f: TPicRegisterBit; out igot: integer); +begin + //bnk1 := CurrBank; //banco inicial +// kIF_BSET(f, igot); +end; +procedure TGenCodBas.kIF_BCLR_END(igot: integer); +begin + //bnk2 := CurrBank; +// kIF_BSET_END(igot); +end; +function TGenCodBas.PICName: string; +begin + Result := pic.Model; +end; +function TGenCodBas.PICNameShort: string; +{Genera el nombre del PIC, quitándole la parte inicial "PIC".} +begin + Result := copy(pic.Model, 4, length(pic.Model)); +end; +function TGenCodBas.PICnBanks: byte; +begin + Result := pic.NumBanks; +end; +function TGenCodBas.PICCurBank: byte; +begin + Result := pic.STATUS >> 5; +end; +function TGenCodBas.PICBank(i: byte): TPICRAMBank; +begin + Result := pic.banks[i]; +end; +function TGenCodBas.PICnPages: byte; +begin + Result := pic.NumPages; +end; +function TGenCodBas.PICPage(i: byte): TPICFlashPage; +begin + Result := pic.pages[i]; +end; +function TGenCodBas.GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; +{Extrae el primer parámetro (que corresponde al índice) de las funciones getitem() o +setitem(). También reconoce las formas con corchetes [], y en ese caso pone "WithBrackets" +en TRUE. Si encuentra error, devuelve false.} +begin + if cIn.tok = '[' then begin + //Es la sintaxis a[i]; + WithBrack := true; + cIn.Next; //Toma "[" + end else begin + //Es la sintaxis a.item(i); + WithBrack := false; + cIn.Next; //Toma identificador de campo + //Captura parámetro + if not CaptureTok('(') then exit(false); + end; + par := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit(false); + if par.Typ <> typByte then begin + GenError('Expected byte as index.'); + end; + if HayError then exit(false); + exit(true); +end; +function TGenCodBas.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; +{Lee el segundo parámetro de SetItem y devuelve en "value". Valida que sea sel tipo +correcto. Si hay error, devuelve FALSE.} +var + typItem: TxpEleType; +begin + if WithBrack then begin + if not CaptureTok(']') then exit(false); + cIn.SkipWhites; + {Legalmente, aquí podría seguir otro operador, o función como ".bit0", y no solo + ":=". Esto es una implementación algo limitada. Lo que debería hacerse, si no se + encuentra ":=", sería devolver una referencia a variable, tal vez a un nuevo tipo + de variable, con dirección "indexada", pero obligaría a crear un atributo más a + las varaibles. El caso de un índice constante es más sencillo de procesar.} + if not CaptureTok(':=') then exit(false); + end else begin + if not CaptureTok(',') then exit(false); + end; + value := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + typItem := arrVar.typ.itmType; + if value.Typ <> typItem then begin //Solo debería ser byte o char + if (value.Typ = typByte) and (typItem = typWord) then begin + //Son tipos compatibles + value.SetAsConst(typWord); //Cmabiamos el tipo + end else begin + GenError('%s expression expected.', [typItem.name]); + exit(false); + end; + end; + exit(true); +end; +///////////////// Tipo Bit //////////////// +procedure TGenCodBas.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros Z.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if Op^.valBool then + _BSF(Z.offs, Z.bit) + else + _BCF(Z.offs, Z.bit); + end; + stVariab: begin + //La lógica en Z, dene ser normal, proque no hay forma de leerla. + //Como Z, está en todos los bancos, no hay mucho problema. + if Op^.Inverted then begin + //No se usa el registro W + kBCF(Z); + kBTFSS(Op^.rVar.adrBit); + kBSF(Z); + end else begin + //No se usa el registro W + kBCF(Z); + kBTFSC(Op^.rVar.adrBit); + kBSF(Z); + end; + end; + stExpres: begin //ya está en w + if Op^.Inverted then begin + //Aquí hay un problema, porque hay que corregir la lógica + _MOVLW($1 << Z.bit); + _ANDWF(Z.offs, toW); //invierte Z + end else begin + //No hay mada que hacer + end; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; + if modReturn then _RETURN; //codifica instrucción +end; +procedure TGenCodBas.bit_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.bit_SaveToStk; +{Guarda el valor bit, cargado actualmente en Z, a pila.} +var + stk: TPicRegisterBit; +begin + stk := GetStkRegisterBit; //pide memoria + if stk= nil then exit; //error + //Guarda Z + _BANKSEL(stk.bank); + _BCF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + _BTFSC(Z.offs, Z.bit); PutComm(TXT_SAVE_Z); + _BSF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + stk.used := true; +end; +//////////////// Tipo Byte ///////////// +procedure TGenCodBas.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if modReturn then _RETLW(Op^.valInt) + else _MOVLW(Op^.valInt); + end; + stVariab: begin + kMOVF(Op^.rVar.addr, toW); + if modReturn then _RETURN; + end; + stExpres: begin //ya está en w + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kMOVF(varPtr.addr, toW); + kMOVWF(FSR.addr); //direcciona + kMOVF(INDF.addr, toW); //deje en W + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión derefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona + _MOVF(0, toW); //deje en W + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.byte_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.byte_SaveToStk; +var + stk: TPicRegister; +begin + stk := GetStkRegisterByte; //pide memoria + //guarda W + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; +end; +procedure TGenCodBas.byte_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin + //Se aplica a una variable array. Lo Normal. + arrVar := Op^.rVar; //referencia a la variable. + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typByte); + tmpVar.addr0 := arrVar.addr0 + idx.valInt; //¿Y si es de otro banco? + SetResultVariab(tmpVar); + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _ADDLW(arrVar.addr0); //agrega OFFSET + _MOVWF(04); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _ADDLW(arrVar.addr0); //agrega OFFSET + _MOVWF(04); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_SetItem(const OpPtr: pointer); +//Función que fija un valor indexado +var + WithBrack: Boolean; +var + Op: ^TOperand; + arrVar, rVar: TxpEleVar; + idx, value: TOperand; + idxTar: word; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + res.SetAsNull; //No devuelve nada + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + //Como el índice es constante, se puede acceder directamente + idxTar := arrVar.adrByte0.offs+idx.valInt; //índice destino + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pone a cero + _CLRF(idxTar); + end else begin + //Sabemos que hay una expresión byte + LoadToRT(value); //Carga resultado en W + _MOVWF(idxTar); //Mueve a arreglo + end; + end; + stVariab: begin + //El índice es una variable + //Tenemos la referencia la variable en idx.rvar + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El resultado está en W + //hay que mover value a arrVar[idx.rvar] + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva H + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + end; + end; + stExpres: begin + //El índice es una expresión y está en W. + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El valor a asignar está en W, y el índice en la pila + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva valor a H + rVar := GetVarByteFromStk; //toma referencia de la pila + _MOVF(rVar.adrByte0.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + FreeStkRegisterByte; //Para liberar + end; + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + //En este modo, no se requiere ")" + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_ClearItems(const OpPtr: pointer); +{Limpia el contenido de todo el arreglo} +var + Op: ^TOperand; + xvar: TxpEleVar; + j1: Word; +begin + cIn.Next; //Toma identificador de campo + //Limpia el arreglo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + res.SetAsConst(typByte); //Realmente no es importante devolver un valor + res.valInt {%H-}:= xvar.typ.nItems; //Devuelve tamaño + if xvar.typ.nItems = 0 then exit; //No hay nada que limpiar + if xvar.typ.nItems = 1 then begin //Es de un solo byte + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + end else if xvar.typ.nItems = 2 then begin //Es de 2 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + end else if xvar.typ.nItems = 3 then begin //Es de 3 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + end else if xvar.typ.nItems = 4 then begin //Es de 4 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + end else if xvar.typ.nItems = 5 then begin //Es de 5 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + end else if xvar.typ.nItems = 6 then begin //Es de 6 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + _CLRF(xvar.addr0+5); + end else if xvar.typ.nItems = 7 then begin //Es de 7 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + _CLRF(xvar.addr0+5); + _CLRF(xvar.addr0+6); + end else begin + //Implementa lazo, usando W como índice + _MOVLW(xvar.adrByte0.offs); //dirección inicial + _MOVWF($04); //FSR + _MOVLW(256-xvar.typ.nItems); +j1:= _PC; + _CLRF($00); //Limpia [FSR] + _INCF($04, toF); //Siguiente + _ADDLW(1); //W = W + 1 + _BTFSS(_STATUS, _Z); + _GOTO(j1); + end; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit(const OpPtr: pointer; nbit: byte); +//Implementa la operación del campo .bit# +var + xvar, tmpVar: TxpEleVar; + msk: byte; + Op: ^TOperand; +begin + cIn.Next; //Toma el identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.bit' + IntToStr(nbit), typBit); //crea variable temporal + tmpVar.addr0 := xvar.addr0; + tmpVar.bit0 := nbit; + //Se devuelve una variable, byte + res.SetAsVariab(tmpVar); //actualiza la referencia (y actualiza el tipo). + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typBit); + msk := Op^.valInt and ($01 << nbit); + res.valBool := msk <> 0; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit0(const OpPtr: pointer); +begin + byte_bit(OpPtr, 0); +end; +procedure TGenCodBas.byte_bit1(const OpPtr: pointer); +begin + byte_bit(OpPtr, 1); +end; +procedure TGenCodBas.byte_bit2(const OpPtr: pointer); +begin + byte_bit(OpPtr, 2); +end; +procedure TGenCodBas.byte_bit3(const OpPtr: pointer); +begin + byte_bit(OpPtr, 3); +end; +procedure TGenCodBas.byte_bit4(const OpPtr: pointer); +begin + byte_bit(OpPtr, 4); +end; +procedure TGenCodBas.byte_bit5(const OpPtr: pointer); +begin + byte_bit(OpPtr, 5); +end; +procedure TGenCodBas.byte_bit6(const OpPtr: pointer); +begin + byte_bit(OpPtr, 6); +end; +procedure TGenCodBas.byte_bit7(const OpPtr: pointer); +begin + byte_bit(OpPtr, 7); +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte alto + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte bajo + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr+1, toW); + kMOVWF(H.addr); + kMOVF(Op^.rVar.addr, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (H,w) + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kINCF(varPtr.addr0, toW); //varPtr.offs+1 -> W (byte alto) + _MOVWF(FSR.offs); //direcciona byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión desrefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona byte bajo + _INCF(FSR.offs,toF); //apunta a byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.word_DefineRegisters; +begin + //Aparte de W, solo se requiere H + AddCallerTo(H); +end; +procedure TGenCodBas.word_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.word_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + typWord.DefineRegister; + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typWord); + tmpVar.addr0 := arrVar.addr0+idx.valInt*2; //¿Y si es de otro banco? + tmpVar.addr1 := arrVar.addr0+idx.valInt*2+1; //¿Y si es de otro banco? + SetResultVariab(tmpVar); +// SetResultExpres(arrVar.typ.refType, true); //Es array de word, devuelve word +// //Como el índice es constante, se puede acceder directamente +// add0 := arrVar.addr0.offs+idx.valInt*2; +// _MOVF(add0+1, toW); +// _MOVWF(H.offs); //byte alto +// _MOVF(add0, toW); //byte bajo + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de word, devuelve word + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //Multiplica Idx por 2 + _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de word, devuelve word + _MOVWF(FSR.offs); //idx a FSR (usa como varaib. auxiliar) + _BCF(_STATUS, _C); + _RLF(FSR.offs, toW); //Multiplica Idx por 2 + _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.word_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.L', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.word_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.H', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte U + if Op^.UByte = 0 then begin + kCLRF(U.addr); + end else begin + _MOVLW(Op^.UByte); + kMOVWF(U.addr); + end; + //byte E + if Op^.EByte = 0 then begin + _BANKSEL(E.bank); + _CLRF(E.offs); + end else begin + _MOVLW(Op^.EByte); + _BANKSEL(E.bank); + _MOVWF(E.offs); + end; + //byte H + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte 0 + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr3, toW); + kMOVWF(U.addr); + + kMOVF(Op^.rVar.addr2, toW); + kMOVWF(E.addr); + + kMOVF(Op^.rVar.addr1, toW); + kMOVWF(H.addr); + + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (U,E,H,w) + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.dword_DefineRegisters; +begin + //Aparte de W, se requieren H, E y U + AddCallerTo(H); + AddCallerTo(E); + AddCallerTo(U); +end; +procedure TGenCodBas.dword_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda E + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(E.bank); + _MOVF(E.offs, toW);PutComm(';save E'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda U + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + kMOVF(U.addr, toW);PutComm(';save U'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.dword_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Low', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante byte + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.High', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Extra(const OpPtr: pointer); +{Acceso al byte 2 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Extra', typByte); + tmpVar.addr0 := xvar.addr2; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff0000)>>16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Ultra(const OpPtr: pointer); +{Acceso al byte 3 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Ultra', typByte); + tmpVar.addr0 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff000000)>>24; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_LowWord(const OpPtr: pointer); +{Acceso al word de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.LowW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + tmpVar.addr1 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := Op^.ValInt and $ffff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_HighWord(const OpPtr: pointer); +{Acceso al word de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.HighW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr2; //byte bajo + tmpVar.addr1 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := (Op^.ValInt and $ffff0000) >> 16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.GenCodPicReqStopCodeGen; +{Required Stop the Code generation} +begin + posFlash := pic.iFlash; //Probably not the best way. +end; +procedure TGenCodBas.GenCodPicReqStartCodeGen; +{Required Start the Code generation} +begin + pic.iFlash := posFlash; //Probably not the best way. +end; +//Inicialización +procedure TGenCodBas.StartRegs; +{Inicia los registros de trabajo en la lista.} +begin + listRegAux.Clear; + listRegStk.Clear; //limpia la pila + stackTop := 0; + listRegAuxBit.Clear; + listRegStkBit.Clear; //limpia la pila + stackTopBit := 0; +end; +function TGenCodBas.CompilerName: string; +begin + Result := 'PIC16 Compiler' +end; +function TGenCodBas.RAMmax: integer; +begin + Result := high(pic.ram); +end; +function TGenCodBas.DeviceError: string; +begin + exit (pic.MsjError); +end; +procedure TGenCodBas.Cod_JumpIfTrue; +{Codifica una instrucción de salto, si es que el resultado de la última expresión es +verdadera. Se debe asegurar que la expresión es de tipo booleana y de almacenamiento +stVariab o stExpres.} +begin + if res.Sto = stVariab then begin + //Las variables booleanas, pueden estar invertidas + if res.Inverted then begin + _BANKSEL(res.bank); + _BTFSC(res.offs, res.bit); //verifica condición + end else begin + _BANKSEL(res.bank); + _BTFSS(res.offs, res.bit); //verifica condición + end; + end else if res.Sto = stExpres then begin + //Los resultados de expresión, pueden optimizarse + if InvertedFromC then begin + //El resultado de la expresión, está en Z, pero a partir una copia negada de C + //Se optimiza, eliminando las instrucciones de copia de C a Z + pic.iFlash := pic.iFlash-2; + //La lógica se invierte + if res.Inverted then begin //_Lógica invertida + _BTFSS(C.offs, C.bit); //verifica condición + end else begin + _BTFSC(C.offs, C.bit); //verifica condición + end; + end else begin + //El resultado de la expresión, está en Z. Caso normal + if res.Inverted then begin //Lógica invertida + _BTFSC(Z.offs, Z.bit); //verifica condición + end else begin + _BTFSS(Z.offs, Z.bit); //verifica condición + end; + end; + end; +end; + +procedure TGenCodBas.ClearDeviceError; +begin + pic.MsjError := ''; +end; + +function TGenCodBas.CurrFlash(): integer; +begin + exit(pic.iFlash); +end; +procedure TGenCodBas.ResetFlashAndRAM; +{Reinicia el dispositivo, para empezar a escribir en la posición $000 de la FLASH, y +en la posición inicial de la RAM.} +begin + pic.iFlash := 0; //Ubica puntero al inicio. + pic.ClearMemRAM; //Pone las celdas como no usadas y elimina nombres. + CurrBank := 0; + StartRegs; //Limpia registros de trabajo, auxiliares, y de pila. +end; + +function TGenCodBas.ReturnAttribIn(typ: TxpEleType; const Op: TOperand; + offs: integer): boolean; +{Return a temp variable at the specified address.} +var + tmpVar: TxpEleVar; +begin + if Op.Sto = stVariab then begin + tmpVar := CreateTmpVar('?', typ); //Create temporal variable + tmpVar.addr0 := Op.addr + offs; //Set Address + res.SetAsVariab(tmpVar); + exit(true); + end else begin + GenError('Cannot access to field of this expression.'); + exit(false); + end; +end; +procedure TGenCodBas.SetSharedUnused; +begin + pic.SetSharedUnused; +end; +procedure TGenCodBas.SetSharedUsed; +begin + pic.SetSharedUsed; +end; +procedure TGenCodBas.CompileProcBody(fun: TxpEleFun); +{Compila el cuerpo de un procedimiento} +begin + StartCodeSub(fun); //Inicia codificación de subrutina + CompileInstruction; + if HayError then exit; + if fun.IsInterrupt then begin + //Las interrupciones terminan así + _RETFIE + end else begin + //Para los procedimeintos, podemos terminar siemrpe con un i_RETURN u optimizar, + if OptRetProc then begin + //Verifica es que ya se ha incluido exit(). + if fun.ObligatoryExit<>nil then begin + //Ya tiene un exit() obligatorio y en el final (al menos eso se espera) + //No es necesario incluir el i_RETURN(). + end else begin + //No hay un exit(), seguro + _RETURN(); //instrucción de salida + end; + end else begin + _RETURN(); //instrucción de salida + end; + end; + EndCodeSub; //termina codificación + {Fija banco al terminar de codificar. Si no se modificó el banco en la compilación + (como en un procedimiento vacío) CurrBank, contiene el banco que se fijó antes de + llamar a CompileProcBody(), que es: + Siemrpe 0 -> en la primera pasada. + Un valor calculado -> en la segund pasada.} + fun.finBnk := CurrBank; //Banco al terminar de codificar + //Calcula tamaño + fun.srcSize := pic.iFlash - fun.adrr; +end; +procedure TGenCodBas.StartCodeSub(fun: TxpEleFun); +{debe ser llamado para iniciar la codificación de una subrutina} +begin +// iFlashTmp := pic.iFlash; //guarda puntero +// pic.iFlash := curBloSub; //empieza a codificar aquí +end; +procedure TGenCodBas.EndCodeSub; +{debe ser llamado al terminar la codificaión de una subrutina} +begin +// curBloSub := pic.iFlash; //indica siguiente posición libre +// pic.iFlash := iFlashTmp; //retorna puntero +end; +procedure TGenCodBas.FunctParam(fun: TxpEleFunBase); +{Rutina genérica, que se usa antes de leer los parámetros de una función.} +begin + {Haya o no, parámetros se debe proceder como en cualquier expresión, asumiendo que + vamos a devolver una expresión.} + SetResultExpres(fun.typ); //actualiza "RTstate" +end; +procedure TGenCodBas.FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); +{Rutina genérica para llamar a una función definida por el usuario.} +var + xfun: TxpEleFun; + fundec: TxpEleFunDec; +begin + AddrUndef := false; + if fun.idClass = eltFunc then begin + //Is a implemented function + xfun := TxpEleFun(fun); + //By now is not implemented the paging + _CALL(xfun.adrr); //codifica el salto + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := xfun.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Must be a declaration + fundec := TxpEleFunDec(fun); + if fundec.implem <> nil then begin + //Is implemented + _CALL(fundec.implem.adrr); + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := fundec.implem.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Not implemented YET + _CALL($1234); //Needs to be completed later. + AddrUndef := true; + end; + end; +end; +procedure TGenCodBas.CompileIF; +{Compila una extructura IF} + procedure SetFinalBank(bnk1, bnk2: byte); + {Fija el valor de CurrBank, de acuerdo a dos bancos finales.} + begin + if OptBnkAftIF then begin + //Optimizar banking + if bnk1 = bnk2 then begin + //Es el mismo banco (aunque sea 255). Lo deja allí. + end else begin + CurrBank := 255; //Indefinido + end; + end else begin + //Sin optimización + _BANKRESET; + end; + end; +var + jFALSE, jEND_TRUE: integer; + bnkExp, bnkTHEN, bnkELSE: Byte; +begin + if not GetExpressionBool then exit; + bnkExp := CurrBank; //Guarda el banco inicial + if not CaptureStr('then') then exit; //toma "then" + //Aquí debe estar el cuerpo del "if" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Es verdadero, siempre se ejecuta + if not CompileNoConditionBody(true) then exit; + //Compila los ELSIF que pudieran haber + while cIn.tokL = 'elsif' do begin + cIn.Next; //toma "elsif" + if not GetExpressionBool then exit; + if not CaptureStr('then') then exit; //toma "then" + //Compila el cuerpo pero sin código + if not CompileNoConditionBody(false) then exit; + end; + //Compila el ELSE final, si existe. + if cIn.tokL = 'else' then begin + //Hay bloque ELSE, pero no se ejecutará nunca + cIn.Next; //toma "else" + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end else begin + VerifyEND; + end; + end else begin + //Es falso, nunca se ejecuta + if not CompileNoConditionBody(false) then exit; + if cIn.tokL = 'else' then begin + //hay bloque ELSE, que sí se ejecutará + cIn.Next; //toma "else" + if not CompileNoConditionBody(true) then exit; + VerifyEND; + end else if cIn.tokL = 'elsif' then begin + cIn.Next; + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + //No es necesario verificar el END final. + end else begin + VerifyEND; + end; + end; + end; + stVariab, stExpres:begin + Cod_JumpIfTrue; + _GOTO_PEND(jFALSE); //salto pendiente + //Compila la parte THEN + if not CompileConditionalBody(bnkTHEN) then exit; + //Verifica si sigue el ELSE + if cIn.tokL = 'else' then begin + //Es: IF ... THEN ... ELSE ... END + cIn.Next; //toma "else" + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CurrBank := bnkExp; //Fija el banco inicial antes de compilar + if not CompileConditionalBody(bnkELSE) then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, bnkELSE); //Manejo de bancos + VerifyEND; //puede salir con error + end else if cIn.tokL = 'elsif' then begin + //Es: IF ... THEN ... ELSIF ... + cIn.Next; + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, CurrBank); //Manejo de bancos + //No es necesario verificar el END final. + end else begin + //Es: IF ... THEN ... END. (Puede ser recursivo) + _LABEL(jFALSE); //termina de codificar el salto + SetFinalBank(bnkExp, bnkTHEN); //Manejo de bancos + VerifyEND; //puede salir con error + end; + end; + end; +end; +procedure TGenCodBas.CompileREPEAT; +{Compila uan extructura WHILE} +var + l1: Word; +begin + l1 := _PC; //guarda dirección de inicio + CompileCurBlock; + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('until') then exit; //toma "until" + if not GetExpressionBool then exit; + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //lazo nulo + end else begin + //lazo infinito + _GOTO(l1); + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO(l1); + //sale cuando la condición es verdadera + end; + end; +end; +procedure TGenCodBas.CompileWHILE; +{Compila una extructura WHILE} +var + l1: Word; + dg: Integer; + bnkEND, bnkExp1, bnkExp2: byte; +begin + l1 := _PC; //guarda dirección de inicio + bnkExp1 := CurrBank; //Guarda el banco antes de la expresión + if not GetExpressionBool then exit; //Condición + bnkExp2 := CurrBank; //Guarda el banco antes de la expresión + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "while" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Lazo infinito + if not CompileNoConditionBody(true) then exit; + if not VerifyEND then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); + end else begin + //Lazo nulo. Compila sin generar código. + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkEND) then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); //salta a evaluar la condición + if not VerifyEND then exit; + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end; + end; + CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE +end; +procedure TGenCodBas.CompileFOR; +{Compila uan extructura WHILE} +var + l1: Word; + dg: Integer; + Op1, Op2: TOperand; + opr1: TxpOperator; + bnkFOR: byte; +begin + GetOperand(Op1, true); + if Op1.Sto <> stVariab then begin + GenError(ER_VARIAB_EXPEC); + exit; + end; + if HayError then exit; + if (Op1.Typ<>typByte) and (Op1.Typ<>typWord) then begin + GenError(ER_ONL_BYT_WORD); + exit; + end; + cIn.SkipWhites; + opr1 := GetOperator(Op1); //debe ser ":=" + if opr1 = nil then begin //no sigue operador + GenError(ER_ASIG_EXPECT); + exit; //termina ejecucion + end; + if opr1.txt <> ':=' then begin + GenError(ER_ASIG_EXPECT); + exit; + end; + Op2 := GetExpression(0); + if HayError then exit; + //Ya se tiene la asignación inicial + Oper(Op1, opr1, res); //codifica asignación + if HayError then exit; + if not CaptureStr('to') then exit; + //Toma expresión Final + res := GetExpression(0); + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "for" + if (res.Sto = stConst) or (res.Sto = stVariab) then begin + //Es un for con valor final de tipo constante + //Se podría optimizar, si el valor inicial es también constante + l1 := _PC; //guarda dirección de inicio + //Codifica rutina de comparación, para salir + opr1 := Op1.Typ.FindBinaryOperator('<='); //Busca operador de comparación + if opr1 = nullOper then begin + GenError('Internal: No operator <= defined for %s.', [Op1.Typ.name]); + exit; + end; + Op2 := res; //Copia porque la operación Oper() modificará res + Oper(Op1, opr1, Op2); //"res" mantiene la constante o variable + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkFOR) then exit; + if not VerifyEND then exit; + //Incrementa variable cursor + if Op1.Typ = typByte then begin + _INCF(Op1.offs, toF); + end else if Op1.Typ = typWord then begin + _BANKSEL(oP1.bank); + _INCF(Op1.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(Op1.Hoffs, toF); + end; + _GOTO(l1); //repite el lazo + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end else begin + GenError('Last value must be Constant or Variable'); + exit; + end; +end; +constructor TGenCodBas.Create; +begin + inherited Create; + ID := 16; //Identifica al compilador PIC16 + devicesPath := patDevices16; + OnReqStartCodeGen:=@GenCodPicReqStartCodeGen; + OnReqStopCodeGen:=@GenCodPicReqStopCodeGen; + pic := TPIC16.Create; + picCore := pic; //Referencia picCore + //Crea variables de trabajo + varStkBit := TxpEleVar.Create; + varStkBit.typ := typBit; + varStkByte := TxpEleVar.Create; + varStkByte.typ := typByte; + varStkWord := TxpEleVar.Create; + varStkWord.typ := typWord; + varStkDWord := TxpEleVar.Create; + varStkDWord.typ := typDWord; + //Crea lista de variables temporales + varFields := TxpEleVars.Create(true); + //Inicializa contenedores + listRegAux := TPicRegister_list.Create(true); + listRegStk := TPicRegister_list.Create(true); + listRegAuxBit:= TPicRegisterBit_list.Create(true); + listRegStkBit:= TPicRegisterBit_list.Create(true); + stackTop := 0; //Apunta a la siguiente posición libre + stackTopBit := 0; //Apunta a la siguiente posición libre + {Crea registro de trabajo W. El registro W, es el registro interno del PIC, y no + necesita un mapeo en RAM. Solo se le crea aquí, para poder usar su propiedad "used"} + W := TPicRegister.Create; + W.assigned := false; //se le marca así, para que no se intente usar + {Crea registro de trabajo Z. El registro Z, es el registro interno del PIC, y está + siempre asignado en RAM. } + Z := TPicRegisterBit.Create; + Z.addr := _STATUS; + Z.bit := _Z; + Z.assigned := true; //ya está asignado desde el principio + {Crea registro de trabajo C. El registro C, es el registro interno del PIC, y está + siempre asignado en RAM. } + C := TPicRegisterBit.Create; + C.addr := _STATUS; + C.bit := _C; + C.assigned := true; //ya está asignado desde el principio + //Crea registro interno INDF + INDF := TPicRegister.Create; + INDF.addr := $00; + INDF.assigned := true; //ya está asignado desde el principio + {Crea registro auxiliar FSR. El registro FSR, es un registro interno del PIC, y está + siempre asignado en RAM. } + FSR := TPicRegister.Create; + FSR.addr := $04; + FSR.assigned := true; //ya está asignado desde el principio + + callCurrFlash := @CurrFlash; + callResetFlashAndRAM:=@ResetFlashAndRAM; + callCreateVarInRAM := @CreateVarInRAM; + callSetSharedUnused := @SetSharedUnused; + callSetSharedUsed := @SetSharedUsed; + callReturnAttribIn := @ReturnAttribIn; + callDeviceError := @DeviceError; + callClearDeviceError := @ClearDeviceError; + callCompileProcBody := @CompileProcBody; + callFunctParam := @FunctParam; + callFunctCall := @FunctCall; + callStartCodeSub := @StartCodeSub; + callEndCodeSub := @EndCodeSub; + + callCompileIF := @CompileIF;; + callCompileWHILE := @CompileWHILE; + callCompileREPEAT := @CompileREPEAT; + callCompileFOR := @CompileFOR; +end; +destructor TGenCodBas.Destroy; +begin + INDF.Destroy; + FSR.Destroy; + C.Destroy; + Z.Destroy; + W.Destroy; + listRegAuxBit.Destroy; + listRegStkBit.Destroy; + listRegStk.Destroy; + listRegAux.Destroy; + varFields.Destroy; + varStkBit.Destroy; + varStkByte.Destroy; + varStkWord.Destroy; + varStkDWord.Destroy; + pic.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/GenCodBas_PIC17.pas b/Source/GenCodBas_PIC17.pas new file mode 100644 index 00000000..a34fe942 --- /dev/null +++ b/Source/GenCodBas_PIC17.pas @@ -0,0 +1,3416 @@ +{Unidad que agrega campos necesarios a la clase TCompilerBase, para la generación de +código con el PIC16F.} +unit GenCodBas_PIC17; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, XpresElementsPIC, XpresTypesPIC, PicCore, Pic17Utils, + CompBase, ParserDirec, Globales, CompOperands, MisUtils, LCLType, LCLProc; +const + STACK_SIZE = 16; //Tamaño de pila para subrutinas en el PIC + MAX_REGS_AUX_BYTE = 8; //Cantidad máxima de registros a usar + MAX_REGS_AUX_BIT = 6; //Cantidad máxima de registros bit a usar + MAX_REGS_STACK_BYTE = 8; //Cantidad máxima de registros a usar en la pila + MAX_REGS_STACK_BIT = 6; //Cantidad máxima de registros a usar en la pila + +type + { TGenCodBas } + TGenCodBas = class(TParserDirecBase) + private + linRep : string; //línea para generar de reporte + posFlash: Integer; + procedure ClearDeviceError; + procedure Cod_JumpIfTrue; + procedure CompileFOR; + procedure CompileIF; + procedure CompileProcBody(fun: TxpEleFun); + procedure CompileREPEAT; + procedure CompileWHILE; + function CurrFlash(): integer; + function DeviceError: string; + procedure GenCodPicReqStartCodeGen; + procedure GenCodPicReqStopCodeGen; + function GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; + function GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out + value: TOperand): boolean; + procedure ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); + procedure ResetFlashAndRAM; + function ReturnAttribIn(typ: TxpEleType; const Op: TOperand; offs: integer + ): boolean; + procedure SetSharedUnused; + procedure SetSharedUsed; + procedure word_ClearItems(const OpPtr: pointer); + procedure word_GetItem(const OpPtr: pointer); + procedure word_SetItem(const OpPtr: pointer); + procedure _MOVLB(const k: word); + protected + procedure FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure FunctParam(fun: TxpEleFunBase); + procedure StartCodeSub(fun: TxpEleFun); + procedure EndCodeSub; + protected + //Registros de trabajo + W : TPicRegister; //Registro Interno. + Z : TPicRegisterBit; //Registro Interno. + C : TPicRegisterBit; //Registro Interno. + H : TxpEleVar; //Registros de trabajo. Se crean siempre. + E : TxpEleVar; //Registros de trabajo. Se crean siempre. +// U : TPicRegister; //Registros de trabajo. Se crean siempre. + U : TxpEleVar; + //Registros auxiliares + INDF : TPicRegister; //Registro Interno. + FSR : TPicRegister; //Registro Interno. + procedure PutLabel(lbl: string); inline; + procedure PutTopComm(cmt: string; replace: boolean = true); inline; + procedure PutComm(cmt: string); inline; + procedure PutFwdComm(cmt: string); inline; + function ReportRAMusage: string; + function ValidateByteRange(n: integer): boolean; + function ValidateWordRange(n: integer): boolean; + function ValidateDWordRange(n: Int64): boolean; + protected + procedure GenerateROBdetComment; + procedure GenerateROUdetComment; + protected //Rutinas de gestión de memoria de bajo nivel + procedure AssignRAM(out addr: word; regName: string; shared: boolean); //Asigna a una dirección física + procedure AssignRAMbit(out addr: word; out bit: byte; regName: string; + shared: boolean); //Asigna a una dirección física + function CreateRegisterByte(RegType: TPicRegType): TPicRegister; + function CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; + protected //Variables temporales + {Estas variables temporales, se crean como forma de acceder a campos de una variable + como varbyte.bit o varword.low. Se almacenan en "varFields" y se eliminan al final} + varFields: TxpEleVars; //Contenedor + function CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; + {Estas variables se usan para operaciones en el generador de código. + No se almacenan en "varFields". Así se definió al principio, pero podrían también + almacenarse, asumiendo que no importe crear variables dinámicas.} + function NewTmpVarWord(adL, adH: word): TxpEleVar; + function NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; + protected //Rutinas de gestión de memoria para registros + varStkBit : TxpEleVar; //variable bit. Usada para trabajar con la pila + varStkByte: TxpEleVar; //variable byte. Usada para trabajar con la pila + varStkWord: TxpEleVar; //variable word. Usada para trabajar con la pila + varStkDWord: TxpEleVar; //variable dword. Usada para trabajar con la pila + function GetAuxRegisterByte: TPicRegister; + function GetAuxRegisterBit: TPicRegisterBit; + //Gestión de la pila + function GetStkRegisterByte: TPicRegister; + function GetStkRegisterBit: TPicRegisterBit; + function GetVarBitFromStk: TxpEleVar; + function GetVarByteFromStk: TxpEleVar; + function GetVarWordFromStk: TxpEleVar; + function GetVarDWordFromStk: TxpEleVar; + function FreeStkRegisterBit: boolean; + function FreeStkRegisterByte: boolean; + function FreeStkRegisterWord: boolean; + function FreeStkRegisterDWord: boolean; + protected //Rutinas de gestión de memoria para variables + {Estas rutinas estarían mejor ubicadas en TCompilerBase, pero como dependen del + objeto "pic", se colocan mejor aquí.} + procedure AssignRAMinBit(absAdd, absBit: integer; var addr: word; + var bit: byte; regName: string; shared: boolean = false); + procedure AssignRAMinByte(absAdd: integer; var addr: word; regName: string; + shared: boolean = false); + procedure CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); + protected //Métodos para fijar el resultado + //Métodos básicos + procedure SetResultNull; + procedure SetResultConst(typ: TxpEleType); + procedure SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); + procedure SetResultVarRef(rVarBase: TxpEleVar); + procedure SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); + //Fija el resultado de ROB como constante. + procedure SetROBResultConst_bool(valBool: boolean); + procedure SetROBResultConst_bit (valBit: boolean); + procedure SetROBResultConst_byte(valByte: integer); + procedure SetROBResultConst_char(valByte: integer); + procedure SetROBResultConst_word(valWord: integer); + procedure SetROBResultConst_dword(valWord: Int64); + //Fija el resultado de ROB como variable + procedure SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + //Fija el resultado de ROB como expresión + {El parámetro "Opt", es más que nada para asegurar que solo se use con Operaciones + binarias.} + procedure SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); + procedure SetROBResultExpres_byte(Opt: TxpOperation); + procedure SetROBResultExpres_char(Opt: TxpOperation); + procedure SetROBResultExpres_word(Opt: TxpOperation); + procedure SetROBResultExpres_dword(Opt: TxpOperation); + //Fija el resultado de ROU + procedure SetROUResultConst_bit(valBit: boolean); + procedure SetROUResultConst_byte(valByte: integer); + procedure SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean = false); + procedure SetROUResultVarRef(rVarBase: TxpEleVar); + procedure SetROUResultExpres_bit(Inverted: boolean); + procedure SetROUResultExpres_byte; + procedure SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); + //Adicionales + procedure ChangeResultBitToBool; + procedure ChangeResultCharToByte; + function ChangePointerToExpres(var ope: TOperand): boolean; + protected //Instrucciones que no manejan el cambio de banco + procedure CodAsmFD(const inst: TPIC17Inst; const f: byte; d: TPIC17destin); + procedure CodAsmK(const inst: TPIC17Inst; const k: byte); + procedure _BANKSEL(targetBank: byte); + procedure GenCodBank(targetAdrr: word); + procedure _BANKRESET; + function _PC: word; + function _CLOCK: integer; + procedure _LABEL(igot: integer); + //Instrucciones simples + procedure _ADDLW(const k: word); + procedure _ADDWF(const f: byte; d: TPIC17destin); + procedure _ANDLW(const k: word); + procedure _ANDWF(const f: byte; d: TPIC17destin); + procedure _BCF(const f, b: byte); + procedure _BSF(const f, b: byte); + procedure _BTFSC(const f, b: byte); + procedure _BTFSS(const f, b: byte); + procedure _CALL(const a: word); + procedure _CLRF(const f: byte); + procedure _CLRW; + procedure _CLRWDT; + procedure _COMF(const f: byte; d: TPIC17destin); + procedure _DECF(const f: byte; d: TPIC17destin); + procedure _DECFSZ(const f: byte; d: TPIC17destin); + procedure _GOTO(const a: word); + procedure _GOTO_PEND(out igot: integer); + procedure _INCF(const f: byte; d: TPIC17destin); + procedure _INCFSZ(const f: byte; d: TPIC17destin); + procedure _IORLW(const k: word); + procedure _IORWF(const f: byte; d: TPIC17destin); + procedure _MOVF(const f: byte; d: TPIC17destin); + procedure _MOVLW(const k: word); + procedure _MOVWF(const f: byte); + procedure _NOP; + procedure _RETFIE; + procedure _RETLW(const k: word); + procedure _RETURN; + procedure _RLF(const f: byte; d: TPIC17destin); + procedure _RRF(const f: byte; d: TPIC17destin); + procedure _SLEEP; + procedure _SUBLW(const k: word); + procedure _SUBWF(const f: byte; d: TPIC17destin); + procedure _SWAPF(const f: byte; d: TPIC17destin); + procedure _XORLW(const k: word); + procedure _XORWF(const f: byte; d: TPIC17destin); + protected //Instrucciones "k" + //Instrucciones equivalentes + procedure kADDLW(const k: word); + procedure kADDWF(addr: word; d: TPIC17destin); + procedure kANDLW(const k: word); + procedure kANDWF(addr: word; d: TPIC17destin); + procedure kBCF(const f: TPicRegisterBit); + procedure kBSF(const f: TPicRegisterBit); + procedure kBTFSC(const f: TPicRegisterBit); + procedure kBTFSS(const f: TPicRegisterBit); + procedure kCALL(const a: word); + procedure kCLRF(addr: word); + procedure kCLRW; + procedure kCLRWDT; + procedure kCOMF(addr: word; d: TPIC17Destin); + procedure kDECF(addr: word; d: TPIC17Destin); + procedure kDECFSZ(const f: word; d: TPIC17destin); + procedure kGOTO(const a: word); + procedure kGOTO_PEND(out igot: integer); + procedure kINCF(addr: word; d: TPIC17destin); + procedure kINCFSZ(const f: word; d: TPIC17destin); + procedure kIORLW(const k: word); + procedure kIORWF(addr: word; d: TPIC17destin); + procedure kMOVF(addr: word; d: TPIC17destin); + procedure kMOVLW(const k: word); + procedure kMOVWF(addr: word); + procedure kNOP; + procedure kRETFIE; + procedure kRETLW(const k: word); + procedure kRETURN; + procedure kRLF(addr: word; d: TPIC17destin); + procedure kRRF(addr: word; d: TPIC17destin); + procedure kSLEEP; + procedure kSUBLW(const k: word); + procedure kSUBWF(addr: word; d: TPIC17destin); + procedure kSWAPF(addr: word; d: TPIC17destin); + procedure kXORLW(const k: word); + procedure kXORWF(addr: word; d: TPIC17destin); + //Instrucciones adicionales + procedure kSHIFTR(addr: word; d: TPIC17destin); + procedure kSHIFTL(addr: word; d: TPIC17destin); + procedure kIF_BSET(const f: TPicRegisterBit; out igot: integer); + procedure kIF_BSET_END(igot: integer); + public //Acceso a registro de trabajo +// property H_register: TPicRegister read H; +// property E_register: TPicRegister read E; +// property U_register: TPicRegister read U; + protected //Funciones de tipos + ///////////////// Tipo Bit //////////////// + procedure bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure bit_DefineRegisters; + procedure bit_SaveToStk; + //////////////// Tipo Byte ///////////// + procedure byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure byte_DefineRegisters; + procedure byte_SaveToStk; + procedure byte_GetItem(const OpPtr: pointer); + procedure byte_SetItem(const OpPtr: pointer); + procedure byte_ClearItems(const OpPtr: pointer); + procedure byte_bit(const OpPtr: pointer; nbit: byte); + procedure byte_bit0(const OpPtr: pointer); + procedure byte_bit1(const OpPtr: pointer); + procedure byte_bit2(const OpPtr: pointer); + procedure byte_bit3(const OpPtr: pointer); + procedure byte_bit4(const OpPtr: pointer); + procedure byte_bit5(const OpPtr: pointer); + procedure byte_bit6(const OpPtr: pointer); + procedure byte_bit7(const OpPtr: pointer); + //////////////// Tipo Word ///////////// + procedure word_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure word_DefineRegisters; + procedure word_SaveToStk; + procedure word_Low(const OpPtr: pointer); + procedure word_High(const OpPtr: pointer); + //////////////// Tipo DWord ///////////// + procedure dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); + procedure dword_DefineRegisters; + procedure dword_SaveToStk; + procedure dword_Extra(const OpPtr: pointer); + procedure dword_High(const OpPtr: pointer); + procedure dword_HighWord(const OpPtr: pointer); + procedure dword_Low(const OpPtr: pointer); + procedure dword_LowWord(const OpPtr: pointer); + procedure dword_Ultra(const OpPtr: pointer); + public //Acceso a campos del PIC + function PICName: string; override; + function PICNameShort: string; override; + function PICnBanks: byte; override; //Number of RAM banks + function PICCurBank: byte; override; //Current RAM bank + function PICBank(i: byte): TPICRAMBank; override; //Return a RAM bank + function PICnPages: byte; override; //Number of FLASH pages + function PICPage(i: byte): TPICFlashPage; override; //Return a FLASH page + function RAMmax: integer; override; + public //Inicialización + pic : TPIC17; //Objeto PIC de la serie 16. + procedure StartRegs; + function CompilerName: string; override; + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; +implementation +var + TXT_SAVE_W, TXT_SAVE_Z, TXT_SAVE_H, MSG_NO_ENOU_RAM, MSG_VER_CMP_EXP, + MSG_STACK_OVERF, MSG_NOT_IMPLEM, ER_VARIAB_EXPEC, ER_ONL_BYT_WORD, + ER_ASIG_EXPECT + : string; + +procedure SetLanguage; +begin + ParserDirec.SetLanguage; + {$I ..\language\tra_GenCodBas.pas} +end; +{ TGenCodPic } +procedure TGenCodBas.ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); +begin + linRep := linRep + regPtr^.name + + ' DB ' + 'bnk'+ IntToStr(bnk) + ':$' + IntToHex(offs, 3) + LineEnding; +end; +procedure TGenCodBas.PutLabel(lbl: string); +{Agrega uan etiqueta antes de la instrucción. Se recomienda incluir solo el nombre de +la etiqueta, sin ":", ni comentarios, porque este campo se usará para desensamblar.} +begin + pic.addTopLabel(lbl); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutTopComm(cmt: string; replace: boolean = true); +//Agrega comentario al inicio de la posición de memoria +begin + pic.addTopComm(cmt, replace); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutComm(cmt: string); +//Agrega comentario lateral al código. Se llama después de poner la instrucción. +begin + pic.addSideComm(cmt, true); //agrega línea al código ensmblador +end; +procedure TGenCodBas.PutFwdComm(cmt: string); +//Agrega comentario lateral al código. Se llama antes de poner la instrucción. +begin + pic.addSideComm(cmt, false); //agrega línea al código ensmblador +end; +function TGenCodBas.ReportRAMusage: string; +{Genera un reporte de uso de la memoria RAM} +begin + linRep := ''; + pic.ExploreUsed(@ProcByteUsed); + Result := linRep; +end; +function TGenCodBas.ValidateByteRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<256) then + exit(true) + else begin + GenError('Numeric value exceeds a byte range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateWordRange(n: integer): boolean; +//Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. +begin + if (n>=0) and (n<65536) then + exit(true) + else begin + GenError('Numeric value exceeds a word range.'); + exit(false); + end; +end; +function TGenCodBas.ValidateDWordRange(n: Int64): boolean; +begin + if (n>=0) and (n<$100000000) then + exit(true) + else begin + GenError('Numeric value exceeds a dword range.'); + exit(false); + end; +end; +procedure TGenCodBas.GenerateROBdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación binaria, que es cuando está definido operType, p1, y p2.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ',' + + p2^.StoOpChr + ':' + p2^.Typ.name + ')', false); + end; +end; +procedure TGenCodBas.GenerateROUdetComment; +{Genera un comentario detallado en el código ASM. Válido solo para +Rutinas de Operación unaria, que es cuando está definido operType, y p1.} +begin + if incDetComm then begin + PutTopComm(' ;Oper(' + p1^.StoOpChr + ':' + p1^.Typ.name + ')', false); + end; +end; +//Rutinas de gestión de memoria de bajo nivel +procedure TGenCodBas.AssignRAM(out addr: word; regName: string; shared: boolean); +//Asocia a una dirección física de la memoria del PIC. +//Si encuentra error, devuelve el mensaje de error en "MsjError" +begin + {Esta dirección física, la mantendrá este registro hasta el final de la compilación + y en teoría, hasta el final de la ejecución de programa en el PIC.} + if not pic.GetFreeByte(addr, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, regName); //pone nombre a registro +end; +procedure TGenCodBas.AssignRAMbit(out addr: word; out bit: byte; regName: string; shared: boolean); +begin + if not pic.GetFreeBit(addr, bit, shared) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAMbit(addr, bit, regName); //pone nombre a bit +end; +function TGenCodBas.CreateRegisterByte(RegType: TPicRegType): TPicRegister; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegister; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegister.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAux.Add(reg); //agrega a lista + if listRegAux.Count > MAX_REGS_AUX_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; +{Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. + Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada +para agregar un nuevo registro a listRegAux.} +var + reg: TPicRegisterBit; +begin + //Agrega un nuevo objeto TPicRegister a la lista; + reg := TPicRegisterBit.Create; //Crea objeto + reg.typ := RegType; //asigna tipo + listRegAuxBit.Add(reg); //agrega a lista + if listRegAuxBit.Count > MAX_REGS_AUX_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + Result := reg; //devuelve referencia +end; +function TGenCodBas.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; +{Crea una variable temporal agregándola al contenedor varFields, que es +limpiado al iniciar la compilación. Notar que la variable temporal creada, no tiene +RAM asiganda.} +var + tmpVar: TxpEleVar; +begin + tmpVar:= TxpEleVar.Create; + tmpVar.name := nam; + tmpVar.typ := eleTyp; + tmpVar.adicPar.hasAdic := decNone; + tmpVar.adicPar.hasInit := false; + tmpVar.IsTmp := true; //Para que se pueda luego identificar. + varFields.Add(tmpVar); //Agrega + Result := tmpVar; +end; +function TGenCodBas.NewTmpVarWord(adL, adH: word): TxpEleVar; +{Crea una variable temporal Word, con las direcciones de los registros indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typWord; + Result.addr0 := adL; //asigna direcciones + Result.addr1 := adH; +end; +//Variables temporales +function TGenCodBas.NewTmpVarDword(adL, adH, adE, adU: word): TxpEleVar; +{Crea una variable temporal DWord, con las direcciones de los registros indicados, y +devuelve la referencia. La variable se crea sin asignación de memoria.} +begin + Result := TxpEleVar.Create; + Result.typ := typDWord; + Result.addr0 := adL; //asigna direcciones + Result.addr1 := adH; + Result.addr2 := adE; + Result.addr3 := adU; +end; +//Rutinas de Gestión de memoria +function TGenCodBas.GetAuxRegisterByte: TPicRegister; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegister; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAux do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then begin + reg.used := true; + exit(reg); + end; + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterByte(prtAuxReg); + if reg = nil then exit(nil); //hubo error + regName := 'aux'+IntToSTr(listRegAux.Count); + AssignRAM(reg.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetAuxRegisterBit: TPicRegisterBit; +{Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. + Si hay algún error, llama a GenError() y devuelve NIL} +var + reg: TPicRegisterBit; + regName: String; +begin + //Busca en los registros creados + {Notar que no se incluye en la búsqueda a los registros de trabajo. Esto es por un + tema de orden, si bien podría ser factible, permitir usar algún registro de trabajo no + usado, como registro auxiliar.} + for reg in listRegAuxBit do begin + //Se supone que todos los registros auxiliares, estarán siempre asignados + if (reg.typ = prtAuxReg) and not reg.used then + exit(reg); + end; + //No encontró ninguno libre, crea uno en memoria + reg := CreateRegisterBit(prtAuxReg); + if reg = nil then exit(nil); //hubo errir + regName := 'aux'+IntToSTr(listRegAuxBit.Count); + AssignRAMbit(reg.addr, reg.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit; + reg.assigned := true; //Tiene memoria asiganda + reg.used := true; //marca como usado + Result := reg; //Devuelve la referencia +end; +function TGenCodBas.GetStkRegisterByte: TPicRegister; +{Pone un registro de un byte, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterByte(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegister; + regName: String; +begin + //Validación + if stackTop>MAX_REGS_STACK_BYTE then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTop>listRegStk.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegister.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStk.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStk.Count); + AssignRAM(reg0.addr, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStk[stackTop]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTop); //actualiza +end; +function TGenCodBas.GetStkRegisterBit: TPicRegisterBit; +{Pone un registro de un bit, en la pila, de modo que se pueda luego acceder con +FreeStkRegisterBit(). Si hay un error, devuelve NIL. +Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila +en el compilador.} +var + reg0: TPicRegisterBit; + regName: String; +begin + //Validación + if stackTopBit>MAX_REGS_STACK_BIT then begin + //Se asume que se desbordó la memoria evaluando a alguna expresión + GenError(MSG_VER_CMP_EXP); + exit(nil); + end; + if stackTopBit>listRegStkBit.Count-1 then begin + //Apunta a una posición vacía. hay qie agregar + //Agrega un nuevo objeto TPicRegister a la lista; + reg0 := TPicRegisterBit.Create; //Crea objeto + reg0.typ := prtStkReg; //asigna tipo + listRegStkBit.Add(reg0); //agrega a lista + regName := 'stk'+IntToSTr(listRegStkBit.Count); + AssignRAMbit(reg0.addr, reg0.bit, regName, false); //Asigna memoria. Puede generar error. + if HayError then exit(nil); + end; + Result := listRegStkBit[stackTopBit]; //toma registro + Result.assigned := true; + Result.used := true; //lo marca + inc(stackTopBit); //actualiza +end; +function TGenCodBas.GetVarBitFromStk: TxpEleVar; +{Devuelve la referencia a una variable bit, que representa al último bit agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegisterBit; +begin + topreg := listRegStkBit[stackTopBit-1]; //toma referecnia de registro de la pila + //Usamos la variable "varStkBit" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkBit.addr0 := topreg.addr; + varStkBit.bit0 := topreg.bit; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkBit; +end; +function TGenCodBas.GetVarByteFromStk: TxpEleVar; +{Devuelve la referencia a una variable byte, que representa al último byte agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + //Usamos la variable "varStkByte" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + varStkByte.addr0 := topReg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referecnia + Result := varStkByte; +end; +function TGenCodBas.GetVarWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable word, que representa al último word agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkWord; +end; +function TGenCodBas.GetVarDWordFromStk: TxpEleVar; +{Devuelve la referencia a una variable Dword, que representa al último Dword agregado en +la pila. Se usa como un medio de trabajar con los datos de la pila.} +var + topreg: TPicRegister; +begin + //Usamos la variable "varStkDWord" que existe siempre, para devolver la referencia. + //Primero la hacemos apuntar a la dirección física de la pila + topreg := listRegStk[stackTop-1]; //toma referencia de registro de la pila + varStkDWord.addr3 := topreg.addr; + topreg := listRegStk[stackTop-2]; //toma referencia de registro de la pila + varStkDWord.addr2 := topreg.addr; + topreg := listRegStk[stackTop-3]; //toma referencia de registro de la pila + varStkDWord.addr1 := topreg.addr; + topreg := listRegStk[stackTop-4]; //toma referencia de registro de la pila + varStkDWord.addr0 := topreg.addr; + //Ahora que tenemos ya la variable configurada, devolvemos la referencia + Result := varStkDWord; +end; +function TGenCodBas.FreeStkRegisterBit: boolean; +{Libera el último bit, que se pidió a la RAM. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTopBit=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTopBit); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterByte: boolean; +{Libera el último byte, que se pidió a la RAM. Devuelve en "reg", la dirección del último + byte pedido. Si hubo error, devuelve FALSE. + Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} +begin + if stackTop=0 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterWord: boolean; +{Libera el último word, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=1 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 2); //Baja puntero + exit(true); +end; +function TGenCodBas.FreeStkRegisterDWord: boolean; +{Libera el último dword, que se pidió a la RAM. Si hubo error, devuelve FALSE.} +begin + if stackTop<=3 then begin //Ya está abajo + GenError(MSG_STACK_OVERF); + exit(false); + end; + dec(stackTop, 4); //Baja puntero + exit(true); +end; +////Rutinas de gestión de memoria para variables +procedure TGenCodBas.AssignRAMinBit(absAdd, absBit: integer; + var addr: word; var bit: byte; regName: string; shared: boolean = false); +{Aeigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAMbit(addr, bit, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + bit := absBit; //para los bits no hay transformación + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAMbit(addr, bit, regName); + end; +end; +procedure TGenCodBas.AssignRAMinByte(absAdd: integer; + var addr: word; regName: string; shared: boolean = false); +{Asigna RAM a un registro o lo coloca en la dirección indicada.} +begin + //Obtiene los valores de: offs, bnk, y bit, para el alamacenamiento. + if absAdd=-1 then begin + //Caso normal, sin dirección absoluta. + AssignRAM(addr, regName, shared); + //Puede salir con error + end else begin + //Se debe crear en una posición absoluta + addr := absAdd; + //Pone nombre a la celda en RAM, para que pueda desensamblarse con detalle + pic.SetNameRAM(addr, regName); + if pic.MsjError<>'' then begin + GenError(pic.MsjError); + pic.MsjError := ''; //Para evitar generar otra vez el mensaje + exit; + end; + end; +end; +procedure TGenCodBas.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); +{Rutina para asignar espacio físico a una variable. La variable, es creada en memoria +con los parámetros que posea en ese momento. Si está definida como ABSOLUTE, se le +creará en la posicón indicada. } +var + varName: String; + absAdd: integer; + absBit, nbytes: integer; + typ: TxpEleType; + //offs, bnk: byte; + addr: word; +begin + //Valores solicitados. Ya deben estar iniciado este campo. + varName := nVar.name; + typ := nVar.typ; + if nVar.adicPar.hasAdic = decAbsol then begin + absAdd := nVar.adicPar.absAddr; + if typ.IsBitSize then begin + absBit := nVar.adicPar.absBit; + end else begin + absBit := -1; + end; + end else begin + absAdd := -1; //no aplica + absBit := -1; //no aplica + end; + //Asigna espacio, de acuerdo al tipo + if typ = typBit then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typBool then begin + AssignRAMinBit(absAdd, absBit, nVar.addr0, nVar.bit0, varName, shared); + end else if typ = typByte then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typChar then begin + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else if typ = typWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 2 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + end; + end else if typ = typDWord then begin + //Registra variable en la tabla + if absAdd = -1 then begin //Variable normal + //Los 4 bytes, no necesariamente serán consecutivos (se toma los que estén libres)} + AssignRAMinByte(-1, nVar.addr0, varName+'@0', shared); + AssignRAMinByte(-1, nVar.addr1, varName+'@1', shared); + AssignRAMinByte(-1, nVar.addr2, varName+'@2', shared); + AssignRAMinByte(-1, nVar.addr3, varName+'@3', shared); + end else begin //Variable absoluta + //Las variables absolutas se almacenarán siempre consecutivas + AssignRAMinByte(absAdd , nVar.addr0, varName+'@0'); + AssignRAMinByte(absAdd+1, nVar.addr1, varName+'@1'); + AssignRAMinByte(absAdd+2, nVar.addr2, varName+'@2'); + AssignRAMinByte(absAdd+3, nVar.addr3, varName+'@3'); + end; + end else if typ.catType = tctArray then begin + //Es un arreglo de algún tipo + if absAdd<>-1 then begin + //Se pide mapearlo de forma absoluta + GenError(MSG_NOT_IMPLEM, [varName]); + exit; + end; + //Asignamos espacio en RAM + nbytes := typ.nItems * typ.itmType.size; + if not pic.GetFreeBytes(nbytes, addr) then begin + GenError(MSG_NO_ENOU_RAM); + exit; + end; + pic.SetNameRAM(addr, nVar.name); //Nombre solo al primer byte + //Fija dirección física. Se usa solamente "addr0", como referencia, porque + //no se tienen suficientes registros para modelar todo el arreglo. + nVar.addr0 := addr; + end else if typ.catType = tctPointer then begin + //Es un puntero a algún tipo. + //Los punteros cortos, se manejan como bytes + AssignRAMinByte(absAdd, nVar.addr0, varName, shared); + end else begin + GenError(MSG_NOT_IMPLEM, [varName]); + end; + if HayError then exit; + if typ.OnGlobalDef<>nil then typ.OnGlobalDef(varName, ''); +end; +//Métodos para fijar el resultado +procedure TGenCodBas.SetResultNull; +{Fija el resultado como NULL.} +begin + res.SetAsNull; + InvertedFromC:=false; //para limpiar el estado + res.Inverted := false; +end; +procedure TGenCodBas.SetResultConst(typ: TxpEleType); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsConst(typ); + InvertedFromC:=false; //para limpiar el estado + {Se asume que no se necesita invertir la lógica, en una constante (booleana o bit), ya + que en este caso, tenemos control pleno de su valor} + res.Inverted := false; +end; +procedure TGenCodBas.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); +{Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, +siempre antes de evaluar cada subexpresión.} +begin + res.SetAsVariab(rVar); + InvertedFromC:=false; //para limpiar el estado + //"Inverted" solo tiene sentido, para los tipos bit y boolean + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); +{Fija los parámetros del resultado de una subexpresion (en "res"). Este método se debe +ejecutar, siempre antes de evaluar cada subexpresión. Más exactamente, antes de generar +código para ña subexpresión, porque esta rutina puede generar su propio código.} +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + //Fija como expresión + res.SetAsExpres(typ); + //Limpia el estado. Esto es útil que se haga antes de generar el código para una operación + InvertedFromC:=false; + //Actualiza el estado de los registros de trabajo. + RTstate := typ; +end; +procedure TGenCodBas.SetResultVarRef(rVarBase: TxpEleVar); +begin + res.SetAsVarRef(rVarBase); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +procedure TGenCodBas.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); +begin + if ChkRTState then begin + //Se pide verificar si se están suando los RT, para salvarlos en la pila. + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + end else begin + //No se usan. Están libres + end; + end; + res.SetAsExpRef(rVarBase, typ); + InvertedFromC:=false; //para limpiar el estado + //No se usa "Inverted" en este almacenamiento + res.Inverted := false; +end; +//Fija el resultado de ROP como constante +procedure TGenCodBas.SetROBResultConst_bool(valBool: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBool); + res.valBool := valBool; +end; +procedure TGenCodBas.SetROBResultConst_bit(valBit: boolean); +begin + GenerateROBdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROBResultConst_byte(valByte: integer); +begin + GenerateROBdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_char(valByte: integer); +begin + GenerateROBdetComment; + SetResultConst(typChar); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROBResultConst_word(valWord: integer); +begin + GenerateROBdetComment; + if not ValidateWordRange(valWord) then + exit; //Error de rango + SetResultConst(typWord); + res.valInt := valWord; +end; +procedure TGenCodBas.SetROBResultConst_dword(valWord: Int64); +begin + GenerateROBdetComment; + if not ValidateDWordRange(valWord) then + exit; //Error de rango + SetResultConst(typDWord); + res.valInt := valWord; +end; +//Fija el resultado de ROP como variable +procedure TGenCodBas.SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROBdetComment; + SetResultVariab(rVar, Inverted); +end; +//Fija el resultado de ROP como expresión +procedure TGenCodBas.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^ y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); +{Define el resultado como una expresión de tipo Boolean, y se asegura de reservar el +registro Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBool, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBool); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROBResultExpres_byte(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_char(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Char, y se asegura de reservar el +registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de +la oepración en p1^y p2^, porque toma información de allí.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typChar, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typChar); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROBResultExpres_word(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typWord); + end; +end; +procedure TGenCodBas.SetROBResultExpres_dword(Opt: TxpOperation); +{Define el resultado como una expresión de tipo Word, y se asegura de reservar los +registros H,W, para devolver la salida.} +begin + GenerateROBdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) or (p2^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + typDWord.DefineRegister; //Se asegura que exista H, E y U + SetResultExpres(typDWord, false); + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typDWord); + end; +end; +//Fija el resultado de ROU +procedure TGenCodBas.SetROUResultConst_bit(valBit: boolean); +begin + GenerateROUdetComment; + SetResultConst(typBit); + res.valBool := valBit; +end; +procedure TGenCodBas.SetROUResultConst_byte(valByte: integer); +begin + GenerateROUdetComment; + if not ValidateByteRange(valByte) then + exit; //Error de rango + SetResultConst(typByte); + res.valInt := valByte; +end; +procedure TGenCodBas.SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean); +begin + GenerateROUdetComment; + SetResultVariab(rVar, Inverted); +end; +procedure TGenCodBas.SetROUResultVarRef(rVarBase: TxpEleVar); +{Fija el resultado como una referencia de tipo stVarRefVar} +begin + GenerateROUdetComment; + SetResultVarRef(rVarBase); +end; +procedure TGenCodBas.SetROUResultExpres_bit(Inverted: boolean); +{Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro +Z, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typBit, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typBit); //actualiza "RTstate" + end; + //Fija la lógica + res.Inverted := Inverted; +end; +procedure TGenCodBas.SetROUResultExpres_byte; +{Define el resultado como una expresión de tipo Byte, y se asegura de reservar el +registro W, para devolver la salida. Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpres(typByte, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpres(typByte); //actualiza "RTstate" + end; +end; +procedure TGenCodBas.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); +{Define el resultado como una expresión stVarRefExp, protegiendo los RT si es necesario. +Se debe usar solo para operaciones unarias.} +begin + GenerateROUdetComment; + //Se van a usar los RT. Verificar si los RT están ocupadoa + if (p1^.Sto = stExpres) then begin + //Alguno de los operandos de la operación actual, está usando algún RT + SetResultExpRef(rVarBase, typ, false); //actualiza "RTstate" + end else begin + {Los RT no están siendo usados, por la operación actual. + Pero pueden estar ocupados por la operación anterior (Ver doc. técnica).} + SetResultExpRef(rVarBase, typ); //actualiza "RTstate" + end; +end; +//Adicionales +procedure TGenCodBas.ChangeResultBitToBool; +{Cambia el tipo de dato del resultado (que se supone es Bit), a Boolean.} +var + tmpVar: TxpEleVar; +begin + {Lo más fácil sería hacer: res.Typ := typBool; + pero cuando "res", sea una variable, se estaría cambiando el ¡tipo de la variable! } + case res.Sto of + stConst : res.SetAsConst(typBool); + stExpres: res.SetAsExpres(typBool); + stVariab: begin + {Para el caso de variables es más complejo, porque no se puede modificar su tipo + real, sino que hay que crear una variable temporal.} + tmpVar := CreateTmpVar('', typBool); //crea variable temporal Boolean + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo bit + tmpVar.bit0 := res.rVar.bit0; + res.SetAsVariab(tmpVar); //Devuelve boolean + end; + end; +end; +procedure TGenCodBas.ChangeResultCharToByte; +begin + +end; +function TGenCodBas.ChangePointerToExpres(var ope: TOperand): boolean; +{Convierte un operando de tipo puntero dereferenciado (x^), en una expresión en los RT, +para que pueda ser evaluado, sin problemas, por las ROP. +Si hay error devuelve false.} +begin + Result := true; + if ope.Sto = stVarRef then begin + //Se tiene una variable puntero dereferenciada: x^ + {Convierte en expresión, verificando los RT} + if RTstate<>nil then begin + //Si se usan RT en la operación anterior. Hay que salvar en pila + RTstate.SaveToStk; //Se guardan por tipo + if HayError then exit(false); + end; + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end else if ope.Sto = stExpRef then begin + //Es una expresión. + {Se asume que el operando tiene su resultado en los RT. SI estuvieran en la pila + no se aplicaría.} + //Llama a rutina que mueve el operando a RT + LoadToRT(ope); + if HayError then exit(false); //Por si no está implementado + //COnfigura después SetAsExpres(), para que LoadToRT(), sepa el almacenamiento de "op" + ope.SetAsExpres(ope.Typ); //"ope.Typ" es el tipo al que apunta + InvertedFromC:=false; + RTstate := ope.Typ; + end; +end; +//Rutinas generales para la codificación +procedure TGenCodBas.CodAsmFD(const inst: TPIC17Inst; const f: byte; + d: TPIC17destin); +begin + pic.codAsmFD(inst, f, d); +end; +procedure TGenCodBas.CodAsmK(const inst: TPIC17Inst; const k: byte); +begin + pic.codAsmK(inst, k); +end; +{procedure CodAsm(const inst: TPIC16Inst; const f, b: byte); inline; +begin + pic.codAsmFB(inst, f, b); +end;} +//rutinas que facilitan la codifición de instrucciones +procedure TGenCodBas._BANKRESET; +{Reinicia el banco al banco 0, independientemente de donde se pueda encontrar antes. +Se usa cuando no se puede predecir exactamente, en que banco se encontrará el +compilador.} +begin + _MOVLB(0); + CurrBank:=0; +end; +procedure TGenCodBas._BANKSEL(targetBank: byte); +{Verifica si se está en el banco deseado, de no ser así genera las instrucciones + para el cambio de banco. + Devuelve el número de instrucciones generado.} +begin + if pic.NumBanks = 1 then + exit; //Caso especial. ¿Hay un PIC de esta serie con un banco? + if targetBank = CurrBank then + exit; //Ya estamos en el banco pedido + //Se está en un banco diferente + if (CurrBank = 255) or (CurrBank <> targetBank) then begin + //Debe haber cambio + _MOVLB(targetBank); PutComm(';Bank set.'); + end; + ////////////////////////////////////// + CurrBank := targetBank; + exit; +end; +procedure TGenCodBas.GenCodBank(targetAdrr: word); +{Genera código de cambio de banco para acceder a la dirección indicada. +Se debe usar antes de una instrucción que va a acceder a RAM.} +var + targetBank: byte; +begin + if targetAdrr and $07f <= $0B then exit; //Mapped in all banks + if targetAdrr and $07f >= $70 then exit; //Mapped in all banks + targetBank := targetAdrr >> 7; + { TODO : Se debería ver un medio rápido para detectar si la variable "targetAdrr" está + mapeada, también, en otros bancos y así evitar cambios innecesarios de banco. } + _BANKSEL(targetBank); +end; +function TGenCodBas._PC: word; inline; +{Devuelve la dirección actual en Flash} +begin + Result := pic.iFlash; +end; +function TGenCodBas._CLOCK: integer; inline; +{Devuelve la frecuencia de reloj del PIC} +begin + Result := pic.frequen; +end; +procedure TGenCodBas._LABEL(igot: integer); +{Termina de codificar el GOTO_PEND} +begin + pic.codGotoAt(igot, _PC); +end; +//Instrucciones simples +{Estas instrucciones no guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas._ADDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ADDLW, k); +end; +procedure TGenCodBas._ANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas._ADDWF(const f: byte; d: TPIC17destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, f,d); +end; +procedure TGenCodBas._ANDWF(const f: byte; d: TPIC17destin); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, f,d); +end; +procedure TGenCodBas._CLRF(const f: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, f); +end; +procedure TGenCodBas._CLRW; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas._COMF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, f,d); +end; +procedure TGenCodBas._DECF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, f,d); +end; +procedure TGenCodBas._DECFSZ(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas._INCF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, f,d); +end; +procedure TGenCodBas._INCFSZ(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +procedure TGenCodBas._IORWF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, f,d); +end; +procedure TGenCodBas._MOVF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, f,d); +end; +procedure TGenCodBas._MOVWF(const f: byte); +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, f); +end; +procedure TGenCodBas._NOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas._RLF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, f,d); +end; +procedure TGenCodBas._RRF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, f,d); +end; +procedure TGenCodBas._SUBWF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, f,d); +end; +procedure TGenCodBas._SWAPF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, f,d); +end; +procedure TGenCodBas._BCF(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f, b); +end; +procedure TGenCodBas._BSF(const f, b: byte); //inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f, b); +end; +procedure TGenCodBas._BTFSC(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f, b); +end; +procedure TGenCodBas._BTFSS(const f, b: byte); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f, b); +end; +procedure TGenCodBas._CALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas._CLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas._GOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas._GOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas._IORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas._MOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas._RETFIE; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas._RETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas._RETURN; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas._SLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas._SUBLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_SUBLW, k); +end; +procedure TGenCodBas._XORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas._XORWF(const f: byte; d: TPIC17destin); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, f,d); +end; +//Instrucciones adicionales de la gama mejorada +procedure TGenCodBas._MOVLB(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLB, k); +end; +//Instrucciones que manejan el cambio de banco +{Estas instrucciones guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas.kADDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; //Este es el banco esperado + pic.codAsmK(i_ADDLW, k); +end; +//procedure TGenCodBas.kADDWF(const f: word; d: TPIC17destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_ADDWF, f,d); +//end; +procedure TGenCodBas.kADDWF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ADDWF, addr, d); +end; +procedure TGenCodBas.kANDLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_ANDLW, k); +end; +procedure TGenCodBas.kANDWF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_ANDWF, addr, d); +end; +procedure TGenCodBas.kCLRF(addr: word); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_CLRF, addr); +end; +procedure TGenCodBas.kCLRW; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRW); +end; +procedure TGenCodBas.kCOMF(addr: word; d: TPIC17Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_COMF, addr, d); +end; +procedure TGenCodBas.kDECF(addr: word; d: TPIC17Destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECF, addr, d); +end; +procedure TGenCodBas.kDECFSZ(const f: word; d: TPIC17destin); inline; +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_DECFSZ, f,d); +end; +procedure TGenCodBas.kINCF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCF, addr, d); +end; +procedure TGenCodBas.kINCFSZ(const f: word; d: TPIC17destin); inline; +begin + GenCodBank(f); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_INCFSZ, f,d); +end; +//procedure TGenCodBas.kIORWF(const f: word; d: TPIC17destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_IORWF, f,d); +//end; +procedure TGenCodBas.kIORWF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_IORWF, addr, d); +end; +procedure TGenCodBas.kMOVF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_MOVF, addr, d); +end; +procedure TGenCodBas.kMOVWF(addr: word); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmF(i_MOVWF, addr); +end; +procedure TGenCodBas.kNOP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_NOP); +end; +procedure TGenCodBas.kRLF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RLF, addr, d); +end; +procedure TGenCodBas.kRRF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_RRF, addr, d); +end; +//procedure TGenCodBas.kSUBWF(const f: word; d: TPIC17destin); inline; +//begin +// GenCodBank(f); +// pic.flash[pic.iFlash].curBnk := CurrBank; +// pic.codAsmFD(i_SUBWF, f,d); +//end; +procedure TGenCodBas.kSUBWF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SUBWF, addr, d); +end; +procedure TGenCodBas.kSWAPF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_SWAPF, addr, d); +end; +procedure TGenCodBas.kBCF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BCF, f.addr, f.bit); +end; +procedure TGenCodBas.kBSF(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BSF, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSC(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSC, f.addr, f.bit); +end; +procedure TGenCodBas.kBTFSS(const f: TPicRegisterBit); +begin + GenCodBank(f.addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFB(i_BTFSS, f.addr, f.bit); +end; +procedure TGenCodBas.kCALL(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_CALL, a); +end; +procedure TGenCodBas.kCLRWDT; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_CLRWDT); +end; +procedure TGenCodBas.kGOTO(const a: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, a); +end; +procedure TGenCodBas.kGOTO_PEND(out igot: integer); +{Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección + donde se escribe el GOTO, para poder completarla posteriormente. +} +begin + igot := pic.iFlash; //guarda posición de instrucción de salto + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido +end; +procedure TGenCodBas.kIORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_IORLW, k); +end; +procedure TGenCodBas.kMOVLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_MOVLW, k); +end; +procedure TGenCodBas.kRETFIE; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETFIE); +end; +procedure TGenCodBas.kRETLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_RETLW, k); +end; +procedure TGenCodBas.kRETURN; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_RETURN); +end; +procedure TGenCodBas.kSLEEP; inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsm(i_SLEEP); +end; +procedure TGenCodBas.kSUBLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_SUBLW, k); +end; +procedure TGenCodBas.kXORLW(const k: word); inline; +begin + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmK(i_XORLW, k); +end; +procedure TGenCodBas.kXORWF(addr: word; d: TPIC17destin); +begin + GenCodBank(addr); + pic.flash[pic.iFlash].curBnk := CurrBank; + pic.codAsmFD(i_XORWF, addr, d); +end; +//Instrucciones adicionales +procedure TGenCodBas.kSHIFTR(addr: word; d: TPIC17destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RRF(addr, d); +end; +procedure TGenCodBas.kSHIFTL(addr: word; d: TPIC17destin); +begin + _BCF(_STATUS, _C); + GenCodBank(addr); + _RLF(addr, d); +end; +procedure TGenCodBas.kIF_BSET(const f: TPicRegisterBit; out igot: integer); +{Conditional instruction. Test if the specified bit is set. In this case, execute +the following block. +This instruction require to call to kEND_BSET() to define the End of the block. +The strategy here is to generate the sequence: + + + i_BTFSS f + GOTO + ;--- Block start --- + + ;--- Block end --- + +This scheme is the worst case (assuming the GOTO instruction is only one word), later +if the body of the IF, is only one word, it will be optimized to: + + + i_BTFSC f + ;--- Block start --- + + ;--- Block end --- + +It's not used the best case first, because in case it needs to change to the worst case, +it would need to insert and move several words, including, probably, GOTOs and LABELs, +needing to recalculate jumps. +} +begin + GenCodBank(f.addr); + _BTFSS(f.addr, f.bit); + igot := pic.iFlash; //guarda posición de instrucción de salto + _GOTO(0); //salto pendiente +end; +procedure TGenCodBas.kIF_BSET_END(igot: integer); +{Define the End of the block, created with kIF_BSET().} +begin + if _PC = igot+1 then begin + //No hay instrucciones en en bloque + pic.iFlash:=pic.iFlash-2 ; //Elimina hasta el i_BTFSS, porque no tiene sentido + end else if _PC = igot+2 then begin + //Es un bloque de una sola instrucción. Se puede optimizar + pic.BTFSC_sw_BTFSS(igot-1); //Cambia i_BTFSS por i_BTFSC + pic.flash[igot] := pic.flash[igot+1]; //Desplaza la instrucción + pic.flash[igot].used:=false; //Elimina + end else begin + //Bloque de varias instrucciones + pic.codGotoAt(igot, _PC); //termina de codificar el salto + end; +end; + +function TGenCodBas.PICName: string; +begin + Result := pic.Model; +end; +function TGenCodBas.PICNameShort: string; +{Genera el nombre del PIC, quitándole la parte inicial "PIC".} +begin + Result := copy(pic.Model, 4, length(pic.Model)); +end; +function TGenCodBas.PICnBanks: byte; +begin + Result := pic.NumBanks; +end; +function TGenCodBas.PICCurBank: byte; +begin + //Result := pic.STATUS >> 5; + Result := pic.ram[_BSR].dvalue; +end; +function TGenCodBas.PICBank(i: byte): TPICRAMBank; +begin + Result := pic.banks[i]; +end; +function TGenCodBas.PICnPages: byte; +begin + Result := pic.NumPages; +end; +function TGenCodBas.PICPage(i: byte): TPICFlashPage; +begin + Result := pic.pages[i]; +end; +function TGenCodBas.GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; +{Extrae el primer parámetro (que corresponde al índice) de las funciones getitem() o +setitem(). También reconoce las formas con corchetes [], y en ese caso pone "WithBrackets" +en TRUE. Si encuentra error, devuelve false.} +begin + if cIn.tok = '[' then begin + //Es la sintaxis a[i]; + WithBrack := true; + cIn.Next; //Toma "[" + end else begin + //Es la sintaxis a.item(i); + WithBrack := false; + cIn.Next; //Toma identificador de campo + //Captura parámetro + if not CaptureTok('(') then exit(false); + end; + par := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit(false); + if par.Typ <> typByte then begin + GenError('Expected byte as index.'); + end; + if HayError then exit(false); + exit(true); +end; +function TGenCodBas.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; +{Lee el segundo parámetro de SetItem y devuelve en "value". Valida que sea sel tipo +correcto. Si hay error, devuelve FALSE.} +var + typItem: TxpEleType; +begin + if WithBrack then begin + if not CaptureTok(']') then exit(false); + cIn.SkipWhites; + {Legalmente, aquí podría seguir otro operador, o función como ".bit0", y no solo + ":=". Esto es una implementación algo limitada. Lo que debería hacerse, si no se + encuentra ":=", sería devolver una referencia a variable, tal vez a un nuevo tipo + de variable, con dirección "indexada", pero obligaría a crear un atributo más a + las varaibles. El caso de un índice constante es más sencillo de procesar.} + if not CaptureTok(':=') then exit(false); + end else begin + if not CaptureTok(',') then exit(false); + end; + value := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + typItem := arrVar.typ.itmType; + if value.Typ <> typItem then begin //Solo debería ser byte o char + if (value.Typ = typByte) and (typItem = typWord) then begin + //Son tipos compatibles + value.SetAsConst(typWord); //Cmabiamos el tipo + end else begin + GenError('%s expression expected.', [typItem.name]); + exit(false); + end; + end; + exit(true); +end; +///////////////// Tipo Bit //////////////// +procedure TGenCodBas.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros Z.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if Op^.valBool then + _BSF(Z.offs, Z.bit) + else + _BCF(Z.offs, Z.bit); + end; + stVariab: begin + //La lógica en Z, dene ser normal, proque no hay forma de leerla. + //Como Z, está en todos los bancos, no hay mucho problema. + if Op^.Inverted then begin + //No se usa el registro W + kBCF(Z); + kBTFSS(Op^.rVar.adrBit); + kBSF(Z); + end else begin + //No se usa el registro W + kBCF(Z); + kBTFSC(Op^.rVar.adrBit); + kBSF(Z); + end; + end; + stExpres: begin //ya está en w + if Op^.Inverted then begin + //Aquí hay un problema, porque hay que corregir la lógica + _MOVLW($1 << Z.bit); + _ANDWF(Z.offs, toW); //invierte Z + end else begin + //No hay mada que hacer + end; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; + if modReturn then _RETURN; //codifica instrucción +end; +procedure TGenCodBas.bit_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.bit_SaveToStk; +{Guarda el valor bit, cargado actualmente en Z, a pila.} +var + stk: TPicRegisterBit; +begin + stk := GetStkRegisterBit; //pide memoria + if stk= nil then exit; //error + //Guarda Z + _BANKSEL(stk.bank); + _BCF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + _BTFSC(Z.offs, Z.bit); PutComm(TXT_SAVE_Z); + _BSF(stk.offs, stk.bit); PutComm(TXT_SAVE_Z); + stk.used := true; +end; +//////////////// Tipo Byte ///////////// +procedure TGenCodBas.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga operando a registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "res" + stConst : begin + if modReturn then _RETLW(Op^.valInt) + else _MOVLW(Op^.valInt); + end; + stVariab: begin + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //ya está en w + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kMOVF(varPtr.addr0, toW); + kMOVWF(FSR.addr); //direcciona + kMOVF(INDF.addr, toW); //deje en W + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión derefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona + _MOVF(0, toW); //deje en W + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.byte_DefineRegisters; +begin + //No es encesario, definir registros adicionales a W +end; +procedure TGenCodBas.byte_SaveToStk; +var + stk: TPicRegister; +begin + stk := GetStkRegisterByte; //pide memoria + //guarda W + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; +end; +procedure TGenCodBas.byte_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin + //Se aplica a una variable array. Lo Normal. + arrVar := Op^.rVar; //referencia a la variable. + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typByte); + tmpVar.addr0 := arrVar.addr0 + idx.valInt; //¿Y si es de otro banco? + SetResultVariab(tmpVar); + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _ADDLW(arrVar.addr0); //agrega OFFSET + _MOVWF(04); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de bytes, o Char, devuelve Byte o Char + LoadToRT(idx); //Lo deja en W + _ADDLW(arrVar.addr0); //agrega OFFSET + _MOVWF(04); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_SetItem(const OpPtr: pointer); +//Función que fija un valor indexado +var + WithBrack: Boolean; +var + Op: ^TOperand; + arrVar, rVar: TxpEleVar; + idx, value: TOperand; + idxTar: word; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + res.SetAsNull; //No devuelve nada + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + //Como el índice es constante, se puede acceder directamente + idxTar := arrVar.offs+idx.valInt; //índice destino + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pone a cero + _CLRF(idxTar); + end else begin + //Sabemos que hay una expresión byte + LoadToRT(value); //Carga resultado en W + _MOVWF(idxTar); //Mueve a arreglo + end; + end; + stVariab: begin + //El índice es una variable + //Tenemos la referencia la variable en idx.rvar + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El resultado está en W + //hay que mover value a arrVar[idx.rvar] + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva H + _MOVF(idx.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + end; + end; + stExpres: begin + //El índice es una expresión y está en W. + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión byte + if (value.Sto = stConst) and (value.valInt=0) then begin + //Caso especial, se pide asignar una constante cero + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _CLRF($00); //Pone a cero + end else if value.Sto = stConst then begin + //Es una constante cualquiera + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVLW(value.valInt); + _MOVWF($00); //Escribe valor + end else if value.Sto = stVariab then begin + //Es una variable + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + _MOVF(value.offs, toW); + _MOVWF($00); //Escribe valor + end else begin + //Es una expresión. El valor a asignar está en W, y el índice en la pila + typWord.DefineRegister; //Para usar H + _MOVWF(H.offs); //W->H salva valor a H + rVar := GetVarByteFromStk; //toma referencia de la pila + _MOVF(rVar.offs, toW); //índice + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF($04); //Direcciona + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe valor + FreeStkRegisterByte; //Para liberar + end; + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + //En este modo, no se requiere ")" + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.byte_ClearItems(const OpPtr: pointer); +{Limpia el contenido de todo el arreglo} +var + Op: ^TOperand; + xvar: TxpEleVar; + j1: Word; +begin + cIn.Next; //Toma identificador de campo + //Limpia el arreglo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY + res.SetAsConst(typByte); //Realmente no es importante devolver un valor + res.valInt {%H-}:= xvar.typ.nItems; //Devuelve tamaño + if xvar.typ.nItems = 0 then exit; //No hay nada que limpiar + if xvar.typ.nItems = 1 then begin //Es de un solo byte + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + end else if xvar.typ.nItems = 2 then begin //Es de 2 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + end else if xvar.typ.nItems = 3 then begin //Es de 3 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + end else if xvar.typ.nItems = 4 then begin //Es de 4 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + end else if xvar.typ.nItems = 5 then begin //Es de 5 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + end else if xvar.typ.nItems = 6 then begin //Es de 6 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + _CLRF(xvar.addr0+5); + end else if xvar.typ.nItems = 7 then begin //Es de 7 bytes + _BANKSEL(xvar.bank); + _CLRF(xvar.addr0); + _CLRF(xvar.addr0+1); + _CLRF(xvar.addr0+2); + _CLRF(xvar.addr0+3); + _CLRF(xvar.addr0+4); + _CLRF(xvar.addr0+5); + _CLRF(xvar.addr0+6); + end else begin + //Implementa lazo, usando W como índice + _MOVLW(xvar.offs); //dirección inicial + _MOVWF($04); //FSR + _MOVLW(256-xvar.typ.nItems); +j1:= _PC; + _CLRF($00); //Limpia [FSR] + _INCF($04, toF); //Siguiente + _ADDLW(1); //W = W + 1 + _BTFSS(_STATUS, _Z); + _GOTO(j1); + end; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit(const OpPtr: pointer; nbit: byte); +//Implementa la operación del campo .bit# +var + xvar, tmpVar: TxpEleVar; + msk: byte; + Op: ^TOperand; +begin + cIn.Next; //Toma el identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.bit' + IntToStr(nbit), typBit); //crea variable temporal + tmpVar.addr0 := xvar.addr0; + tmpVar.bit0 := nbit; + //Se devuelve una variable, byte + res.SetAsVariab(tmpVar); //actualiza la referencia (y actualiza el tipo). + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typBit); + msk := Op^.valInt and ($01 << nbit); + res.valBool := msk <> 0; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.byte_bit0(const OpPtr: pointer); +begin + byte_bit(OpPtr, 0); +end; +procedure TGenCodBas.byte_bit1(const OpPtr: pointer); +begin + byte_bit(OpPtr, 1); +end; +procedure TGenCodBas.byte_bit2(const OpPtr: pointer); +begin + byte_bit(OpPtr, 2); +end; +procedure TGenCodBas.byte_bit3(const OpPtr: pointer); +begin + byte_bit(OpPtr, 3); +end; +procedure TGenCodBas.byte_bit4(const OpPtr: pointer); +begin + byte_bit(OpPtr, 4); +end; +procedure TGenCodBas.byte_bit5(const OpPtr: pointer); +begin + byte_bit(OpPtr, 5); +end; +procedure TGenCodBas.byte_bit6(const OpPtr: pointer); +begin + byte_bit(OpPtr, 6); +end; +procedure TGenCodBas.byte_bit7(const OpPtr: pointer); +begin + byte_bit(OpPtr, 7); +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; + varPtr: TxpEleVar; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte alto + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte bajo + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr1, toW); + kMOVWF(H.addr); + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (H,w) + if modReturn then _RETURN; + end; + stVarRef: begin + //Se tiene una variable puntero dereferenciada: x^ + varPtr := Op^.rVar; //Guarda referencia a la variable puntero + //Mueve a W + kINCF(varPtr.addr0, toW); //varPtr.offs+1 -> W (byte alto) + _MOVWF(FSR.offs); //direcciona byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + stExpRef: begin + //Es una expresión desrefernciada (x+a)^. + {Se asume que el operando tiene su resultado en los RT. Si estuvieran en la pila + no se aplicaría.} + //Mueve a W + _MOVWF(FSR.offs); //direcciona byte bajo + _INCF(FSR.offs,toF); //apunta a byte alto + _MOVF(0, toW); //deje en W + _BANKSEL(H.bank); + _MOVWF(H.offs); //Guarda byte alto + _DECF(FSR.offs,toF); + _MOVF(0, toW); //deje en W byte bajo + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.word_DefineRegisters; +begin + //Aparte de W, solo se requiere H + AddCallerTo(H); +end; +procedure TGenCodBas.word_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if stk = nil then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.word_GetItem(const OpPtr: pointer); +//Función que devuelve el valor indexado +var + Op: ^TOperand; + arrVar, tmpVar: TxpEleVar; + idx: TOperand; + WithBrack: Boolean; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + typWord.DefineRegister; + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //ïndice constante + tmpVar := CreateTmpVar('', typWord); + tmpVar.addr0 := arrVar.addr0+idx.valInt*2; //¿Y si es de otro banco? + tmpVar.addr1 := arrVar.addr0+idx.valInt*2+1; //¿Y si es de otro banco? + SetResultVariab(tmpVar); +// SetResultExpres(arrVar.typ.refType, true); //Es array de word, devuelve word +// //Como el índice es constante, se puede acceder directamente +// add0 := arrVar.addr0.offs+idx.valInt*2; +// _MOVF(add0+1, toW); +// _MOVWF(H.offs); //byte alto +// _MOVF(add0, toW); //byte bajo + end; + stVariab: begin + SetResultExpres(arrVar.typ.itmType, true); //Es array de word, devuelve word + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //Multiplica Idx por 2 + _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + stExpres: begin + SetResultExpres(arrVar.typ.itmType, false); //Es array de word, devuelve word + _MOVWF(FSR.offs); //idx a FSR (usa como varaib. auxiliar) + _BCF(_STATUS, _C); + _RLF(FSR.offs, toW); //Multiplica Idx por 2 + _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _MOVWF(FSR.offs); //direcciona con FSR + _MOVF(0, toW); //lee indexado en W + _MOVWF(H.offs); //byte alto + _DECF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + if not CaptureTok(']') then exit; + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.word_SetItem(const OpPtr: pointer); +//Función que fija un valor indexado +var + WithBrack: Boolean; +var + Op: ^TOperand; + arrVar, rVar: TxpEleVar; + idx, value: TOperand; + idxTar: Int64; + aux: TPicRegister; +begin + if not GetIdxParArray(WithBrack, idx) then exit; + //Procesa + Op := OpPtr; + if Op^.Sto = stVariab then begin //Se aplica a una variable + arrVar := Op^.rVar; //referencia a la variable. + res.SetAsNull; //No devuelve nada + //Genera el código de acuerdo al índice + case idx.Sto of + stConst: begin //Indice constante + //Como el índice es constante, se puede acceder directamente + idxTar := arrVar.offs+idx.valInt*2; //índice destino + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if value.Sto = stConst then begin + //Es una constante + //Byte bajo + if value.LByte=0 then begin //Caso especial + _CLRF(idxTar); + end else begin + _MOVLW(value.LByte); + _MOVWF(idxTar); + end; + //Byte alto + if value.HByte=0 then begin //Caso especial + _CLRF(idxTar+1); + end else begin + _MOVLW(value.HByte); + _MOVWF(idxTar+1); + end; + end else begin + //El valor a asignar es variable o expresión + typWord.DefineRegister; //Para usar H + //Sabemos que hay una expresión word + LoadToRT(value); //Carga resultado en H,W + _MOVWF(idxTar); //Byte bajo + _MOVF(H.offs, toW); + _MOVWF(idxTar+1); //Byte alto + end; + end; + stVariab: begin + //El índice es una variable + //Tenemos la referencia la variable en idx.rvar + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + //Sabemos que hay una expresión word + if value.Sto = stConst then begin + //El valor a escribir, es una constante cualquiera + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + ////// Byte Bajo + if value.LByte = 0 then begin + _CLRF($00); + end else begin + _MOVLW(value.LByte); + _MOVWF($00); //Escribe + end; + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + if value.HByte = 0 then begin + _CLRF($00); + end else begin + _MOVLW(value.HByte); + _MOVWF($00); //Escribe + end; + end else if value.Sto = stVariab then begin + //El valor a escribir, es una variable + //Calcula dirfección de byte bajo + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + ////// Byte Bajo + _MOVF(value.Loffs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(value.Hoffs, toW); + _MOVWF($00); //Escribe + end else begin + //El valor a escribir, es una expresión y está en H,W + //hay que mover value a arrVar[idx.rvar] + aux := GetAuxRegisterByte; + typWord.DefineRegister; //Para usar H + _MOVWF(aux.offs); //W-> salva W (Valor.H) + //Calcula dirección de byte bajo + _BCF(_STATUS, _C); + _RLF(idx.offs, toW); //índice * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + ////// Byte Bajo + _MOVF(aux.offs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe + aux.used := false; + end; + end; + stExpres: begin + //El índice es una expresión y está en W. + if not GetValueToAssign(WithBrack, arrVar, value) then exit; + if value.Sto = stConst then begin + //El valor a asignar, es una constante + _MOVWF(FSR.offs); //Salva W. + _BCF(_STATUS, _C); + _RLF(FSR.offs, toW); //idx * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona a byte bajo + //Byte bajo + if value.LByte = 0 then begin + _CLRF($00); //Pone a cero + end else begin + _MOVLW(value.LByte); + _MOVWF($00); + end; + //Byte alto + _INCF(FSR.offs, toF); + if value.HByte = 0 then begin + _CLRF($00); //Pone a cero + end else begin + _MOVLW(value.HByte); + _MOVWF($00); + end; + end else if value.Sto = stVariab then begin + _MOVWF(FSR.offs); //Salva W. + _BCF(_STATUS, _C); + _RLF(FSR.offs, toW); //idx * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona a byte bajo + //Byte bajo + _MOVF(value.Loffs, toW); + _MOVWF($00); + //Byte alto + _INCF(FSR.offs, toF); + _MOVF(value.Hoffs, toW); + _MOVWF($00); + end else begin + //El valor a asignar está en H,W, y el índice (byte) en la pila + typWord.DefineRegister; //Para usar H + aux := GetAuxRegisterByte; + _MOVWF(aux.offs); //W->aux salva W + rVar := GetVarByteFromStk; //toma referencia de la pila + //Calcula dirección de byte bajo + _BCF(_STATUS, _C); + _RLF(rVar.offs, toW); //índice * 2 + _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVWF(FSR.offs); //Direcciona + ////// Byte Bajo + _MOVF(aux.offs, toW); + _MOVWF($00); //Escribe + ////// Byte Alto + _INCF(FSR.offs, toF); //Direcciona a byte ALTO + _MOVF(H.offs, toW); + _MOVWF($00); //Escribe + aux.used := false; + end; + end; + end; + end else begin + GenError('Syntax error.'); + end; + if WithBrack then begin + //En este modo, no se requiere ")" + end else begin + if not CaptureTok(')') then exit; + end; +end; +procedure TGenCodBas.word_ClearItems(const OpPtr: pointer); +begin + +end; +procedure TGenCodBas.word_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.L', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.word_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un word.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.H', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +//////////////// Tipo DWord ///////////// +procedure TGenCodBas.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); +{Carga el valor de una expresión a los registros de trabajo.} +var + Op: ^TOperand; +begin + Op := OpPtr; + case Op^.Sto of //el parámetro debe estar en "Op^" + stConst : begin + //byte U + if Op^.UByte = 0 then begin + _BANKSEL(U.bank); + _CLRF(U.offs); + end else begin + _MOVLW(Op^.UByte); + _BANKSEL(U.bank); + _MOVWF(U.offs); + end; + //byte E + if Op^.EByte = 0 then begin + _BANKSEL(E.bank); + _CLRF(E.offs); + end else begin + _MOVLW(Op^.EByte); + _BANKSEL(E.bank); + _MOVWF(E.offs); + end; + //byte H + if Op^.HByte = 0 then begin + _BANKSEL(H.bank); + _CLRF(H.offs); + end else begin + _MOVLW(Op^.HByte); + _BANKSEL(H.bank); + _MOVWF(H.offs); + end; + //byte 0 + if modReturn then _RETLW(Op^.LByte) + else _MOVLW(Op^.LByte); + end; + stVariab: begin + kMOVF(Op^.rVar.addr3, toW); + kMOVWF(U.addr); + + kMOVF(Op^.rVar.addr2, toW); + kMOVWF(E.addr); + + kMOVF(Op^.rVar.addr1, toW); + kMOVWF(H.addr); + + kMOVF(Op^.rVar.addr0, toW); + if modReturn then _RETURN; + end; + stExpres: begin //se asume que ya está en (U,E,H,w) + if modReturn then _RETURN; + end; + else + //Almacenamiento no implementado + GenError(MSG_NOT_IMPLEM); + end; +end; +procedure TGenCodBas.dword_DefineRegisters; +begin + //Aparte de W, se requieren H, E y U + AddCallerTo(H); + AddCallerTo(E); + AddCallerTo(U); +end; +procedure TGenCodBas.dword_SaveToStk; +var + stk: TPicRegister; +begin + //guarda W + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(stk.bank); + _MOVWF(stk.offs);PutComm(TXT_SAVE_W); + stk.used := true; + //guarda H + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(H.bank); + _MOVF(H.offs, toW);PutComm(TXT_SAVE_H); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda E + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(E.bank); + _MOVF(E.offs, toW);PutComm(';save E'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca + //guarda U + stk := GetStkRegisterByte; //pide memoria + if HayError then exit; + _BANKSEL(U.bank); + _MOVF(U.offs, toW);PutComm(';save U'); + _BANKSEL(stk.bank); + _MOVWF(stk.offs); + stk.used := true; //marca +end; +procedure TGenCodBas.dword_Low(const OpPtr: pointer); +{Acceso al byte de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Low', typByte); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante byte + res.SetAsConst(typByte); + res.valInt := Op^.ValInt and $ff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_High(const OpPtr: pointer); +{Acceso al byte de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.High', typByte); + tmpVar.addr0 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff00)>>8; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Extra(const OpPtr: pointer); +{Acceso al byte 2 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Extra', typByte); + tmpVar.addr0 := xvar.addr2; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff0000)>>16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_Ultra(const OpPtr: pointer); +{Acceso al byte 3 de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.Ultra', typByte); + tmpVar.addr0 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typByte); + res.valInt := (Op^.ValInt and $ff000000)>>24; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_LowWord(const OpPtr: pointer); +{Acceso al word de menor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.LowW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr0; //byte bajo + tmpVar.addr1 := xvar.addr1; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := Op^.ValInt and $ffff; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.dword_HighWord(const OpPtr: pointer); +{Acceso al word de mayor peso de un Dword.} +var + xvar, tmpVar: TxpEleVar; + Op: ^TOperand; +begin + cIn.Next; //Toma identificador de campo + Op := OpPtr; + case Op^.Sto of + stVariab: begin + xvar := Op^.rVar; + //Se devuelve una variable, byte + //Crea una variable temporal que representará al campo + tmpVar := CreateTmpVar(xvar.name+'.HighW', typWord); //crea variable temporal + tmpVar.addr0 := xvar.addr2; //byte bajo + tmpVar.addr1 := xvar.addr3; //byte alto + res.SetAsVariab(tmpVar); //actualiza la referencia + end; + stConst: begin + //Se devuelve una constante bit + res.SetAsConst(typWord); + res.valInt := (Op^.ValInt and $ffff0000) >> 16; + end; + else + GenError('Syntax error.'); + end; +end; +procedure TGenCodBas.GenCodPicReqStopCodeGen; +{Required Stop the Code generation} +begin + posFlash := pic.iFlash; //Probably not the best way. +end; +procedure TGenCodBas.GenCodPicReqStartCodeGen; +{Required Start the Code generation} +begin + pic.iFlash := posFlash; //Probably not the best way. +end; +//Inicialización +procedure TGenCodBas.StartRegs; +{Inicia los registros de trabajo en la lista.} +begin + listRegAux.Clear; + listRegStk.Clear; //limpia la pila + stackTop := 0; + listRegAuxBit.Clear; + listRegStkBit.Clear; //limpia la pila + stackTopBit := 0; +end; + +function TGenCodBas.CompilerName: string; +begin + Result := 'PIC17 Compiler' +end; +function TGenCodBas.RAMmax: integer; +begin + Result := high(pic.ram); +end; +function TGenCodBas.DeviceError: string; +begin + exit (pic.MsjError); +end; +procedure TGenCodBas.Cod_JumpIfTrue; +{Codifica una instrucción de salto, si es que el resultado de la última expresión es +verdadera. Se debe asegurar que la expresión es de tipo booleana y de almacenamiento +stVariab o stExpres.} +begin + if res.Sto = stVariab then begin + //Las variables booleanas, pueden estar invertidas + if res.Inverted then begin + _BANKSEL(res.bank); + _BTFSC(res.offs, res.bit); //verifica condición + end else begin + _BANKSEL(res.bank); + _BTFSS(res.offs, res.bit); //verifica condición + end; + end else if res.Sto = stExpres then begin + //Los resultados de expresión, pueden optimizarse + if InvertedFromC then begin + //El resultado de la expresión, está en Z, pero a partir una copia negada de C + //Se optimiza, eliminando las instrucciones de copia de C a Z + pic.iFlash := pic.iFlash-2; + //La lógica se invierte + if res.Inverted then begin //_Lógica invertida + _BTFSS(C.offs, C.bit); //verifica condición + end else begin + _BTFSC(C.offs, C.bit); //verifica condición + end; + end else begin + //El resultado de la expresión, está en Z. Caso normal + if res.Inverted then begin //Lógica invertida + _BTFSC(Z.offs, Z.bit); //verifica condición + end else begin + _BTFSS(Z.offs, Z.bit); //verifica condición + end; + end; + end; +end; + +procedure TGenCodBas.ClearDeviceError; +begin + pic.MsjError := ''; +end; + +function TGenCodBas.CurrFlash(): integer; +begin + exit(pic.iFlash); +end; +procedure TGenCodBas.ResetFlashAndRAM; +{Reinicia el dispositivo, para empezar a escribir en la posición $000 de la FLASH, y +en la posición inicial de la RAM.} +begin + pic.iFlash := 0; //Ubica puntero al inicio. + pic.ClearMemRAM; //Pone las celdas como no usadas y elimina nombres. + CurrBank := 0; + StartRegs; //Limpia registros de trabajo, auxiliares, y de pila. +end; + +function TGenCodBas.ReturnAttribIn(typ: TxpEleType; const Op: TOperand; + offs: integer): boolean; +{Return a temp variable at the specified address.} +var + tmpVar: TxpEleVar; +begin + if Op.Sto = stVariab then begin + tmpVar := CreateTmpVar('?', typ); //Create temporal variable + tmpVar.addr0 := Op.addr + offs; //Set Address + res.SetAsVariab(tmpVar); + exit(true); + end else begin + GenError('Cannot access to field of this expression.'); + exit(false); + end; +end; +procedure TGenCodBas.SetSharedUnused; +begin + pic.SetSharedUnused; +end; +procedure TGenCodBas.SetSharedUsed; +begin + pic.SetSharedUsed; +end; +procedure TGenCodBas.CompileProcBody(fun: TxpEleFun); +{Compila el cuerpo de un procedimiento} +begin + StartCodeSub(fun); //Inicia codificación de subrutina + CompileInstruction; + if HayError then exit; + if fun.IsInterrupt then begin + //Las interrupciones terminan así + _RETFIE + end else begin + //Para los procedimeintos, podemos terminar siemrpe con un i_RETURN u optimizar, + if OptRetProc then begin + //Verifica es que ya se ha incluido exit(). + if fun.ObligatoryExit<>nil then begin + //Ya tiene un exit() obligatorio y en el final (al menos eso se espera) + //No es necesario incluir el i_RETURN(). + end else begin + //No hay un exit(), seguro + _RETURN(); //instrucción de salida + end; + end else begin + _RETURN(); //instrucción de salida + end; + end; + EndCodeSub; //termina codificación + {Fija banco al terminar de codificar. Si no se modificó el banco en la compilación + (como en un procedimiento vacío) CurrBank, contiene el banco que se fijó antes de + llamar a CompileProcBody(), que es: + Siemrpe 0 -> en la primera pasada. + Un valor calculado -> en la segund pasada.} + fun.finBnk := CurrBank; //Banco al terminar de codificar + //Calcula tamaño + fun.srcSize := pic.iFlash - fun.adrr; +end; +procedure TGenCodBas.StartCodeSub(fun: TxpEleFun); +{debe ser llamado para iniciar la codificación de una subrutina} +begin +// iFlashTmp := pic.iFlash; //guarda puntero +// pic.iFlash := curBloSub; //empieza a codificar aquí +end; +procedure TGenCodBas.EndCodeSub; +{debe ser llamado al terminar la codificaión de una subrutina} +begin +// curBloSub := pic.iFlash; //indica siguiente posición libre +// pic.iFlash := iFlashTmp; //retorna puntero +end; +procedure TGenCodBas.FunctParam(fun: TxpEleFunBase); +{Rutina genérica, que se usa antes de leer los parámetros de una función.} +begin + {Haya o no, parámetros se debe proceder como en cualquier expresión, asumiendo que + vamos a devolver una expresión.} + SetResultExpres(fun.typ); //actualiza "RTstate" +end; +procedure TGenCodBas.FunctCall(fun: TxpEleFunBase; out AddrUndef: boolean); +{Rutina genérica para llamar a una función definida por el usuario.} +var + xfun: TxpEleFun; + fundec: TxpEleFunDec; +begin + AddrUndef := false; + if fun.idClass = eltFunc then begin + //Is a implemented function + xfun := TxpEleFun(fun); + //By now is not implemented the paging + _CALL(xfun.adrr); //codifica el salto + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := xfun.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Must be a declaration + fundec := TxpEleFunDec(fun); + if fundec.implem <> nil then begin + //Is implemented + _CALL(fundec.implem.adrr); + if OptBnkAftPro then begin //Bank change optimization + //Se debe optimizar, fijando el banco que deja la función + CurrBank := fundec.implem.ExitBank; + end else begin + //Se debe incluir siempre instrucciones de cambio de banco + _BANKRESET; + end; + end else begin + //Not implemented YET + _CALL($1234); //Needs to be completed later. + AddrUndef := true; + end; + end; +end; +procedure TGenCodBas.CompileIF; +{Compila una extructura IF} + procedure SetFinalBank(bnk1, bnk2: byte); + {Fija el valor de CurrBank, de acuerdo a dos bancos finales.} + begin + if OptBnkAftIF then begin + //Optimizar banking + if bnk1 = bnk2 then begin + //Es el mismo banco (aunque sea 255). Lo deja allí. + end else begin + CurrBank := 255; //Indefinido + end; + end else begin + //Sin optimización + _BANKRESET; + end; + end; +var + jFALSE, jEND_TRUE: integer; + bnkExp, bnkTHEN, bnkELSE: Byte; +begin + if not GetExpressionBool then exit; + bnkExp := CurrBank; //Guarda el banco inicial + if not CaptureStr('then') then exit; //toma "then" + //Aquí debe estar el cuerpo del "if" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Es verdadero, siempre se ejecuta + if not CompileNoConditionBody(true) then exit; + //Compila los ELSIF que pudieran haber + while cIn.tokL = 'elsif' do begin + cIn.Next; //toma "elsif" + if not GetExpressionBool then exit; + if not CaptureStr('then') then exit; //toma "then" + //Compila el cuerpo pero sin código + if not CompileNoConditionBody(false) then exit; + end; + //Compila el ELSE final, si existe. + if cIn.tokL = 'else' then begin + //Hay bloque ELSE, pero no se ejecutará nunca + cIn.Next; //toma "else" + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end else begin + VerifyEND; + end; + end else begin + //Es falso, nunca se ejecuta + if not CompileNoConditionBody(false) then exit; + if cIn.tokL = 'else' then begin + //hay bloque ELSE, que sí se ejecutará + cIn.Next; //toma "else" + if not CompileNoConditionBody(true) then exit; + VerifyEND; + end else if cIn.tokL = 'elsif' then begin + cIn.Next; + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + //No es necesario verificar el END final. + end else begin + VerifyEND; + end; + end; + end; + stVariab, stExpres:begin + Cod_JumpIfTrue; + _GOTO_PEND(jFALSE); //salto pendiente + //Compila la parte THEN + if not CompileConditionalBody(bnkTHEN) then exit; + //Verifica si sigue el ELSE + if cIn.tokL = 'else' then begin + //Es: IF ... THEN ... ELSE ... END + cIn.Next; //toma "else" + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CurrBank := bnkExp; //Fija el banco inicial antes de compilar + if not CompileConditionalBody(bnkELSE) then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, bnkELSE); //Manejo de bancos + VerifyEND; //puede salir con error + end else if cIn.tokL = 'elsif' then begin + //Es: IF ... THEN ... ELSIF ... + cIn.Next; + _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE + _LABEL(jFALSE); //termina de codificar el salto + CompileIF; //más fácil es la forma recursiva + if HayError then exit; + _LABEL(jEND_TRUE); //termina de codificar el salto + SetFinalBank(bnkTHEN, CurrBank); //Manejo de bancos + //No es necesario verificar el END final. + end else begin + //Es: IF ... THEN ... END. (Puede ser recursivo) + _LABEL(jFALSE); //termina de codificar el salto + SetFinalBank(bnkExp, bnkTHEN); //Manejo de bancos + VerifyEND; //puede salir con error + end; + end; + end; +end; +procedure TGenCodBas.CompileREPEAT; +{Compila uan extructura WHILE} +var + l1: Word; +begin + l1 := _PC; //guarda dirección de inicio + CompileCurBlock; + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('until') then exit; //toma "until" + if not GetExpressionBool then exit; + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //lazo nulo + end else begin + //lazo infinito + _GOTO(l1); + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO(l1); + //sale cuando la condición es verdadera + end; + end; +end; +procedure TGenCodBas.CompileWHILE; +{Compila una extructura WHILE} +var + l1: Word; + dg: Integer; + bnkEND, bnkExp1, bnkExp2: byte; +begin + l1 := _PC; //guarda dirección de inicio + bnkExp1 := CurrBank; //Guarda el banco antes de la expresión + if not GetExpressionBool then exit; //Condición + bnkExp2 := CurrBank; //Guarda el banco antes de la expresión + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "while" + case res.Sto of + stConst: begin //la condición es fija + if res.valBool then begin + //Lazo infinito + if not CompileNoConditionBody(true) then exit; + if not VerifyEND then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); + end else begin + //Lazo nulo. Compila sin generar código. + if not CompileNoConditionBody(false) then exit; + if not VerifyEND then exit; + end; + end; + stVariab, stExpres: begin + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkEND) then exit; + _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen + _GOTO(l1); //salta a evaluar la condición + if not VerifyEND then exit; + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end; + end; + CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE +end; +procedure TGenCodBas.CompileFOR; +{Compila uan extructura WHILE} +var + l1: Word; + dg: Integer; + Op1, Op2: TOperand; + opr1: TxpOperator; + bnkFOR: byte; +begin + GetOperand(Op1, true); + if Op1.Sto <> stVariab then begin + GenError(ER_VARIAB_EXPEC); + exit; + end; + if HayError then exit; + if (Op1.Typ<>typByte) and (Op1.Typ<>typWord) then begin + GenError(ER_ONL_BYT_WORD); + exit; + end; + cIn.SkipWhites; + opr1 := GetOperator(Op1); //debe ser ":=" + if opr1 = nil then begin //no sigue operador + GenError(ER_ASIG_EXPECT); + exit; //termina ejecucion + end; + if opr1.txt <> ':=' then begin + GenError(ER_ASIG_EXPECT); + exit; + end; + Op2 := GetExpression(0); + if HayError then exit; + //Ya se tiene la asignación inicial + Oper(Op1, opr1, res); //codifica asignación + if HayError then exit; + if not CaptureStr('to') then exit; + //Toma expresión Final + res := GetExpression(0); + if HayError then exit; + cIn.SkipWhites; + if not CaptureStr('do') then exit; //toma "do" + //Aquí debe estar el cuerpo del "for" + if (res.Sto = stConst) or (res.Sto = stVariab) then begin + //Es un for con valor final de tipo constante + //Se podría optimizar, si el valor inicial es también constante + l1 := _PC; //guarda dirección de inicio + //Codifica rutina de comparación, para salir + opr1 := Op1.Typ.FindBinaryOperator('<='); //Busca operador de comparación + if opr1 = nullOper then begin + GenError('Internal: No operator <= defined for %s.', [Op1.Typ.name]); + exit; + end; + Op2 := res; //Copia porque la operación Oper() modificará res + Oper(Op1, opr1, Op2); //"res" mantiene la constante o variable + Cod_JumpIfTrue; + _GOTO_PEND(dg); //salto pendiente + if not CompileConditionalBody(bnkFOR) then exit; + if not VerifyEND then exit; + //Incrementa variable cursor + if Op1.Typ = typByte then begin + _INCF(Op1.offs, toF); + end else if Op1.Typ = typWord then begin + _BANKSEL(oP1.bank); + _INCF(Op1.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(Op1.Hoffs, toF); + end; + _GOTO(l1); //repite el lazo + //ya se tiene el destino del salto + _LABEL(dg); //termina de codificar el salto + end else begin + GenError('Last value must be Constant or Variable'); + exit; + end; +end; +constructor TGenCodBas.Create; +begin + inherited Create; + ID := 17; //Identifica al compilador PIC17 + devicesPath := patDevices17; + OnReqStartCodeGen:=@GenCodPicReqStartCodeGen; + OnReqStopCodeGen:=@GenCodPicReqStopCodeGen; + pic := TPIC17.Create; + picCore := pic; //Referencia picCore + + //Crea variables de trabajo + varStkBit := TxpEleVar.Create; + varStkBit.typ := typBit; + varStkByte := TxpEleVar.Create; + varStkByte.typ := typByte; + varStkWord := TxpEleVar.Create; + varStkWord.typ := typWord; + varStkDWord := TxpEleVar.Create; + varStkDWord.typ := typDWord; + //Crea lista de variables temporales + varFields := TxpEleVars.Create(true); + //Inicializa contenedores + listRegAux := TPicRegister_list.Create(true); + listRegStk := TPicRegister_list.Create(true); + listRegAuxBit:= TPicRegisterBit_list.Create(true); + listRegStkBit:= TPicRegisterBit_list.Create(true); + stackTop := 0; //Apunta a la siguiente posición libre + stackTopBit := 0; //Apunta a la siguiente posición libre + {Crea registro de trabajo W. El registro W, es el registro interno del PIC, y no + necesita un mapeo en RAM. Solo se le crea aquí, para poder usar su propiedad "used"} + W := TPicRegister.Create; + W.assigned := false; //se le marca así, para que no se intente usar + {Crea registro de trabajo Z. El registro Z, es el registro interno del PIC, y está + siempre asignado en RAM. } + Z := TPicRegisterBit.Create; + Z.addr := _STATUS; + Z.bit := _Z; + Z.assigned := true; //ya está asignado desde el principio + {Crea registro de trabajo C. El registro C, es el registro interno del PIC, y está + siempre asignado en RAM. } + C := TPicRegisterBit.Create; + C.addr := _STATUS; + C.bit := _C; + C.assigned := true; //ya está asignado desde el principio + //Crea registro interno INDF + INDF := TPicRegister.Create; + INDF.addr := $00; + INDF.assigned := true; //ya está asignado desde el principio + {Crea registro auxiliar FSR. El registro FSR, es un registro interno del PIC, y está + siempre asignado en RAM. } + FSR := TPicRegister.Create; + FSR.addr := $04; + FSR.assigned := true; //ya está asignado desde el principio + + callCurrFlash := @CurrFlash; + callResetFlashAndRAM:=@ResetFlashAndRAM; + callCreateVarInRAM := @CreateVarInRAM; + callSetSharedUnused := @SetSharedUnused; + callSetSharedUsed := @SetSharedUsed; + callReturnAttribIn := @ReturnAttribIn; + callDeviceError := @DeviceError; + callClearDeviceError := @ClearDeviceError; + callCompileProcBody := @CompileProcBody; + callFunctParam := @FunctParam; + callFunctCall := @FunctCall; + callStartCodeSub := @StartCodeSub; + callEndCodeSub := @EndCodeSub; + + callCompileIF := @CompileIF;; + callCompileWHILE := @CompileWHILE; + callCompileREPEAT := @CompileREPEAT; + callCompileFOR := @CompileFOR; +end; +destructor TGenCodBas.Destroy; +begin + INDF.Destroy; + FSR.Destroy; + C.Destroy; + Z.Destroy; + W.Destroy; + listRegAuxBit.Destroy; + listRegStkBit.Destroy; + listRegStk.Destroy; + listRegAux.Destroy; + varFields.Destroy; + varStkBit.Destroy; + varStkByte.Destroy; + varStkWord.Destroy; + varStkDWord.Destroy; + pic.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/GenCodPic.pas b/Source/GenCodBas_PICBase.pas similarity index 78% rename from Source/GenCodPic.pas rename to Source/GenCodBas_PICBase.pas index 00e40243..3c8ff00e 100644 --- a/Source/GenCodPic.pas +++ b/Source/GenCodBas_PICBase.pas @@ -1,10 +1,10 @@ {Unidad que agrega campos necesarios a la clase TCompilerBase, para la generación de código con el PIC16F.} -unit GenCodPic; +unit GenCodBas_PICBase; {$mode objfpc}{$H+} interface uses - Classes, SysUtils, XPresParserPIC, XpresElementsPIC, Pic16Utils, XpresTypesPIC, + Classes, SysUtils, XpresElementsPIC, XpresTypesPIC, PicCore, PicBaseUtils, Parser, MisUtils, LCLType, LCLProc; const STACK_SIZE = 8; //tamaño de pila para subrutinas en el PIC @@ -15,14 +15,19 @@ interface type { TGenCodPic } - TGenCodPic = class(TCompilerBase) + + { TGenCod1PICBase } + + TGenCodBas_PICBase = class(TCompilerBase) private linRep : string; //línea para generar de reporte - function GetIdxParArray(out WithBrack: boolean; out par: TOperand - ): boolean; + posFlash: Integer; + procedure GenCodPicReqStartCodeGen; + procedure GenCodPicReqStopCodeGen; + function GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; function GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; - procedure ProcByteUsed(offs, bnk: byte; regPtr: TPIC16RamCellPtr); + procedure ProcByteUsed(offs, bnk: byte; regPtr: TPICRamCellPtr); procedure word_ClearItems(const OpPtr: pointer); procedure word_GetItem(const OpPtr: pointer); procedure word_SetItem(const OpPtr: pointer); @@ -137,9 +142,8 @@ TGenCodPic = class(TCompilerBase) procedure ChangeResultCharToByte; function ChangePointerToExpres(var ope: TOperand): boolean; protected //Instrucciones que no manejan el cambio de banco - lastOpCode: TPIC16Inst; - procedure CodAsmFD(const inst: TPIC16Inst; const f: byte; d: TPIC16destin); - procedure CodAsmK(const inst: TPIC16Inst; const k: byte); + procedure CodAsmFD(const inst: TPICBaseInst; const f: byte; d: TPICBaseDestin); + procedure CodAsmK(const inst: TPICBaseInst; const k: byte); procedure _BANKSEL(targetBank: byte); procedure GenCodBank(targetAdrr: word); procedure _BANKRESET; @@ -147,10 +151,9 @@ TGenCodPic = class(TCompilerBase) function _CLOCK: integer; procedure _LABEL(igot: integer); //Instrucciones simples - procedure _ADDLW(const k: word); - procedure _ADDWF(const f: byte; d: TPIC16destin); + procedure _ADDWF(const f: byte; d: TPICBaseDestin); procedure _ANDLW(const k: word); - procedure _ANDWF(const f: byte; d: TPIC16destin); + procedure _ANDWF(const f: byte; d: TPICBaseDestin); procedure _BCF(const f, b: byte); procedure _BSF(const f, b: byte); procedure _BTFSC(const f, b: byte); @@ -159,35 +162,37 @@ TGenCodPic = class(TCompilerBase) procedure _CLRF(const f: byte); procedure _CLRW; procedure _CLRWDT; - procedure _COMF(const f: byte; d: TPIC16destin); - procedure _DECF(const f: byte; d: TPIC16destin); - procedure _DECFSZ(const f: byte; d: TPIC16destin); + procedure _COMF(const f: byte; d: TPICBaseDestin); + procedure _DECF(const f: byte; d: TPICBaseDestin); + procedure _DECFSZ(const f: byte; d: TPICBaseDestin); procedure _GOTO(const a: word); procedure _GOTO_PEND(out igot: integer); - procedure _INCF(const f: byte; d: TPIC16destin); - procedure _INCFSZ(const f: byte; d: TPIC16destin); + procedure _INCF(const f: byte; d: TPICBaseDestin); + procedure _INCFSZ(const f: byte; d: TPICBaseDestin); procedure _IORLW(const k: word); - procedure _IORWF(const f: byte; d: TPIC16destin); - procedure _MOVF(const f: byte; d: TPIC16destin); + procedure _IORWF(const f: byte; d: TPICBaseDestin); + procedure _MOVF(const f: byte; d: TPICBaseDestin); procedure _MOVLW(const k: word); procedure _MOVWF(const f: byte); procedure _NOP; procedure _RETFIE; procedure _RETLW(const k: word); procedure _RETURN; - procedure _RLF(const f: byte; d: TPIC16destin); - procedure _RRF(const f: byte; d: TPIC16destin); + procedure _RLF(const f: byte; d: TPICBaseDestin); + procedure _RRF(const f: byte; d: TPICBaseDestin); + procedure _SLEEP; - procedure _SUBLW(const k: word); - procedure _SUBWF(const f: byte; d: TPIC16destin); - procedure _SWAPF(const f: byte; d: TPIC16destin); + procedure _SUBWF(const f: byte; d: TPICBaseDestin); + procedure _SWAPF(const f: byte; d: TPICBaseDestin); procedure _XORLW(const k: word); - procedure _XORWF(const f: byte; d: TPIC16destin); + procedure _XORWF(const f: byte; d: TPICBaseDestin); + //macros + procedure _IFZERO; + procedure _IFNZERO; protected //Instrucciones que manejan el cambio de banco - procedure kADDLW(const k: word); - procedure kADDWF(const f: word; d: TPIC16destin); + procedure kADDWF(const f: word; d: TPICBaseDestin); procedure kANDLW(const k: word); - procedure kANDWF(const f: TPicRegister; d: TPIC16destin); + procedure kANDWF(const f: TPicRegister; d: TPICBaseDestin); procedure kBCF(const f: TPicRegisterBit); procedure kBSF(const f: TPicRegisterBit); procedure kBTFSC(const f: TPicRegisterBit); @@ -196,30 +201,29 @@ TGenCodPic = class(TCompilerBase) procedure kCLRF(const f: TPicRegister); procedure kCLRW; procedure kCLRWDT; - procedure kCOMF(const f: word; d: TPIC16destin); - procedure kDECF(const f: word; d: TPIC16destin); - procedure kDECFSZ(const f: word; d: TPIC16destin); + procedure kCOMF(const f: word; d: TPICBaseDestin); + procedure kDECF(const f: word; d: TPICBaseDestin); + procedure kDECFSZ(const f: word; d: TPICBaseDestin); procedure kGOTO(const a: word); procedure kGOTO_PEND(out igot: integer); - procedure kINCF(const f: TPicRegister; d: TPIC16destin); - procedure kINCFSZ(const f: word; d: TPIC16destin); + procedure kINCF(const f: TPicRegister; d: TPICBaseDestin); + procedure kINCFSZ(const f: word; d: TPICBaseDestin); procedure kIORLW(const k: word); - procedure kIORWF(const f: word; d: TPIC16destin); - procedure kMOVF(const f: TPicRegister; d: TPIC16destin); + procedure kIORWF(const f: word; d: TPICBaseDestin); + procedure kMOVF(const f: TPicRegister; d: TPICBaseDestin); procedure kMOVLW(const k: word); procedure kMOVWF(const f: TPicRegister); procedure kNOP; procedure kRETFIE; procedure kRETLW(const k: word); procedure kRETURN; - procedure kRLF(const f: TPicRegister; d: TPIC16destin); - procedure kRRF(const f: TPicRegister; d: TPIC16destin); + procedure kRLF(const f: TPicRegister; d: TPICBaseDestin); + procedure kRRF(const f: TPicRegister; d: TPICBaseDestin); procedure kSLEEP; - procedure kSUBLW(const k: word); - procedure kSUBWF(const f: word; d: TPIC16destin); - procedure kSWAPF(const f: TPicRegister; d: TPIC16destin); + procedure kSUBWF(const f: word; d: TPICBaseDestin); + procedure kSWAPF(const f: TPicRegister; d: TPICBaseDestin); procedure kXORLW(const k: word); - procedure kXORWF(const f: TPicRegister; d: TPIC16destin); + procedure kXORWF(const f: TPicRegister; d: TPICBaseDestin); public //Opciones de compilación incDetComm : boolean; //Incluir Comentarios detallados. SetProIniBnk: boolean; //Incluir instrucciones de cambio de banco al inicio de procedimientos @@ -271,6 +275,7 @@ TGenCodPic = class(TCompilerBase) procedure dword_LowWord(const OpPtr: pointer); procedure dword_Ultra(const OpPtr: pointer); public //Inicialización + pic : TPICBase; //Objeto PIC de la serie 16. function PicName: string; function PicNameShort: string; procedure StartRegs; @@ -312,40 +317,41 @@ procedure SetLanguage(lang: string); end; end; { TGenCodPic } -procedure TGenCodPic.ProcByteUsed(offs, bnk: byte; regPtr: TPIC16RamCellPtr); +procedure TGenCodBas_PICBase.ProcByteUsed(offs, bnk: byte; + regPtr: TPICRamCellPtr); begin linRep := linRep + regPtr^.name + ' DB ' + 'bnk'+ IntToStr(bnk) + ':$' + IntToHex(offs, 3) + LineEnding; end; -procedure TGenCodPic.PutLabel(lbl: string); +procedure TGenCodBas_PICBase.PutLabel(lbl: string); {Agrega uan etiqueta antes de la instrucción. Se recomienda incluir solo el nombre de la etiqueta, sin ":", ni comentarios, porque este campo se usará para desensamblar.} begin pic.addTopLabel(lbl); //agrega línea al código ensmblador end; -procedure TGenCodPic.PutTopComm(cmt: string; replace: boolean = true); +procedure TGenCodBas_PICBase.PutTopComm(cmt: string; replace: boolean = true); //Agrega comentario al inicio de la posición de memoria begin pic.addTopComm(cmt, replace); //agrega línea al código ensmblador end; -procedure TGenCodPic.PutComm(cmt: string); +procedure TGenCodBas_PICBase.PutComm(cmt: string); //Agrega comentario lateral al código. Se llama después de poner la instrucción. begin pic.addSideComm(cmt, true); //agrega línea al código ensmblador end; -procedure TGenCodPic.PutFwdComm(cmt: string); +procedure TGenCodBas_PICBase.PutFwdComm(cmt: string); //Agrega comentario lateral al código. Se llama antes de poner la instrucción. begin pic.addSideComm(cmt, false); //agrega línea al código ensmblador end; -function TGenCodPic.ReportRAMusage: string; +function TGenCodBas_PICBase.ReportRAMusage: string; {Genera un reporte de uso de la memoria RAM} begin linRep := ''; pic.ExploreUsed(@ProcByteUsed); Result := linRep; end; -function TGenCodPic.ValidateByteRange(n: integer): boolean; +function TGenCodBas_PICBase.ValidateByteRange(n: integer): boolean; //Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. begin if (n>=0) and (n<256) then @@ -355,7 +361,7 @@ function TGenCodPic.ValidateByteRange(n: integer): boolean; exit(false); end; end; -function TGenCodPic.ValidateWordRange(n: integer): boolean; +function TGenCodBas_PICBase.ValidateWordRange(n: integer): boolean; //Verifica que un valor entero, se pueda convertir a byte. Si no, devuelve FALSE. begin if (n>=0) and (n<65536) then @@ -365,7 +371,7 @@ function TGenCodPic.ValidateWordRange(n: integer): boolean; exit(false); end; end; -function TGenCodPic.ValidateDWordRange(n: Int64): boolean; +function TGenCodBas_PICBase.ValidateDWordRange(n: Int64): boolean; begin if (n>=0) and (n<$100000000) then exit(true) @@ -374,7 +380,7 @@ function TGenCodPic.ValidateDWordRange(n: Int64): boolean; exit(false); end; end; -procedure TGenCodPic.ExchangeP1_P2; +procedure TGenCodBas_PICBase.ExchangeP1_P2; {Intercambai el orden de los operandos.} var tmp : ^TOperand; @@ -384,7 +390,7 @@ procedure TGenCodPic.ExchangeP1_P2; p1 := p2; p2 := tmp; end; -procedure TGenCodPic.GenerateROBdetComment; +procedure TGenCodBas_PICBase.GenerateROBdetComment; {Genera un comentario detallado en el código ASM. Válido solo para Rutinas de Operación binaria, que es cuando está definido operType, p1, y p2.} begin @@ -393,7 +399,7 @@ procedure TGenCodPic.GenerateROBdetComment; p2^.StoOpChr + ':' + p2^.Typ.name + ')', false); end; end; -procedure TGenCodPic.GenerateROUdetComment; +procedure TGenCodBas_PICBase.GenerateROUdetComment; {Genera un comentario detallado en el código ASM. Válido solo para Rutinas de Operación unaria, que es cuando está definido operType, y p1.} begin @@ -430,7 +436,7 @@ function OperandUseHW(Oper: TOperand): boolean; exit(false); end; //Rutinas de gestión de memoria de bajo nivel -procedure TGenCodPic.AssignRAM(out addr: word; regName: string; shared: boolean); +procedure TGenCodBas_PICBase.AssignRAM(out addr: word; regName: string; shared: boolean); //Asocia a una dirección física de la memoria del PIC. //Si encuentra error, devuelve el mensaje de error en "MsjError" begin @@ -442,7 +448,7 @@ procedure TGenCodPic.AssignRAM(out addr: word; regName: string; shared: boolean) end; pic.SetNameRAM(addr, regName); //pone nombre a registro end; -procedure TGenCodPic.AssignRAMbit(out addr: word; out bit: byte; regName: string; shared: boolean); +procedure TGenCodBas_PICBase.AssignRAMbit(out addr: word; out bit: byte; regName: string; shared: boolean); begin if not pic.GetFreeBit(addr, bit, shared) then begin GenError('No enough RAM'); @@ -450,7 +456,7 @@ procedure TGenCodPic.AssignRAMbit(out addr: word; out bit: byte; regName: string end; pic.SetNameRAMbit(addr, bit, regName); //pone nombre a bit end; -function TGenCodPic.CreateRegisterByte(RegType: TPicRegType): TPicRegister; +function TGenCodBas_PICBase.CreateRegisterByte(RegType: TPicRegType): TPicRegister; {Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada para agregar un nuevo registro a listRegAux.} @@ -468,7 +474,7 @@ function TGenCodPic.CreateRegisterByte(RegType: TPicRegType): TPicRegister; end; Result := reg; //devuelve referencia end; -function TGenCodPic.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; +function TGenCodBas_PICBase.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; {Crea una nueva entrada para registro en listRegAux[], pero no le asigna memoria. Si encuentra error, devuelve NIL. Este debería ser el único punto de entrada para agregar un nuevo registro a listRegAux.} @@ -486,7 +492,7 @@ function TGenCodPic.CreateRegisterBit(RegType: TPicRegType): TPicRegisterBit; end; Result := reg; //devuelve referencia end; -function TGenCodPic.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; +function TGenCodBas_PICBase.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; {Crea una variable temporal agregándola al contenedor varFields, que es limpiado al iniciar la compilación. Notar que la variable temporal creada, no tiene RAM asiganda.} @@ -501,7 +507,7 @@ function TGenCodPic.CreateTmpVar(nam: string; eleTyp: TxpEleType): TxpEleVar; varFields.Add(tmpVar); //Agrega Result := tmpVar; end; -function TGenCodPic.NewTmpVarWord(rL, rH: TPicRegister): TxpEleVar; +function TGenCodBas_PICBase.NewTmpVarWord(rL, rH: TPicRegister): TxpEleVar; {Crea una variable temporal Word, con las direcciones de los registros indicados, y devuelve la referencia. La variable se crea sin asignación de memoria.} begin @@ -511,7 +517,7 @@ function TGenCodPic.NewTmpVarWord(rL, rH: TPicRegister): TxpEleVar; Result.addr1 := rH.addr; end; //Variables temporales -function TGenCodPic.NewTmpVarDword(rL, rH, rE, rU: TPicRegister): TxpEleVar; +function TGenCodBas_PICBase.NewTmpVarDword(rL, rH, rE, rU: TPicRegister): TxpEleVar; {Crea una variable temporal DWord, con las direcciones de los registros indicados, y devuelve la referencia. La variable se crea sin asignación de memoria.} begin @@ -523,7 +529,7 @@ function TGenCodPic.NewTmpVarDword(rL, rH, rE, rU: TPicRegister): TxpEleVar; Result.addr3 := rU.addr; end; //Rutinas de Gestión de memoria -function TGenCodPic.GetAuxRegisterByte: TPicRegister; +function TGenCodBas_PICBase.GetAuxRegisterByte: TPicRegister; {Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. Si hay algún error, llama a GenError() y devuelve NIL} var @@ -551,7 +557,7 @@ function TGenCodPic.GetAuxRegisterByte: TPicRegister; reg.used := true; //marca como usado Result := reg; //Devuelve la referencia end; -function TGenCodPic.GetAuxRegisterBit: TPicRegisterBit; +function TGenCodBas_PICBase.GetAuxRegisterBit: TPicRegisterBit; {Devuelve la dirección de un registro de trabajo libre. Si no encuentra alguno, lo crea. Si hay algún error, llama a GenError() y devuelve NIL} var @@ -577,7 +583,7 @@ function TGenCodPic.GetAuxRegisterBit: TPicRegisterBit; reg.used := true; //marca como usado Result := reg; //Devuelve la referencia end; -function TGenCodPic.GetStkRegisterByte: TPicRegister; +function TGenCodBas_PICBase.GetStkRegisterByte: TPicRegister; {Pone un registro de un byte, en la pila, de modo que se pueda luego acceder con FreeStkRegisterByte(). Si hay un error, devuelve NIL. Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila @@ -607,7 +613,7 @@ function TGenCodPic.GetStkRegisterByte: TPicRegister; Result.used := true; //lo marca inc(stackTop); //actualiza end; -function TGenCodPic.GetStkRegisterBit: TPicRegisterBit; +function TGenCodBas_PICBase.GetStkRegisterBit: TPicRegisterBit; {Pone un registro de un bit, en la pila, de modo que se pueda luego acceder con FreeStkRegisterBit(). Si hay un error, devuelve NIL. Notar que esta no es una pila de memoria en el PIC, sino una emulación de pila @@ -637,7 +643,7 @@ function TGenCodPic.GetStkRegisterBit: TPicRegisterBit; Result.used := true; //lo marca inc(stackTopBit); //actualiza end; -function TGenCodPic.GetVarBitFromStk: TxpEleVar; +function TGenCodBas_PICBase.GetVarBitFromStk: TxpEleVar; {Devuelve la referencia a una variable bit, que representa al último bit agregado en la pila. Se usa como un medio de trabajar con los datos de la pila.} var @@ -651,7 +657,7 @@ function TGenCodPic.GetVarBitFromStk: TxpEleVar; //Ahora que tenemos ya la variable configurada, devolvemos la referecnia Result := varStkBit; end; -function TGenCodPic.GetVarByteFromStk: TxpEleVar; +function TGenCodBas_PICBase.GetVarByteFromStk: TxpEleVar; {Devuelve la referencia a una variable byte, que representa al último byte agregado en la pila. Se usa como un medio de trabajar con los datos de la pila.} var @@ -664,7 +670,7 @@ function TGenCodPic.GetVarByteFromStk: TxpEleVar; //Ahora que tenemos ya la variable configurada, devolvemos la referecnia Result := varStkByte; end; -function TGenCodPic.GetVarWordFromStk: TxpEleVar; +function TGenCodBas_PICBase.GetVarWordFromStk: TxpEleVar; {Devuelve la referencia a una variable word, que representa al último word agregado en la pila. Se usa como un medio de trabajar con los datos de la pila.} var @@ -679,7 +685,7 @@ function TGenCodPic.GetVarWordFromStk: TxpEleVar; //Ahora que tenemos ya la variable configurada, devolvemos la referencia Result := varStkWord; end; -function TGenCodPic.GetVarDWordFromStk: TxpEleVar; +function TGenCodBas_PICBase.GetVarDWordFromStk: TxpEleVar; {Devuelve la referencia a una variable Dword, que representa al último Dword agregado en la pila. Se usa como un medio de trabajar con los datos de la pila.} var @@ -698,7 +704,7 @@ function TGenCodPic.GetVarDWordFromStk: TxpEleVar; //Ahora que tenemos ya la variable configurada, devolvemos la referencia Result := varStkDWord; end; -function TGenCodPic.FreeStkRegisterBit: boolean; +function TGenCodBas_PICBase.FreeStkRegisterBit: boolean; {Libera el último bit, que se pidió a la RAM. Si hubo error, devuelve FALSE. Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} begin @@ -709,7 +715,7 @@ function TGenCodPic.FreeStkRegisterBit: boolean; dec(stackTopBit); //Baja puntero exit(true); end; -function TGenCodPic.FreeStkRegisterByte: boolean; +function TGenCodBas_PICBase.FreeStkRegisterByte: boolean; {Libera el último byte, que se pidió a la RAM. Devuelve en "reg", la dirección del último byte pedido. Si hubo error, devuelve FALSE. Liberarlos significa que estarán disponibles, para la siguiente vez que se pidan} @@ -721,7 +727,7 @@ function TGenCodPic.FreeStkRegisterByte: boolean; dec(stackTop); //Baja puntero exit(true); end; -function TGenCodPic.FreeStkRegisterWord: boolean; +function TGenCodBas_PICBase.FreeStkRegisterWord: boolean; {Libera el último word, que se pidió a la RAM. Si hubo error, devuelve FALSE.} begin if stackTop<=1 then begin //Ya está abajo @@ -731,7 +737,7 @@ function TGenCodPic.FreeStkRegisterWord: boolean; dec(stackTop, 2); //Baja puntero exit(true); end; -function TGenCodPic.FreeStkRegisterDWord: boolean; +function TGenCodBas_PICBase.FreeStkRegisterDWord: boolean; {Libera el último dword, que se pidió a la RAM. Si hubo error, devuelve FALSE.} begin if stackTop<=3 then begin //Ya está abajo @@ -742,7 +748,7 @@ function TGenCodPic.FreeStkRegisterDWord: boolean; exit(true); end; ////Rutinas de gestión de memoria para variables -procedure TGenCodPic.AssignRAMinBit(absAdd, absBit: integer; +procedure TGenCodBas_PICBase.AssignRAMinBit(absAdd, absBit: integer; var addr: word; var bit: byte; regName: string; shared: boolean = false); {Aeigna RAM a un registro o lo coloca en la dirección indicada.} begin @@ -759,7 +765,7 @@ procedure TGenCodPic.AssignRAMinBit(absAdd, absBit: integer; pic.SetNameRAMbit(addr, bit, regName); end; end; -procedure TGenCodPic.AssignRAMinByte(absAdd: integer; +procedure TGenCodBas_PICBase.AssignRAMinByte(absAdd: integer; var addr: word; regName: string; shared: boolean = false); {Asigna RAM a un registro o lo coloca en la dirección indicada.} begin @@ -775,7 +781,7 @@ procedure TGenCodPic.AssignRAMinByte(absAdd: integer; pic.SetNameRAM(addr, regName); end; end; -procedure TGenCodPic.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); +procedure TGenCodBas_PICBase.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); {Rutina para asignar espacio físico a una variable. La variable, es creada en memoria con los parámetros que posea en ese momento. Si está definida como ABSOLUTE, se le creará en la posicón indicada. } @@ -864,14 +870,14 @@ procedure TGenCodPic.CreateVarInRAM(nVar: TxpEleVar; shared: boolean = false); if typ.OnGlobalDef<>nil then typ.OnGlobalDef(varName, ''); end; //Métodos para fijar el resultado -procedure TGenCodPic.SetResultNull; +procedure TGenCodBas_PICBase.SetResultNull; {Fija el resultado como NULL.} begin res.SetAsNull; InvertedFromC:=false; //para limpiar el estado res.Inverted := false; end; -procedure TGenCodPic.SetResultConst(typ: TxpEleType); +procedure TGenCodBas_PICBase.SetResultConst(typ: TxpEleType); {Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, siempre antes de evaluar cada subexpresión.} begin @@ -881,7 +887,7 @@ procedure TGenCodPic.SetResultConst(typ: TxpEleType); que en este caso, tenemos control pleno de su valor} res.Inverted := false; end; -procedure TGenCodPic.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); +procedure TGenCodBas_PICBase.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false); {Fija los parámetros del resultado de una subexpresion. Este método se debe ejcutar, siempre antes de evaluar cada subexpresión.} begin @@ -890,7 +896,7 @@ procedure TGenCodPic.SetResultVariab(rVar: TxpEleVar; Inverted: boolean = false) //"Inverted" solo tiene sentido, para los tipos bit y boolean res.Inverted := Inverted; end; -procedure TGenCodPic.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); +procedure TGenCodBas_PICBase.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true); {Fija los parámetros del resultado de una subexpresion (en "res"). Este método se debe ejecutar, siempre antes de evaluar cada subexpresión. Más exactamente, antes de generar código para ña subexpresión, porque esta rutina puede generar su propio código.} @@ -911,14 +917,14 @@ procedure TGenCodPic.SetResultExpres(typ: TxpEleType; ChkRTState: boolean = true //Actualiza el estado de los registros de trabajo. RTstate := typ; end; -procedure TGenCodPic.SetResultVarRef(rVarBase: TxpEleVar); +procedure TGenCodBas_PICBase.SetResultVarRef(rVarBase: TxpEleVar); begin res.SetAsVarRef(rVarBase); InvertedFromC:=false; //para limpiar el estado //No se usa "Inverted" en este almacenamiento res.Inverted := false; end; -procedure TGenCodPic.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); +procedure TGenCodBas_PICBase.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRTState: boolean = true); begin if ChkRTState then begin //Se pide verificar si se están suando los RT, para salvarlos en la pila. @@ -935,19 +941,19 @@ procedure TGenCodPic.SetResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType; ChkRT res.Inverted := false; end; //Fija el resultado de ROP como constante -procedure TGenCodPic.SetROBResultConst_bool(valBool: boolean); +procedure TGenCodBas_PICBase.SetROBResultConst_bool(valBool: boolean); begin GenerateROBdetComment; SetResultConst(typBool); res.valBool := valBool; end; -procedure TGenCodPic.SetROBResultConst_bit(valBit: boolean); +procedure TGenCodBas_PICBase.SetROBResultConst_bit(valBit: boolean); begin GenerateROBdetComment; SetResultConst(typBit); res.valBool := valBit; end; -procedure TGenCodPic.SetROBResultConst_byte(valByte: integer); +procedure TGenCodBas_PICBase.SetROBResultConst_byte(valByte: integer); begin GenerateROBdetComment; if not ValidateByteRange(valByte) then @@ -955,13 +961,13 @@ procedure TGenCodPic.SetROBResultConst_byte(valByte: integer); SetResultConst(typByte); res.valInt := valByte; end; -procedure TGenCodPic.SetROBResultConst_char(valByte: integer); +procedure TGenCodBas_PICBase.SetROBResultConst_char(valByte: integer); begin GenerateROBdetComment; SetResultConst(typChar); res.valInt := valByte; end; -procedure TGenCodPic.SetROBResultConst_word(valWord: integer); +procedure TGenCodBas_PICBase.SetROBResultConst_word(valWord: integer); begin GenerateROBdetComment; if not ValidateWordRange(valWord) then @@ -969,7 +975,7 @@ procedure TGenCodPic.SetROBResultConst_word(valWord: integer); SetResultConst(typWord); res.valInt := valWord; end; -procedure TGenCodPic.SetROBResultConst_dword(valWord: Int64); +procedure TGenCodBas_PICBase.SetROBResultConst_dword(valWord: Int64); begin GenerateROBdetComment; if not ValidateDWordRange(valWord) then @@ -978,13 +984,13 @@ procedure TGenCodPic.SetROBResultConst_dword(valWord: Int64); res.valInt := valWord; end; //Fija el resultado de ROP como variable -procedure TGenCodPic.SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean); +procedure TGenCodBas_PICBase.SetROBResultVariab(rVar: TxpEleVar; Inverted: boolean); begin GenerateROBdetComment; SetResultVariab(rVar, Inverted); end; //Fija el resultado de ROP como expresión -procedure TGenCodPic.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); +procedure TGenCodBas_PICBase.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean); {Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de la oepración en p1^ y p2^, porque toma infiormación de allí.} @@ -1002,7 +1008,7 @@ procedure TGenCodPic.SetROBResultExpres_bit(Opt: TxpOperation; Inverted: boolean //Fija la lógica res.Inverted := Inverted; end; -procedure TGenCodPic.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); +procedure TGenCodBas_PICBase.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolean); {Define el resultado como una expresión de tipo Boolean, y se asegura de reservar el registro Z, para devolver la salida. Debe llamarse cuando se tienen los operandos de la oepración en p1^y p2^, porque toma infiormación de allí.} @@ -1020,7 +1026,7 @@ procedure TGenCodPic.SetROBResultExpres_bool(Opt: TxpOperation; Inverted: boolea //Fija la lógica res.Inverted := Inverted; end; -procedure TGenCodPic.SetROBResultExpres_byte(Opt: TxpOperation); +procedure TGenCodBas_PICBase.SetROBResultExpres_byte(Opt: TxpOperation); {Define el resultado como una expresión de tipo Byte, y se asegura de reservar el registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de la oepración en p1^y p2^, porque toma información de allí.} @@ -1036,7 +1042,7 @@ procedure TGenCodPic.SetROBResultExpres_byte(Opt: TxpOperation); SetResultExpres(typByte); //actualiza "RTstate" end; end; -procedure TGenCodPic.SetROBResultExpres_char(Opt: TxpOperation); +procedure TGenCodBas_PICBase.SetROBResultExpres_char(Opt: TxpOperation); {Define el resultado como una expresión de tipo Char, y se asegura de reservar el registro W, para devolver la salida. Debe llamarse cuando se tienen los operandos de la oepración en p1^y p2^, porque toma infiormación de allí.} @@ -1052,7 +1058,7 @@ procedure TGenCodPic.SetROBResultExpres_char(Opt: TxpOperation); SetResultExpres(typChar); //actualiza "RTstate" end; end; -procedure TGenCodPic.SetROBResultExpres_word(Opt: TxpOperation); +procedure TGenCodBas_PICBase.SetROBResultExpres_word(Opt: TxpOperation); {Define el resultado como una expresión de tipo Word, y se asegura de reservar los registros H,W, para devolver la salida.} begin @@ -1067,7 +1073,7 @@ procedure TGenCodPic.SetROBResultExpres_word(Opt: TxpOperation); SetResultExpres(typWord); end; end; -procedure TGenCodPic.SetROBResultExpres_dword(Opt: TxpOperation); +procedure TGenCodBas_PICBase.SetROBResultExpres_dword(Opt: TxpOperation); {Define el resultado como una expresión de tipo Word, y se asegura de reservar los registros H,W, para devolver la salida.} begin @@ -1084,13 +1090,13 @@ procedure TGenCodPic.SetROBResultExpres_dword(Opt: TxpOperation); end; end; //Fija el resultado de ROU -procedure TGenCodPic.SetROUResultConst_bit(valBit: boolean); +procedure TGenCodBas_PICBase.SetROUResultConst_bit(valBit: boolean); begin GenerateROUdetComment; SetResultConst(typBit); res.valBool := valBit; end; -procedure TGenCodPic.SetROUResultConst_byte(valByte: integer); +procedure TGenCodBas_PICBase.SetROUResultConst_byte(valByte: integer); begin GenerateROUdetComment; if not ValidateByteRange(valByte) then @@ -1098,18 +1104,18 @@ procedure TGenCodPic.SetROUResultConst_byte(valByte: integer); SetResultConst(typByte); res.valInt := valByte; end; -procedure TGenCodPic.SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean); +procedure TGenCodBas_PICBase.SetROUResultVariab(rVar: TxpEleVar; Inverted: boolean); begin GenerateROUdetComment; SetResultVariab(rVar, Inverted); end; -procedure TGenCodPic.SetROUResultVarRef(rVarBase: TxpEleVar); +procedure TGenCodBas_PICBase.SetROUResultVarRef(rVarBase: TxpEleVar); {Fija el resultado como una referencia de tipo stVarRefVar} begin GenerateROUdetComment; SetResultVarRef(rVarBase); end; -procedure TGenCodPic.SetROUResultExpres_bit(Inverted: boolean); +procedure TGenCodBas_PICBase.SetROUResultExpres_bit(Inverted: boolean); {Define el resultado como una expresión de tipo Bit, y se asegura de reservar el registro Z, para devolver la salida. Se debe usar solo para operaciones unarias.} begin @@ -1126,7 +1132,7 @@ procedure TGenCodPic.SetROUResultExpres_bit(Inverted: boolean); //Fija la lógica res.Inverted := Inverted; end; -procedure TGenCodPic.SetROUResultExpres_byte; +procedure TGenCodBas_PICBase.SetROUResultExpres_byte; {Define el resultado como una expresión de tipo Byte, y se asegura de reservar el registro W, para devolver la salida. Se debe usar solo para operaciones unarias.} begin @@ -1141,7 +1147,7 @@ procedure TGenCodPic.SetROUResultExpres_byte; SetResultExpres(typByte); //actualiza "RTstate" end; end; -procedure TGenCodPic.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); +procedure TGenCodBas_PICBase.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); {Define el resultado como una expresión stVarRefExp, protegiendo los RT si es necesario. Se debe usar solo para operaciones unarias.} begin @@ -1157,7 +1163,7 @@ procedure TGenCodPic.SetROUResultExpRef(rVarBase: TxpEleVar; typ: TxpEleType); end; end; //Adicionales -procedure TGenCodPic.ChangeResultBitToBool; +procedure TGenCodBas_PICBase.ChangeResultBitToBool; {Cambia el tipo de dato del resultado (que se supone es Bit), a Boolean.} var tmpVar: TxpEleVar; @@ -1177,11 +1183,11 @@ procedure TGenCodPic.ChangeResultBitToBool; end; end; end; -procedure TGenCodPic.ChangeResultCharToByte; +procedure TGenCodBas_PICBase.ChangeResultCharToByte; begin end; -function TGenCodPic.ChangePointerToExpres(var ope: TOperand): boolean; +function TGenCodBas_PICBase.ChangePointerToExpres(var ope: TOperand): boolean; {Convierte un operando de tipo puntero dereferenciado (x^), en una expresión en los RT, para que pueda ser evaluado, sin problemas, por las ROP. Si hay error devuelve false.} @@ -1216,11 +1222,12 @@ function TGenCodPic.ChangePointerToExpres(var ope: TOperand): boolean; end; end; //Rutinas generales para la codificación -procedure TGenCodPic.CodAsmFD(const inst: TPIC16Inst; const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.CodAsmFD(const inst: TPICBaseInst; const f: byte; + d: TPICBaseDestin); begin pic.codAsmFD(inst, f, d); end; -procedure TGenCodPic.CodAsmK(const inst: TPIC16Inst; const k: byte); inline; +procedure TGenCodBas_PICBase.CodAsmK(const inst: TPICBaseInst; const k: byte); begin pic.codAsmK(inst, k); end; @@ -1229,7 +1236,7 @@ procedure TGenCodPic.CodAsmK(const inst: TPIC16Inst; const k: byte); inline; pic.codAsmFB(inst, f, b); end;} //rutinas que facilitan la codifición de instrucciones -procedure TGenCodPic._BANKRESET; +procedure TGenCodBas_PICBase._BANKRESET; {Reinicia el banco al banco 0, independientemente de donde se pueda encontrar antes. Siempre genera dos instrucciones. Se usa cuando no se puede predecir exactamente, en que banco se encontrará el compilador.} @@ -1242,7 +1249,7 @@ procedure TGenCodPic._BANKRESET; end; CurrBank:=0; end; -procedure TGenCodPic._BANKSEL(targetBank: byte); +procedure TGenCodBas_PICBase._BANKSEL(targetBank: byte); {Verifica si se está en el banco deseado, de no ser así genera las instrucciones para el cambio de banco. Devuelve el número de instrucciones generado.} @@ -1286,566 +1293,426 @@ procedure TGenCodPic._BANKSEL(targetBank: byte); CurrBank := targetBank; exit; end; -procedure TGenCodPic.GenCodBank(targetAdrr: word); +procedure TGenCodBas_PICBase.GenCodBank(targetAdrr: word); {Genera código de cambio de banco para acceder a la dirección indicada. Se debe usar antes de una instrucción que va a acceder a RAM.} var targetBank: byte; - i, lbl: Integer; - opCode: Word; - lastOpCode0: TPIC16Inst; begin if targetAdrr and $03f = $000 then exit; //Mapeada siempre en los 4 bancos if targetAdrr and $03f = $004 then exit; //Mapeada siempre en los 4 bancos - i := pic.iFlash; //guarda dirección targetBank := targetAdrr >> 7; - lastOpCode0 := lastOpCode; //Protege, porque _BANKSEL() puede cambiarlo { TODO : Se debería ver un medio rápido para detectar si la variable "targetAdrr" está mapeada, también, en otros bancos y así evitar cambios innecesarios de banco. } _BANKSEL(targetBank); - if (i>0) and (pic.iFlash > i) and (lastOpCode0 in [BTFSC, BTFSS, DECFSZ, INCFSZ]) then begin - {Se ha generado instrucciones en el cambio de banco. Eso hace que la instrucción - que sigue ya no sea "atómica". Hay que ver si es necesario corregir posibles saltos - de la instrucción anterior, que ha asumido que esta instrución es atómica (de una - sola palabra). - Se usa el filtro de "lastOpCode" para evitar decodificar innecesariamente el opCode. - Notar que el hecho de usar "lastOpCode" implica que solo se reconcoerán las - instrucciones de salto que sean de tipo "k".} - opCode := pic.flash[i-1].value; //Instrucción anterior - pic.Decode(opCode); //decodifica instrucción - //Verifica si corresponde a alguna instrucción condicional que debe corregirse. - case pic.idIns of - BTFSC: begin - {Es del tipo: - BTFSC xxx, bbb - - Y debe ser convertido en: - BTFSS xxx, bbb - GOTO label - - <-----íFlash - label: - } - pic.iFlash := i - 1; //retrocede a instrucción BTFSC; - CurrBank := pic.flash[i-1].curBnk; //Empieza de nuevo en este banco, para no perder la secuencia - _BTFSS(pic.f_, pic.b_); //corrige instrucción - _GOTO_PEND(lbl); - _BANKSEL(targetBank); //Genera nuevamente instrucciones de cambio de banco - pic.codGotoAt(lbl, _PC+1); //Ua isntrucción despúes - end; - BTFSS: begin - pic.iFlash := i - 1; //retrocede a instrucción BTFSC; - CurrBank := pic.flash[i-1].curBnk; //Empieza de nuevo en este banco, para no perder la secuencia - _BTFSC(pic.f_, pic.b_); //corrige instrucción - _GOTO_PEND(lbl); - _BANKSEL(targetBank); //Genera nuevamente instrucciones de banco - pic.codGotoAt(lbl, _PC); //termina de codificar el salto - end; - DECFSZ, INCFSZ: begin - //Estas instrucciones no se pueden modificar, sino que se debe incluir - //saltos adicionales - pic.iFlash := i; //retrocede a inicio de instrucciones de cambio de banco - CurrBank := pic.flash[i].curBnk; //Empieza de nuevo en este banco, para no perder la secuencia - _GOTO(_PC+2); - _GOTO_PEND(lbl); - _BANKSEL(targetBank); //Genera nuevamente instrucciones de cambio de banco - pic.codGotoAt(lbl, _PC); //termina de codificar el salto - end; - end; - end; end; -function TGenCodPic._PC: word; inline; +function TGenCodBas_PICBase._PC: word; inline; {Devuelve la dirección actual en Flash} begin Result := pic.iFlash; end; -function TGenCodPic._CLOCK: integer; inline; +function TGenCodBas_PICBase._CLOCK: integer; inline; {Devuelve la frecuencia de reloj del PIC} begin Result := pic.frequen; end; -procedure TGenCodPic._LABEL(igot: integer); +procedure TGenCodBas_PICBase._LABEL(igot: integer); {Termina de codificar el GOTO_PEND} begin pic.codGotoAt(igot, _PC); end; //Instrucciones simples {Estas instrucciones no guardan la instrucción compilada en "lastOpCode".} -procedure TGenCodPic._ADDLW(const k: word); inline; +procedure TGenCodBas_PICBase._ANDLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(ADDLW, k); - lastOpCode := _Inval; + pic.codAsmK(i_ANDLW, k); end; -procedure TGenCodPic._ANDLW(const k: word); inline; +procedure TGenCodBas_PICBase._ADDWF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(ANDLW, k); - lastOpCode := _Inval; + pic.codAsmFD(i_ADDWF, f,d); end; -procedure TGenCodPic._ADDWF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._ANDWF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(ADDWF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_ANDWF, f,d); end; -procedure TGenCodPic._ANDWF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._CLRF(const f: byte); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(ANDWF, f,d); - lastOpCode := _Inval; + pic.codAsmF(i_CLRF, f); end; -procedure TGenCodPic._CLRF(const f: byte); inline; +procedure TGenCodBas_PICBase._CLRW; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmF(CLRF, f); - lastOpCode := _Inval; + pic.codAsm(i_CLRW); end; -procedure TGenCodPic._CLRW(); inline; +procedure TGenCodBas_PICBase._COMF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(CLRW); - lastOpCode := _Inval; + pic.codAsmFD(i_COMF, f,d); end; -procedure TGenCodPic._COMF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._DECF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(COMF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_DECF, f,d); end; -procedure TGenCodPic._DECF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._DECFSZ(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(DECF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_DECFSZ, f,d); end; -procedure TGenCodPic._DECFSZ(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._INCF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(DECFSZ, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_INCF, f,d); end; -procedure TGenCodPic._INCF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._INCFSZ(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(INCF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_INCFSZ, f,d); end; -procedure TGenCodPic._INCFSZ(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._IORWF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(INCFSZ, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_IORWF, f,d); end; -procedure TGenCodPic._IORWF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._MOVF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(IORWF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_MOVF, f,d); end; -procedure TGenCodPic._MOVF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._MOVWF(const f: byte); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(MOVF, f,d); - lastOpCode := _Inval; + pic.codAsmF(i_MOVWF, f); end; -procedure TGenCodPic._MOVWF(const f: byte); +procedure TGenCodBas_PICBase._NOP; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmF(MOVWF, f); - lastOpCode := _Inval; + pic.codAsm(i_NOP); end; -procedure TGenCodPic._NOP(); inline; +procedure TGenCodBas_PICBase._RLF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(NOP); - lastOpCode := _Inval; + pic.codAsmFD(i_RLF, f,d); end; -procedure TGenCodPic._RLF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._RRF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(RLF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_RRF, f,d); end; -procedure TGenCodPic._RRF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._SUBWF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(RRF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_SUBWF, f,d); end; -procedure TGenCodPic._SUBWF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._SWAPF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(SUBWF, f,d); - lastOpCode := _Inval; + pic.codAsmFD(i_SWAPF, f,d); end; -procedure TGenCodPic._SWAPF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._BCF(const f, b: byte); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(SWAPF, f,d); - lastOpCode := _Inval; + pic.codAsmFB(i_BCF, f, b); end; -procedure TGenCodPic._BCF(const f, b: byte); inline; +procedure TGenCodBas_PICBase._BSF(const f, b: byte); //inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BCF, f, b); - lastOpCode := _Inval; + pic.codAsmFB(i_BSF, f, b); end; -procedure TGenCodPic._BSF(const f, b: byte); //inline; +procedure TGenCodBas_PICBase._BTFSC(const f, b: byte); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BSF, f, b); - lastOpCode := _Inval; + pic.codAsmFB(i_BTFSC, f, b); end; -procedure TGenCodPic._BTFSC(const f, b: byte); inline; +procedure TGenCodBas_PICBase._BTFSS(const f, b: byte); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BTFSC, f, b); - lastOpCode := _Inval; + pic.codAsmFB(i_BTFSS, f, b); end; -procedure TGenCodPic._BTFSS(const f, b: byte); inline; +procedure TGenCodBas_PICBase._CALL(const a: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BTFSS, f, b); - lastOpCode := _Inval; + pic.codAsmA(i_CALL, a); end; -procedure TGenCodPic._CALL(const a: word); inline; +procedure TGenCodBas_PICBase._CLRWDT; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(CALL, a); - lastOpCode := _Inval; + pic.codAsm(i_CLRWDT); end; -procedure TGenCodPic._CLRWDT(); inline; +procedure TGenCodBas_PICBase._GOTO(const a: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(CLRWDT); - lastOpCode := _Inval; + pic.codAsmA(i_GOTO, a); end; -procedure TGenCodPic._GOTO(const a: word); inline; -begin - pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(GOTO_, a); - lastOpCode := _Inval; -end; -procedure TGenCodPic._GOTO_PEND(out igot: integer); +procedure TGenCodBas_PICBase._GOTO_PEND(out igot: integer); {Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección donde se escribe el GOTO, para poder completarla posteriormente. } begin igot := pic.iFlash; //guarda posición de instrucción de salto pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(GOTO_, 0); //pone salto indefinido - lastOpCode := _Inval; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido end; -procedure TGenCodPic._IORLW(const k: word); inline; +procedure TGenCodBas_PICBase._IORLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(IORLW, k); - lastOpCode := _Inval; + pic.codAsmK(i_IORLW, k); end; -procedure TGenCodPic._MOVLW(const k: word); inline; +procedure TGenCodBas_PICBase._MOVLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(MOVLW, k); - lastOpCode := _Inval; + pic.codAsmK(i_MOVLW, k); end; -procedure TGenCodPic._RETFIE(); inline; +procedure TGenCodBas_PICBase._RETFIE; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(RETFIE); - lastOpCode := _Inval; + pic.codAsm(i_RETFIE); end; -procedure TGenCodPic._RETLW(const k: word); inline; +procedure TGenCodBas_PICBase._RETLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(RETLW, k); - lastOpCode := _Inval; + pic.codAsmK(i_RETLW, k); end; -procedure TGenCodPic._RETURN(); inline; +procedure TGenCodBas_PICBase._RETURN; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(RETURN); - lastOpCode := _Inval; + pic.codAsm(i_RETURN); end; -procedure TGenCodPic._SLEEP(); inline; +procedure TGenCodBas_PICBase._SLEEP; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(SLEEP); - lastOpCode := _Inval; + pic.codAsm(i_SLEEP); end; -procedure TGenCodPic._SUBLW(const k: word); inline; +procedure TGenCodBas_PICBase._XORLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(SUBLW, k); - lastOpCode := _Inval; + pic.codAsmK(i_XORLW, k); end; -procedure TGenCodPic._XORLW(const k: word); inline; +procedure TGenCodBas_PICBase._XORWF(const f: byte; d: TPICBaseDestin); begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(XORLW, k); - lastOpCode := _Inval; + pic.codAsmFD(i_XORWF, f,d); end; -procedure TGenCodPic._XORWF(const f: byte; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase._IFZERO; begin - pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(XORWF, f,d); - lastOpCode := _Inval; + _BTFSC(STATUS, _Z); end; -//Instrucciones que manejan el cambio de banco -{Estas instrucciones guardan la instrucción compilada en "lastOpCode".} -procedure TGenCodPic.kADDLW(const k: word); inline; +procedure TGenCodBas_PICBase._IFNZERO; begin - pic.flash[pic.iFlash].curBnk := CurrBank; //Este es el banco esperado - pic.codAsmK(ADDLW, k); - lastOpCode := ADDLW; + _BTFSS(STATUS, _Z); end; -procedure TGenCodPic.kADDWF(const f: word; d: TPIC16destin); inline; +//Instrucciones que manejan el cambio de banco +{Estas instrucciones guardan la instrucción compilada en "lastOpCode".} +procedure TGenCodBas_PICBase.kADDWF(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(ADDWF, f,d); - lastOpCode := ADDWF; + pic.codAsmFD(i_ADDWF, f,d); end; -procedure TGenCodPic.kANDLW(const k: word); inline; +procedure TGenCodBas_PICBase.kANDLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(ANDLW, k); - lastOpCode := ANDLW; + pic.codAsmK(i_ANDLW, k); end; -procedure TGenCodPic.kANDWF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kANDWF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(ANDWF, f.addr, d); - lastOpCode := ANDWF; + pic.codAsmFD(i_ANDWF, f.addr, d); end; -procedure TGenCodPic.kCLRF(const f: TPicRegister); inline; +procedure TGenCodBas_PICBase.kCLRF(const f: TPicRegister); inline; begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmF(CLRF, f.addr); - lastOpCode := CLRF; + pic.codAsmF(i_CLRF, f.addr); end; -procedure TGenCodPic.kCLRW(); inline; +procedure TGenCodBas_PICBase.kCLRW; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(CLRW); - lastOpCode := CLRW; + pic.codAsm(i_CLRW); end; -procedure TGenCodPic.kCOMF(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kCOMF(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(COMF, f,d); - lastOpCode := COMF; + pic.codAsmFD(i_COMF, f,d); end; -procedure TGenCodPic.kDECF(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kDECF(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(DECF, f,d); - lastOpCode := DECF; + pic.codAsmFD(i_DECF, f,d); end; -procedure TGenCodPic.kDECFSZ(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kDECFSZ(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(DECFSZ, f,d); - lastOpCode := DECFSZ; + pic.codAsmFD(i_DECFSZ, f,d); end; -procedure TGenCodPic.kINCF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kINCF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(INCF, f.addr, d); - lastOpCode := INCF; + pic.codAsmFD(i_INCF, f.addr, d); end; -procedure TGenCodPic.kINCFSZ(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kINCFSZ(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(INCFSZ, f,d); - lastOpCode := INCFSZ; + pic.codAsmFD(i_INCFSZ, f,d); end; -procedure TGenCodPic.kIORWF(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kIORWF(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(IORWF, f,d); - lastOpCode := IORWF; + pic.codAsmFD(i_IORWF, f,d); end; -procedure TGenCodPic.kMOVF(const f: TPicRegister; d: TPIC16destin); +procedure TGenCodBas_PICBase.kMOVF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(MOVF, f.addr, d); - lastOpCode := MOVF; + pic.codAsmFD(i_MOVF, f.addr, d); end; -procedure TGenCodPic.kMOVWF(const f: TPicRegister); inline; +procedure TGenCodBas_PICBase.kMOVWF(const f: TPicRegister); inline; begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmF(MOVWF, f.addr); - lastOpCode := MOVWF; + pic.codAsmF(i_MOVWF, f.addr); end; -procedure TGenCodPic.kNOP(); inline; +procedure TGenCodBas_PICBase.kNOP; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(NOP); - lastOpCode := NOP; + pic.codAsm(i_NOP); end; -procedure TGenCodPic.kRLF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kRLF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(RLF, f.addr, d); - lastOpCode := RLF; + pic.codAsmFD(i_RLF, f.addr, d); end; -procedure TGenCodPic.kRRF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kRRF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(RRF, f.addr, d); - lastOpCode := RRF; + pic.codAsmFD(i_RRF, f.addr, d); end; -procedure TGenCodPic.kSUBWF(const f: word; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kSUBWF(const f: word; d: TPICBaseDestin); begin GenCodBank(f); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(SUBWF, f,d); - lastOpCode := SUBWF; + pic.codAsmFD(i_SUBWF, f,d); end; -procedure TGenCodPic.kSWAPF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kSWAPF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(SWAPF, f.addr, d); - lastOpCode := SWAPF; + pic.codAsmFD(i_SWAPF, f.addr, d); end; -procedure TGenCodPic.kBCF(const f: TPicRegisterBit); +procedure TGenCodBas_PICBase.kBCF(const f: TPicRegisterBit); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BCF, f.addr, f.bit); - lastOpCode := BCF; + pic.codAsmFB(i_BCF, f.addr, f.bit); end; -procedure TGenCodPic.kBSF(const f: TPicRegisterBit); +procedure TGenCodBas_PICBase.kBSF(const f: TPicRegisterBit); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BSF, f.addr, f.bit); - lastOpCode := BSF; + pic.codAsmFB(i_BSF, f.addr, f.bit); end; -procedure TGenCodPic.kBTFSC(const f: TPicRegisterBit); +procedure TGenCodBas_PICBase.kBTFSC(const f: TPicRegisterBit); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BTFSC, f.addr, f.bit); - lastOpCode := BTFSC; + pic.codAsmFB(i_BTFSC, f.addr, f.bit); end; -procedure TGenCodPic.kBTFSS(const f: TPicRegisterBit); +procedure TGenCodBas_PICBase.kBTFSS(const f: TPicRegisterBit); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFB(BTFSS, f.addr, f.bit); - lastOpCode := BTFSS; + pic.codAsmFB(i_BTFSS, f.addr, f.bit); end; -procedure TGenCodPic.kCALL(const a: word); inline; +procedure TGenCodBas_PICBase.kCALL(const a: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(CALL, a); - lastOpCode := CALL; + pic.codAsmA(i_CALL, a); end; -procedure TGenCodPic.kCLRWDT(); inline; +procedure TGenCodBas_PICBase.kCLRWDT; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(CLRWDT); - lastOpCode := CLRWDT; + pic.codAsm(i_CLRWDT); end; -procedure TGenCodPic.kGOTO(const a: word); inline; +procedure TGenCodBas_PICBase.kGOTO(const a: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(GOTO_, a); - lastOpCode := GOTO_; + pic.codAsmA(i_GOTO, a); end; -procedure TGenCodPic.kGOTO_PEND(out igot: integer); +procedure TGenCodBas_PICBase.kGOTO_PEND(out igot: integer); {Escribe una instrucción GOTO, pero sin precisar el destino aún. Devuelve la dirección donde se escribe el GOTO, para poder completarla posteriormente. } begin igot := pic.iFlash; //guarda posición de instrucción de salto pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmA(GOTO_, 0); //pone salto indefinido - lastOpCode := GOTO_; -end; -procedure TGenCodPic.kIORLW(const k: word); inline; -begin - pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(IORLW, k); - lastOpCode := IORLW; + pic.codAsmA(i_GOTO, 0); //pone salto indefinido end; -procedure TGenCodPic.kMOVLW(const k: word); inline; +procedure TGenCodBas_PICBase.kIORLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(MOVLW, k); - lastOpCode := MOVLW; + pic.codAsmK(i_IORLW, k); end; -procedure TGenCodPic.kRETFIE(); inline; +procedure TGenCodBas_PICBase.kMOVLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(RETFIE); - lastOpCode := RETFIE; + pic.codAsmK(i_MOVLW, k); end; -procedure TGenCodPic.kRETLW(const k: word); inline; +procedure TGenCodBas_PICBase.kRETFIE; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(RETLW, k); - lastOpCode := RETLW; + pic.codAsm(i_RETFIE); end; -procedure TGenCodPic.kRETURN(); inline; +procedure TGenCodBas_PICBase.kRETLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(RETURN); - lastOpCode := RETURN; + pic.codAsmK(i_RETLW, k); end; -procedure TGenCodPic.kSLEEP(); inline; +procedure TGenCodBas_PICBase.kRETURN; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsm(SLEEP); - lastOpCode := SLEEP; + pic.codAsm(i_RETURN); end; -procedure TGenCodPic.kSUBLW(const k: word); inline; +procedure TGenCodBas_PICBase.kSLEEP; inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(SUBLW, k); - lastOpCode := SUBLW; + pic.codAsm(i_SLEEP); end; -procedure TGenCodPic.kXORLW(const k: word); inline; +procedure TGenCodBas_PICBase.kXORLW(const k: word); inline; begin pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmK(XORLW, k); - lastOpCode := XORLW; + pic.codAsmK(i_XORLW, k); end; -procedure TGenCodPic.kXORWF(const f: TPicRegister; d: TPIC16destin); inline; +procedure TGenCodBas_PICBase.kXORWF(const f: TPicRegister; d: TPICBaseDestin); begin GenCodBank(f.addr); pic.flash[pic.iFlash].curBnk := CurrBank; - pic.codAsmFD(XORWF, f.addr, d); - lastOpCode := XORWF; + pic.codAsmFD(i_XORWF, f.addr, d); end; - -function TGenCodPic.PicName: string; +function TGenCodBas_PICBase.PicName: string; begin Result := pic.Model; end; -function TGenCodPic.PicNameShort: string; +function TGenCodBas_PICBase.PicNameShort: string; {Genera el nombre del PIC, quitándole la parte inicial "PIC".} begin Result := copy(pic.Model, 4, length(pic.Model)); end; -function TGenCodPic.GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; +function TGenCodBas_PICBase.GetIdxParArray(out WithBrack: boolean; out par: TOperand): boolean; {Extrae el primer parámetro (que corresponde al índice) de las funciones getitem() o setitem(). También reconoce las formas con corchetes [], y en ese caso pone "WithBrackets" en TRUE. Si encuentra error, devuelve false.} @@ -1869,7 +1736,7 @@ function TGenCodPic.GetIdxParArray(out WithBrack: boolean; out par: TOperand): b if HayError then exit(false); exit(true); end; -function TGenCodPic.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; +function TGenCodBas_PICBase.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out value: TOperand): boolean; {Lee el segundo parámetro de SetItem y devuelve en "value". Valida que sea sel tipo correcto. Si hay error, devuelve FALSE.} var @@ -1901,7 +1768,7 @@ function TGenCodPic.GetValueToAssign(WithBrack: boolean; arrVar: TxpEleVar; out exit(true); end; ///////////////// Tipo Bit //////////////// -procedure TGenCodPic.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); +procedure TGenCodBas_PICBase.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); {Carga operando a registros Z.} var Op: ^TOperand; @@ -1944,11 +1811,11 @@ procedure TGenCodPic.bit_LoadToRT(const OpPtr: pointer; modReturn: boolean); end; if modReturn then _RETURN; //codifica instrucción end; -procedure TGenCodPic.bit_DefineRegisters; +procedure TGenCodBas_PICBase.bit_DefineRegisters; begin //No es encesario, definir registros adicionales a W end; -procedure TGenCodPic.bit_SaveToStk; +procedure TGenCodBas_PICBase.bit_SaveToStk; {Guarda el valor bit, cargado actualmente en Z, a pila.} var stk: TPicRegisterBit; @@ -1963,7 +1830,7 @@ procedure TGenCodPic.bit_SaveToStk; stk.used := true; end; //////////////// Tipo Byte ///////////// -procedure TGenCodPic.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); +procedure TGenCodBas_PICBase.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); {Carga operando a registros de trabajo.} var Op: ^TOperand; @@ -2005,11 +1872,11 @@ procedure TGenCodPic.byte_LoadToRT(const OpPtr: pointer; modReturn: boolean); GenError('Not implemented.'); end; end; -procedure TGenCodPic.byte_DefineRegisters; +procedure TGenCodBas_PICBase.byte_DefineRegisters; begin //No es encesario, definir registros adicionales a W end; -procedure TGenCodPic.byte_SaveToStk; +procedure TGenCodBas_PICBase.byte_SaveToStk; var stk: TPicRegister; begin @@ -2019,7 +1886,7 @@ procedure TGenCodPic.byte_SaveToStk; _MOVWF(stk.offs);PutComm(';save W'); stk.used := true; end; -procedure TGenCodPic.byte_GetItem(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_GetItem(const OpPtr: pointer); //Función que devuelve el valor indexado var Op: ^TOperand; @@ -2043,15 +1910,15 @@ procedure TGenCodPic.byte_GetItem(const OpPtr: pointer); stVariab: begin SetResultExpres(arrVar.typ.refType, true); //Es array de bytes, o Char, devuelve Byte o Char LoadToRT(idx); //Lo deja en W - _ADDLW(arrVar.addr0); //agrega OFFSET - _MOVWF(04); //direcciona con FSR + _MOVLW(arrVar.addr0); //agrega OFFSET + _ADDWF(04, toF); _MOVF(0, toW); //lee indexado en W end; stExpres: begin SetResultExpres(arrVar.typ.refType, false); //Es array de bytes, o Char, devuelve Byte o Char LoadToRT(idx); //Lo deja en W - _ADDLW(arrVar.addr0); //agrega OFFSET - _MOVWF(04); //direcciona con FSR + _MOVLW(arrVar.addr0); //agrega OFFSET + _ADDWF(04, toF); _MOVF(0, toW); //lee indexado en W end; end; @@ -2064,7 +1931,7 @@ procedure TGenCodPic.byte_GetItem(const OpPtr: pointer); if not CaptureTok(')') then exit; end; end; -procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_SetItem(const OpPtr: pointer); //Función que fija un valor indexado var WithBrack: Boolean; @@ -2103,20 +1970,20 @@ procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); if (value.Sto = stConst) and (value.valInt=0) then begin //Caso especial, se pide asignar una constante cero _MOVF(idx.offs, toW); //índice - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _CLRF($00); //Pone a cero end else if value.Sto = stConst then begin //Es una constante cualquiera _MOVF(idx.offs, toW); //índice - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _MOVLW(value.valInt); _MOVWF($00); //Escribe valor end else if value.Sto = stVariab then begin //Es una variable - _MOVF(idx.offs, toW); //índice - _ADDLW(arrVar.addr0); //Dirección de inicio + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _MOVWF($04); //Direcciona _MOVF(value.offs, toW); _MOVWF($00); //Escribe valor @@ -2126,8 +1993,8 @@ procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); typWord.DefineRegister; //Para usar H _MOVWF(H.offs); //W->H salva H _MOVF(idx.offs, toW); //índice - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _MOVF(H.offs, toW); _MOVWF($00); //Escribe valor end; @@ -2138,19 +2005,19 @@ procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); //Sabemos que hay una expresión byte if (value.Sto = stConst) and (value.valInt=0) then begin //Caso especial, se pide asignar una constante cero - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _CLRF($00); //Pone a cero end else if value.Sto = stConst then begin //Es una constante cualquiera - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _MOVLW(value.valInt); _MOVWF($00); //Escribe valor end else if value.Sto = stVariab then begin //Es una variable - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(FSR.offs, toF); //Direcciona _MOVF(value.offs, toW); _MOVWF($00); //Escribe valor end else begin @@ -2159,8 +2026,8 @@ procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); _MOVWF(H.offs); //W->H salva valor a H rVar := GetVarByteFromStk; //toma referencia de la pila _MOVF(rVar.adrByte0.offs, toW); //índice - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF($04); //Direcciona + _MOVLW(arrVar.addr0); + _ADDWF(04, toF); //Direcciona _MOVF(H.offs, toW); _MOVWF($00); //Escribe valor FreeStkRegisterByte; //Para liberar @@ -2176,7 +2043,7 @@ procedure TGenCodPic.byte_SetItem(const OpPtr: pointer); if not CaptureTok(')') then exit; end; end; -procedure TGenCodPic.byte_ClearItems(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_ClearItems(const OpPtr: pointer); {Limpia el contenido de todo el arreglo} var Op: ^TOperand; @@ -2238,12 +2105,13 @@ procedure TGenCodPic.byte_ClearItems(const OpPtr: pointer); //Implementa lazo, usando W como índice _MOVLW(xvar.adrByte0.offs); //dirección inicial _MOVWF($04); //FSR - _MOVLW(256-xvar.typ.arrSize); + //_MOVLW(256-xvar.typ.arrSize); j1:= _PC; _CLRF($00); //Limpia [FSR] _INCF($04, toF); //Siguiente - _ADDLW(1); //W = W + 1 - _BTFSS(STATUS, _Z); + _MOVLW(xvar.adrByte0.offs+256-xvar.typ.arrSize); //End address + _SUBWF($04, toW); + _IFNZERO; _GOTO(j1); end; end; @@ -2251,7 +2119,7 @@ procedure TGenCodPic.byte_ClearItems(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.byte_bit(const OpPtr: pointer; nbit: byte); +procedure TGenCodBas_PICBase.byte_bit(const OpPtr: pointer; nbit: byte); //Implementa la operación del campo .bit# var xvar, tmpVar: TxpEleVar; @@ -2280,40 +2148,40 @@ procedure TGenCodPic.byte_bit(const OpPtr: pointer; nbit: byte); GenError('Syntax error.'); end; end; -procedure TGenCodPic.byte_bit0(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit0(const OpPtr: pointer); begin byte_bit(OpPtr, 0); end; -procedure TGenCodPic.byte_bit1(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit1(const OpPtr: pointer); begin byte_bit(OpPtr, 1); end; -procedure TGenCodPic.byte_bit2(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit2(const OpPtr: pointer); begin byte_bit(OpPtr, 2); end; -procedure TGenCodPic.byte_bit3(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit3(const OpPtr: pointer); begin byte_bit(OpPtr, 3); end; -procedure TGenCodPic.byte_bit4(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit4(const OpPtr: pointer); begin byte_bit(OpPtr, 4); end; -procedure TGenCodPic.byte_bit5(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit5(const OpPtr: pointer); begin byte_bit(OpPtr, 5); end; -procedure TGenCodPic.byte_bit6(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit6(const OpPtr: pointer); begin byte_bit(OpPtr, 6); end; -procedure TGenCodPic.byte_bit7(const OpPtr: pointer); +procedure TGenCodBas_PICBase.byte_bit7(const OpPtr: pointer); begin byte_bit(OpPtr, 7); end; //////////////// Tipo DWord ///////////// -procedure TGenCodPic.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); +procedure TGenCodBas_PICBase.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); {Carga el valor de una expresión a los registros de trabajo.} var Op: ^TOperand; @@ -2376,7 +2244,7 @@ procedure TGenCodPic.word_LoadToRT(const OpPtr: pointer; modReturn: boolean); GenError('Not implemented.'); end; end; -procedure TGenCodPic.word_DefineRegisters; +procedure TGenCodBas_PICBase.word_DefineRegisters; begin //Aparte de W, solo se requiere H if not H.assigned then begin @@ -2385,7 +2253,7 @@ procedure TGenCodPic.word_DefineRegisters; H.used := false; end; end; -procedure TGenCodPic.word_SaveToStk; +procedure TGenCodBas_PICBase.word_SaveToStk; var stk: TPicRegister; begin @@ -2404,7 +2272,7 @@ procedure TGenCodPic.word_SaveToStk; _MOVWF(stk.offs); stk.used := true; //marca end; -procedure TGenCodPic.word_GetItem(const OpPtr: pointer); +procedure TGenCodBas_PICBase.word_GetItem(const OpPtr: pointer); //Función que devuelve el valor indexado var Op: ^TOperand; @@ -2435,9 +2303,11 @@ procedure TGenCodPic.word_GetItem(const OpPtr: pointer); stVariab: begin SetResultExpres(arrVar.typ.refType, true); //Es array de word, devuelve word _BCF(STATUS, _C); - _RLF(idx.offs, toW); //Multiplica Idx por 2 - _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _RLF(idx.offs, toW); //Multiplica Idx por 2 _MOVWF(FSR.offs); //direcciona con FSR + _MOVLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _ADDWF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W _MOVWF(H.offs); //byte alto _DECF(FSR.offs, toF); @@ -2447,9 +2317,11 @@ procedure TGenCodPic.word_GetItem(const OpPtr: pointer); SetResultExpres(arrVar.typ.refType, false); //Es array de word, devuelve word _MOVWF(FSR.offs); //idx a FSR (usa como varaib. auxiliar) _BCF(STATUS, _C); - _RLF(FSR.offs, toW); //Multiplica Idx por 2 - _ADDLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _RLF(FSR.offs, toW); //Multiplica Idx por 2 _MOVWF(FSR.offs); //direcciona con FSR + _MOVLW(arrVar.addr0+1); //Agrega OFFSET + 1 + _ADDWF(FSR.offs, toF); + _MOVF(0, toW); //lee indexado en W _MOVWF(H.offs); //byte alto _DECF(FSR.offs, toF); @@ -2465,7 +2337,7 @@ procedure TGenCodPic.word_GetItem(const OpPtr: pointer); if not CaptureTok(')') then exit; end; end; -procedure TGenCodPic.word_SetItem(const OpPtr: pointer); +procedure TGenCodBas_PICBase.word_SetItem(const OpPtr: pointer); //Función que fija un valor indexado var WithBrack: Boolean; @@ -2523,8 +2395,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); //El valor a escribir, es una constante cualquiera _BCF(STATUS, _C); _RLF(idx.offs, toW); //índice * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona ////// Byte Bajo if value.LByte = 0 then begin _CLRF($00); @@ -2545,8 +2418,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); //Calcula dirfección de byte bajo _BCF(STATUS, _C); _RLF(idx.offs, toW); //índice * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona ////// Byte Bajo _MOVF(value.Loffs, toW); _MOVWF($00); //Escribe @@ -2563,8 +2437,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); //Calcula dirección de byte bajo _BCF(STATUS, _C); _RLF(idx.offs, toW); //índice * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio _MOVWF(FSR.offs); //Direcciona + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona ////// Byte Bajo _MOVF(aux.offs, toW); _MOVWF($00); //Escribe @@ -2582,9 +2457,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); //El valor a asignar, es una constante _MOVWF(FSR.offs); //Salva W. _BCF(STATUS, _C); - _RLF(FSR.offs, toW); //idx * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF(FSR.offs); //Direcciona a byte bajo + _RLF(FSR.offs, toF); //idx * 2 + _MOVLW(arrVar.addr0); + _ADDWF(FSR.offs, toF); //Direcciona a byte bajo //Byte bajo if value.LByte = 0 then begin _CLRF($00); //Pone a cero @@ -2603,9 +2478,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); end else if value.Sto = stVariab then begin _MOVWF(FSR.offs); //Salva W. _BCF(STATUS, _C); - _RLF(FSR.offs, toW); //idx * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF(FSR.offs); //Direcciona a byte bajo + _RLF(FSR.offs, toF); //idx * 2 + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona a byte bajo //Byte bajo _MOVF(value.Loffs, toW); _MOVWF($00); @@ -2621,9 +2496,9 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); rVar := GetVarByteFromStk; //toma referencia de la pila //Calcula dirección de byte bajo _BCF(STATUS, _C); - _RLF(rVar.adrByte0.offs, toW); //índice * 2 - _ADDLW(arrVar.addr0); //Dirección de inicio - _MOVWF(FSR.offs); //Direcciona + _RLF(rVar.adrByte0.offs, toF); //índice * 2 + _MOVLW(arrVar.addr0); //Dirección de inicio + _ADDWF(FSR.offs, toF); //Direcciona ////// Byte Bajo _MOVF(aux.offs, toW); _MOVWF($00); //Escribe @@ -2644,11 +2519,11 @@ procedure TGenCodPic.word_SetItem(const OpPtr: pointer); if not CaptureTok(')') then exit; end; end; -procedure TGenCodPic.word_ClearItems(const OpPtr: pointer); +procedure TGenCodBas_PICBase.word_ClearItems(const OpPtr: pointer); begin end; -procedure TGenCodPic.word_Low(const OpPtr: pointer); +procedure TGenCodBas_PICBase.word_Low(const OpPtr: pointer); {Acceso al byte de menor peso de un word.} var xvar, tmpVar: TxpEleVar; @@ -2674,7 +2549,7 @@ procedure TGenCodPic.word_Low(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.word_High(const OpPtr: pointer); +procedure TGenCodBas_PICBase.word_High(const OpPtr: pointer); {Acceso al byte de mayor peso de un word.} var xvar, tmpVar: TxpEleVar; @@ -2701,7 +2576,7 @@ procedure TGenCodPic.word_High(const OpPtr: pointer); end; end; //////////////// Tipo DWord ///////////// -procedure TGenCodPic.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); +procedure TGenCodBas_PICBase.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); {Carga el valor de una expresión a los registros de trabajo.} var Op: ^TOperand; @@ -2761,7 +2636,7 @@ procedure TGenCodPic.dword_LoadToRT(const OpPtr: pointer; modReturn: boolean); GenError('Not implemented.'); end; end; -procedure TGenCodPic.dword_DefineRegisters; +procedure TGenCodBas_PICBase.dword_DefineRegisters; begin //Aparte de W, se requieren H, E y U if not H.assigned then begin @@ -2780,7 +2655,7 @@ procedure TGenCodPic.dword_DefineRegisters; U.used := false; end; end; -procedure TGenCodPic.dword_SaveToStk; +procedure TGenCodBas_PICBase.dword_SaveToStk; var stk: TPicRegister; begin @@ -2815,7 +2690,7 @@ procedure TGenCodPic.dword_SaveToStk; _MOVWF(stk.offs); stk.used := true; //marca end; -procedure TGenCodPic.dword_Low(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_Low(const OpPtr: pointer); {Acceso al byte de menor peso de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2841,7 +2716,7 @@ procedure TGenCodPic.dword_Low(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.dword_High(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_High(const OpPtr: pointer); {Acceso al byte de mayor peso de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2867,7 +2742,7 @@ procedure TGenCodPic.dword_High(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.dword_Extra(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_Extra(const OpPtr: pointer); {Acceso al byte 2 de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2893,7 +2768,7 @@ procedure TGenCodPic.dword_Extra(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.dword_Ultra(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_Ultra(const OpPtr: pointer); {Acceso al byte 3 de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2919,7 +2794,7 @@ procedure TGenCodPic.dword_Ultra(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.dword_LowWord(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_LowWord(const OpPtr: pointer); {Acceso al word de menor peso de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2946,7 +2821,7 @@ procedure TGenCodPic.dword_LowWord(const OpPtr: pointer); GenError('Syntax error.'); end; end; -procedure TGenCodPic.dword_HighWord(const OpPtr: pointer); +procedure TGenCodBas_PICBase.dword_HighWord(const OpPtr: pointer); {Acceso al word de mayor peso de un Dword.} var xvar, tmpVar: TxpEleVar; @@ -2973,8 +2848,18 @@ procedure TGenCodPic.dword_HighWord(const OpPtr: pointer); GenError('Syntax error.'); end; end; +procedure TGenCodBas_PICBase.GenCodPicReqStopCodeGen; +{Required Stop the Code generation} +begin + posFlash := pic.iFlash; //Probably not the best way. +end; +procedure TGenCodBas_PICBase.GenCodPicReqStartCodeGen; +{Required Start the Code generation} +begin + pic.iFlash := posFlash; //Probably not the best way. +end; //Inicialización -procedure TGenCodPic.StartRegs; +procedure TGenCodBas_PICBase.StartRegs; {Inicia los registros de trabajo en la lista.} begin listRegAux.Clear; @@ -2990,11 +2875,12 @@ procedure TGenCodPic.StartRegs; U := CreateRegisterByte(prtWorkReg); //Puede salir con error end; -constructor TGenCodPic.Create; +constructor TGenCodBas_PICBase.Create; begin inherited Create; - pic := TPIC16.Create; - lastOpCode := _Inval; + OnReqStartCodeGen:=@GenCodPicReqStartCodeGen; + OnReqStopCodeGen:=@GenCodPicReqStopCodeGen; + pic := TPICBase.Create; ///////////Crea tipos ClearTypes; typNull := CreateSysType('null',t_boolean,-1); @@ -3120,7 +3006,7 @@ constructor TGenCodPic.Create; FSR.addr := $04; FSR.assigned := true; //ya está asignado desde el principio end; -destructor TGenCodPic.Destroy; +destructor TGenCodBas_PICBase.Destroy; begin INDF.Destroy; FSR.Destroy; diff --git a/Source/GenCod_PIC10.pas b/Source/GenCod_PIC10.pas new file mode 100644 index 00000000..53cd1ac8 --- /dev/null +++ b/Source/GenCod_PIC10.pas @@ -0,0 +1,4128 @@ +{ +Implementación de un compilador sencillo de Pascal para microcontroladores PIC de +rango medio. +Esta implementación no permitirá recursividad, por las limitaciones de recursos de los +dispositivos más pequeños, y por la dificultad adicional en la conmutación de bancos +para los dispositivos más grandes. +El compilador está orientado a uso de registros (solo hay uno) y memoria RAM, pero se +implementa una especie de estructura de pila para la evaluación de expresiones +aritméticas con cierta complejidad y para el paso de parámetros a las funciones. +Solo se manejan datos de tipo bit, boolean, byte y word, y operaciones sencillas. +} +{La arquitectura definida aquí contempla: + +Un registro de trabajo W, de 8 bits (el acumulador del PIC). +Dos registros adicionales H y L de 8 bits cada uno (Creados a demanda). + +Los resultados de una expresión se dejarán en: + +1. En Bit Z o C, de STATUS -> Si el resultado es de tipo bit o boolean. +2. El acumulador W -> Si el resultado es de tipo byte o char. +3. Los registros (H,w) -> Si el resultado es tipo word. +4. Los registros (U,E,H,w) -> Si el resultado es tipo dword. + +Opcionalmente, si estos registros ya están ocupados, se guardan primero en la pila, o se +usan otros registros auxiliares. + +Despues de ejecutar alguna operación booleana que devuelva una expresión, se +actualizan las banderas: BooleanBit y BooleanInverted, que implican que: +* Si BooleanInverted es TRUE, significa que la lógica de C o Z está invertida. +* La bandera BooleanBit, indica si el resultado se deja en C o Z. + +Por normas de Xpres, se debe considerar que: +* Todas las operaciones recibe sus dos parámetros en las variables p1 y p2^. +* El resultado de cualquier expresión se debe dejar indicado en el objeto "res". +* Los valores enteros y enteros sin signo se cargan en valInt +* Los valores booleanos se cargan en "valBool" +* Los valores string se cargan en "valStr" + +Las rutinas de operación, deben devolver su resultado en "res". +Para mayor información, consultar la doc. técnica. + } +unit GenCod_PIC10; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, Graphics, LCLType, LCLProc, + SynFacilBasic, XpresTypesPIC, XpresElementsPIC, Pic10Utils, GenCodBas_PIC10, + CompBase, Globales, MisUtils, XpresBas; +type + { TGenCod } + TGenCod = class(TGenCodBas) + private + procedure codif_delay_ms2(fun: TxpEleFun); + procedure DefineArray(etyp: TxpEleType); + procedure DefinePointer(etyp: TxpEleType); + procedure ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ValidRAMaddr(addr: integer); + private //Operaciones con Bit +// f_byteXbyte_byte: TxpEleFun; //índice para función + f_delay_msB: TxpELeFun; + f_delay_msW: TxpELeFun; + f_byte_mul_byte_16: TxpEleFun; //índice para función + f_byte_div_byte: TxpEleFun; //índice para función + f_word_mul_word_16: TxpEleFun; //índice para función + procedure byte_div_byte(fun: TxpEleFun); + procedure mul_byte_16(fun: TxpEleFun); + procedure CopyInvert_C_to_Z; + procedure fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure ROB_bit_asig_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_and_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_or_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_or_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_xor_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_xor_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_equ_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_equ_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_dif_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_dif_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROU_not_bit(Opr: TxpOperator; SetRes: boolean); + procedure ROU_not_byte(Opr: TxpOperator; SetRes: boolean); + procedure ROU_address(Opr: TxpOperator; SetRes: boolean); + + procedure ROB_word_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_umulword_word(Opt: TxpOperation; SetRes: boolean); + procedure word_mul_word_16(fun: TxpEleFun); + private //Operaciones con boolean + procedure ROB_bool_asig_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROU_not_bool(Opr: TxpOperator; SetRes: boolean); + procedure ROB_bool_and_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_or_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_xor_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_equ_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_dif_bool(Opt: TxpOperation; SetRes: boolean); + protected //Operaciones con byte + procedure ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_sub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_add_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_and_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_or_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_or_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_xor_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_xor_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_equal_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_difer_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_difer_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_gequ_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); + procedure CodifShift_by_Cnt(target, counter: TPicRegister; toRight: boolean); + procedure ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con Word + procedure ROB_word_asig_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_equal_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_difer_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con DWord + procedure ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_difer_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_equal_dword(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con Char + procedure ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_char_difer_char(Opt: TxpOperation; SetRes: boolean); + + procedure ROB_string_add_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_string_add_string(Opt: TxpOperation; SetRes: boolean); + protected //Operaciones con punteros + procedure ROB_pointer_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_pointer_sub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROU_derefPointer(Opr: TxpOperator; SetRes: boolean); + private //Funciones internas. + procedure codif_1mseg; + procedure codif_delay_ms(fun: TxpEleFun); + procedure expr_end(posExpres: TPosExpres); + procedure expr_start; + procedure fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); + protected + procedure Cod_StartProgram; + procedure Cod_EndProgram; + procedure CreateSystemElements; + public + procedure StartSyntax; + procedure DefCompiler; + procedure DefPointerArithmetic(etyp: TxpEleType); + end; + + procedure SetLanguage; +implementation +var + MSG_NOT_IMPLEM, MSG_INVAL_PARTYP, MSG_UNSUPPORTED, MSG_CANNOT_COMPL, + ER_INV_MAD_DEV, ER_INV_MEMADDR: string; + +procedure SetLanguage; +begin + GenCodBas_PIC10.SetLanguage; + {$I ..\language\tra_GenCod.pas} +end; +procedure TGenCod.CopyInvert_C_to_Z; +begin + //El resultado está en C (invertido), hay que pasarlo a Z + kMOVLW($01 << _C); //carga máscara de C + _ANDWF(_STATUS, toW); //el resultado está en Z, corregido en lógica. + InvertedFromC := true; //Indica que se ha hecho Z = 'C. para que se pueda optimizar +end; +////////////rutinas obligatorias +procedure TGenCod.Cod_StartProgram; +//Codifica la parte inicial del programa +begin + //Code('.CODE'); //inicia la sección de código +end; +procedure TGenCod.Cod_EndProgram; +//Codifica la parte inicial del programa +begin + _SLEEP(); //agrega instrucción final + //Code('END'); //inicia la sección de código +end; +procedure TGenCod.expr_start; +//Se ejecuta siempre al iniciar el procesamiento de una expresión. +begin + //Inicia banderas de estado para empezar a calcular una expresión + W.used := false; //Su ciclo de vida es de instrucción + Z.used := false; //Su ciclo de vida es de instrucción +// H.used := false; //Su ciclo de vida es de instrucción + RTstate := nil; //Inicia con los RT libres. + //Limpia tabla de variables temporales + varFields.Clear; + //Guarda información de ubicación, en la ubicación actual + pic.addPosInformation(cIn.curCon.row, cIn.curCon.col, cIn.curCon.idCtx); +end; +procedure TGenCod.expr_end(posExpres: TPosExpres); +//Se ejecuta al final de una expresión, si es que no ha habido error. +begin + if exprLevel = 1 then begin //el último nivel +// Code(' ;fin expres'); + end; + //Muestra informa +end; +////////////operaciones con Bit y Boolean +{$I .\GenCod.inc} +//////////// Operaciones con Byte +procedure TGenCod.ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Realiza la asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //caso especial + kCLRF(byte1); + end else begin + kMOVLW(value2); + kMOVWF(byte1); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kMOVWF(byte1); + end; + stExpres: begin //ya está en w + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + if value2=0 then begin + //caso especial + kCLRF(INDF.addr); + end else begin + kMOVLW(value2); + kMOVWF(INDF.addr); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + kMOVWF(INDF.addr); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //Opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Caso especial de asignación a puntero desreferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + if value2=0 then begin + //caso especial + kCLRF(INDF.addr); + end else begin + kMOVLW(value2); + kMOVWF(INDF.addr); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + kMOVWF(INDF.addr); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Caso especial de asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVLW(value2); + kADDWF(byte1, toF); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kADDWF(byte1, toF); + end; + stExpres: begin //ya está en w + kADDWF(byte1, toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _ADDWF(0, toF); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _ADDWF(0, toF); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _ADDWF(0, toF); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + //Caso especial de asignación a puntero dereferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _ADDWF(0, toF); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _ADDWF(0, toF); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _ADDWF(0, toF); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Caso especial de asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVLW(value2); + kSUBWF(byte1, toF); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kSUBWF(byte1, toF); + end; + stExpres: begin //ya está en w + kSUBWF(byte1, toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _SUBWF(0, toF); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _SUBWF(0, toF); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _SUBWF(0, toF); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + //Caso especial de asignación a puntero dereferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _SUBWF(0, toF); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _SUBWF(0, toF); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _SUBWF(0, toF); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + SetROBResultConst_byte(value1+value2); //puede generar error + end; + stConst_Variab: begin + if value1 = 0 then begin + //Caso especial + SetROBResultVariab(p2^.rVar); //devuelve la misma variable + exit; + end else if value1 = 1 then begin + //Caso especial + SetROBResultExpres_byte(Opt); + kINCF(byte2, toW); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + kADDWF(byte2, toW); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //guarda temporalmente en aux + kMOVLW(value1); + kADDWF(aux.addr, toW); //deja en W + aux.used := false; + end; + stVariab_Const: begin + ExchangeP1_P2; + ROB_byte_add_byte(Opt, true); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kADDWF(byte1, toW); //deja en W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDWF(byte1, toW); //deja en W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //guarda temporalmente en aux + kMOVLW(value2); + kADDWF(aux.addr, toW); //deja en W + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDWF(byte2, toW); //deja en W + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //La expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kADDWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_add_word(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stExpres_Expres:begin + {Este es el único caso que no se puede invertir, por la posición de los operandos en + la pila.} + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_add_word(Opt, SetRes); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + //Para los otros casos, funciona + ExchangeP1_P2; //Invierte los operandos + ROB_word_add_byte(Opt, SetRes); //Y llama a la función opuesta + end; +end; +procedure TGenCod.ROB_byte_sub_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //suma de dos constantes. Caso especial + SetROBResultConst_byte(value1-value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + kSUBWF(byte2, toW); //F - W -> W (value2 - value1)->W + aux := GetAuxRegisterByte; + kCLRF(aux.addr); //Usa temporalmente + kSUBWF(aux.addr, toW); //Invierte W: 0 - W -> W + aux.used := false; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kMOVLW(value1); + kSUBWF(aux.addr, toW); //aux - value1 -> W + kCLRF(aux.addr); //Usa temporalmente + kSUBWF(aux.addr, toW); //Invierte W: 0 - W -> W + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); + kMOVLW(value2); + kSUBWF(byte1, toW); //F - W -> W + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kSUBWF(byte1, toW); //F - W -> W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBWF(byte1, toW); //F - W -> W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kMOVLW(value2); + kSUBWF(aux.addr, toW); //W - value2 -> value2 + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBWF(byte2, toW); //byte2 - W -> W + aux := GetAuxRegisterByte; + kCLRF(aux.addr); //Usa temporalmente + kSUBWF(aux.addr, toW); //Invierte W: 0 - W -> W + aux.used := false; + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kSUBWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.mul_byte_16(fun: TxpEleFun); +//E * W -> [H:E] Usa registros: W,H,E,U +//Basado en código de Andrew Warren http://www.piclist.com +var + LOOP: Word; +begin + typDWord.DefineRegister; //Asegura que exista W,H,E,U + _CLRF (H.offs); + _CLRF (U.offs); + _BSF (U.offs,3); //8->U + _RRF (E.offs,toF); +LOOP:=_PC; + _BTFSC (_STATUS,0); + _ADDWF (H.offs,toF); + _RRF (H.offs,toF); + _RRF (E.offs,toF); + _DECFSZ(U.offs, toF); + _GOTO (LOOP); + _RETLW(0); //En la mayoría de modelos no existe _RETURN. +end; +procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end else if value1=1 then begin //caso especial + SetROBResultVariab(p2^.rVar); + exit; + end else if value1=2 then begin + SetROBResultExpres_word(Opt); + _BANKSEL(H.bank); + _CLRF(H.offs); + _BCF(_STATUS, _C); + kRLF(byte2, toW); + _BANKSEL(H.bank); + _RLF(H.offs, toF); + exit; + end; + SetROBResultExpres_word(Opt); + kMOVF(byte2, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVLW(value1); + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_word(opt); + kMOVWF(E.addr); + kMOVLW(value1); + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Const: begin + SetROBResultExpres_word(opt); + kMOVF(byte1, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVLW(value2); + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVF(byte2, toW); + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p2 -> E + kMOVF(byte1, toW); //p1 -> W + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p1 -> E + kMOVLW(value2); //p2 -> W + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p1 -> E + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kMOVWF(E.addr); //p2 -> E + kMOVF(rVar.addr0, toW); //p1 -> W + _CALL(f_byte_mul_byte_16.adrr); + kMOVF(E.addr, toW); + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_mul_byte_16); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else if value1*value2 < $10000 then begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end else begin + SetROBResultConst_dword((value1*value2) and $FFFFFFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; +// stConst_Variab: begin +// if value1=0 then begin //caso especial +// SetROBResultConst_byte(0); +// exit; +// end else if value1=1 then begin //caso especial +// SetROBResultVariab(p2^.rVar); +// exit; +// end else if value1=2 then begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(H.bank); +// _CLRF(H.offs); +// _BCF(STATUS, _C); +// _BANKSEL(P2^.bank); +// _RLF(p2^.offs, toW); +// _BANKSEL(H.bank); +// _RLF(H.offs, toF); +// exit; +// end; +// SetROBResultExpres_word(Opt); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Const: begin +// SetROBResultExpres_word(opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value2); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Variab:begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Const: begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// kMOVLW(value2); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Expres:begin +// SetROBResultExpres_word(Opt); +// //la expresión p1 debe estar salvada y p2 en el acumulador +// rVar := GetVarByteFromStk; +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(rVar.addr0.bank); +// _MOVF(rVar.addr0.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido +// {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una +// variable) temporal, si se tuviera una rutina de multiplicación que compilara a +// partir de la direccion de una variable (en este caso de la pila, que se puede +// modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} +// AddCallerTo(f_byte_mul_byte_16); +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.byte_div_byte(fun: TxpEleFun); +//H div W -> E Usa registros: W,H,E,U +//H mod W -> U Usa registros: W,H,E,U +//Basado en código del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" E. Palacios, F. Remiro y L.J. López +var + Arit_DivideBit8: Word; + aux, aux2: TPicRegister; +begin + typDWord.DefineRegister; //Asegura que exista W,H,E,U + aux := GetAuxRegisterByte; //Pide registro auxiliar + aux2 := GetAuxRegisterByte; //Pide registro auxiliar + _MOVWF (aux.offs); + _clrf (E.offs); //En principio el resultado es cero. + _clrf (U.offs); + kMOVLW (8); //Carga el contador. + _movwf (aux2.offs); +Arit_DivideBit8 := _PC; + _rlf (H.offs,toF); + _rlf (U.offs,toF); // (U.offs) contiene el dividendo parcial. + _movf (aux.offs,toW); + _subwf (U.offs,toW); //Compara dividendo parcial y divisor. + _btfsc (_STATUS,_C); //Si (dividendo parcial)>(divisor) + _movwf (U.offs); //(dividendo parcial) - (divisor) --> (dividendo parcial) + _rlf (E.offs,toF); //Desplaza el cociente introduciendo el bit apropiado. + _decfsz (aux2.offs,toF); + _goto (Arit_DivideBit8); + //_movf (E.offs,toW); //Devuelve también en (W) + _RETLW(0); //En la mayoría de modelos no existe _RETURN + aux2.used := false; + aux.used := false; +end; +procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultConst_byte(value1 div value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //guarda divisor + + kMOVLW(value1); + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Const: begin + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVLW(value2); + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + //guarda divisor + _BANKSEL(E.bank); + _MOVWF(E.offs); + //p1 -> H + kMOVF(byte1, toW); //p1 -> W + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + _BANKSEL(H.bank); + _MOVWF(H.offs); //p1 -> H + kMOVLW(value2); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + _BANKSEL(H.bank); + _MOVWF(H.offs); //p1 -> H + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + //guarda divisor + _BANKSEL(E.bank); + _MOVWF(E.offs); + //pila -> H + kMOVF(rVar.addr0, toW); //p1 -> W + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + //divisor -> W + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //p2 -> E + + _CALL(f_byte_div_byte.adrr); + kMOVF(E.addr, toW); + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_div_byte); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const : begin //producto de dos constantes. Caso especial + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultConst_byte(value1 mod value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + kMOVWF(H.addr); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + //¿Y el banco de salida? + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVWF(E.addr); //guarda divisor + kMOVLW(value1); + kMOVWF(H.addr); //dividendo + + kMOVF(E.addr, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Const: begin + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + kMOVWF(H.addr); + kMOVLW(value2); + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + kMOVWF(H.addr); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + //guarda divisor + kMOVWF(E.addr); + //p1 -> H + kMOVF(byte1, toW); //p1 -> W + kMOVWF(H.addr); //dividendo + + kMOVF(E.addr, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVWF(H.addr); //p1 -> H + kMOVLW(value2); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kMOVWF(H.addr); //p1 -> H + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + //guarda divisor + kMOVWF(E.addr); + //pila -> H + kMOVF(rVar.addr0, toW); //p1 -> W + kMOVWF(H.addr); //dividendo + //divisor -> W + kMOVF(E.addr, toW); //p2 -> E + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_div_byte); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; + +procedure TGenCod.ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); +var + tmp, aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 > value2); + end; + stConst_Variab: begin + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVLW(value1); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Guarda W temporalmente + varStkByte.addr0 := aux.addr; //Usa la variable temporal varStkByte para direccionar a aux + p2^.SetAsVariab(varStkByte); //Convierte Operando a variable + {Luego el caso es similar a stConst_Variab y dedemos aegurarnos que + en este caso del ROB no se use ni aux, ni varStkByte.} + ROB_byte_great_byte(Opt, true); + aux.used := false; + end; + end; + stVariab_Const: begin + if value2 = 255 then begin + //Nada es mayor que 255 + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + kMOVLW(value2); + kMOVWF(aux.addr); + //Ahora es como stVariab_Variab + kMOVF(byte1, toW); + kSUBWF(aux.addr, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + aux.used := false; + end; + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVF(byte1, toW); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; //Se pide registro auxiliar + kMOVWF(tmp.addr); //guarda resultado de expresión + //Ahora es como stVariab_Variab + kMOVF(byte1, toW); + kSUBWF(tmp.addr, toW); //Si p1 > tmp: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + tmp.used := false; //libera + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 255 then begin + //Nada es mayor que 255 + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + SetROBResultExpres_bool(Opt, true); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p1) + kMOVLW(value2+1); //Carga p2 + kSUBWF(aux.addr, toW); // + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + aux.used := false; + end; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + stExpres_Expres:begin + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_great_byte(Opt, true); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + //A < B es lo mismo que B > A + case stoOperation of + stExpres_Expres:begin + {Este es el único caso que no se puede invertir, por la posición de los operandos en + la pila.} + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_less_byte(Opt, SetRes); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + //Para los otros casos, funciona + ExchangeP1_P2; + ROB_byte_great_byte(Opt, SetRes); + end; +end; +procedure TGenCod.ROB_byte_gequ_byte(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_less_byte(Opt, SetRes); + res.Invert; +end; +procedure TGenCod.ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_great_byte(Opt, SetRes); + res.Invert; +end; +procedure TGenCod.CodifShift_by_Cnt(target, counter: TPicRegister; toRight: boolean); +{Desplaza el registro "target", las veces indicadas en el registro "counter". +Modifica "target" y "counter".} +var + loop1: Word; + igot: integer; + bnkExp1, bnkExp2: Byte; +begin + {La implementación de este código es similar al de un lazao WHILE.} + bnkExp1 := CurrBank; //Guarda el banco antes de la expresión + loop1 := _PC; + kMOVF(counter.addr, toW); //¿Igual a 0? + bnkExp2 := CurrBank; //Guarda el banco despues de la expresión + kIF_NZERO(igot); + if toRight then kSHIFTR(target.addr, toF) else kSHIFTL(target.addr, toF); + kDECF(counter.addr, toF); + _BANKSEL(bnkExp1); //para que la condic. se ejecute siempre en el mismo banco. + kGOTO(loop1); + kIF_NZERO_END(igot); + CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE +end; +procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la derecha +var + aux, cnt: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_byte(value1 >> value2); + end; +// stConst_Variab: begin +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTR(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + //Caso general + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, true); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVF(byte2, toW); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, true); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + //solo devuelve lo mismo en W + end else if value2 = 1 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //devuelve desplazado en W + aux.used := false; + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, true); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// end; +// stExpres_Expres:begin +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la izquierda +var + aux, cnt: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_byte(value1 << value2); + end; +// stConst_Variab: begin +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTL(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, false); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + _BANKSEL(aux.bank); + _MOVWF(aux.offs); + //copia p2 a W + kMOVF(byte2, toW); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, false); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + //solo devuelve lo mismo en W + end else if value2 = 1 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //devuelve desplazado en W + aux.used := false; + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + cnt := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + kMOVWF(cnt.addr); + //lazo de rotación + CodifShift_by_Cnt(aux, cnt, false); + kMOVF(aux.addr, toW); + aux.used := false; + cnt.used := false; + end; + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// end; +// stExpres_Expres:begin +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +//////////// Operaciones con Word +procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); + procedure codVariab_Const; + {Codifica el caso variable (p1) - constante (p2)} + var + sale: integer; + aux: TPicRegister; + begin + if value2 = $FFFF then begin + //Nada es mayor que $FFFF + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + end else begin + //Compara byte alto + //_MOVF(byte1H, toW); + //_SUBLW(value2H); //p2-p1 + aux := GetAuxRegisterByte; + kMOVLW(value2H); + kMOVWF(aux.addr); + kMOVF(byte1H, toW); + kSUBWF(aux.addr, toW); + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + //kMOVF(byte1L, toW); + //_SUBLW(value2L); //p2-p1 + kMOVLW(value2L); + kMOVWF(aux.addr); + kMOVF(byte1L, toW); + kSUBWF(aux.addr, toW); + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + aux.used := false; + end; + end; + procedure codVariab_Variab; + var + sale: integer; + begin + //Compara byte alto + kMOVF(byte1H, toW); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + kSUBWF(byte2L,toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; +var + tmp, aux: TPicRegister; + sale: integer; + varTmp: TxpEleVar; +begin + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 > value2); + end; + stConst_Variab: begin + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + {No se define realmente el mensaje (si es con TRUE o FALSE), porque + ROB_word_great_word(), es también llamado, por Oper_word_lequ_word para con + lógica invertida} + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte alto + kMOVLW(value1H); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVLW(value1L); + kSUBWF(byte2L,toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó p2 esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVLW(value1H); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVLW(value1L); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + tmp.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + codVariab_Const; + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + codVariab_Variab; + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVF(byte1H, toW); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 + tmp.used := false; +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + AddCallerTo(E); //Declare use + _MOVWF(E.offs); //guarda W + varTmp := NewTmpVarWord(E, H); //Crea variable temporal + p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable + codVariab_Const; //Lo evalúa como stVariab_Const + varTmp.Destroy; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + AddCallerTo(E); //Declare use + _MOVWF(E.offs); //guarda W + varTmp := NewTmpVarWord(E, H); //Crea variable temporal + p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable + codVariab_Variab; //Lo evalúa como stVariab_Variab; + varTmp.Destroy; + end; + stExpres_Expres:begin + //La expresión p1, debe estar salvada y p2 en (H,W) + p1^.SetAsVariab(GetVarWordFromStk); + //Luego el caso es similar a variable-expresión + ROB_word_great_word(Opt, SetRes); + FreeStkRegisterWord; + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + if value1+value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else begin + SetROBResultConst_word(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); +{ aux := GetUnusedByteRegister; //Pide un registro libre + kMOVLW(value1L); //Carga menos peso del dato 1 + _addwf(byte2L,toW); //Suma menos peso del dato 2 + _movwf(aux); //Almacena el resultado + kMOVLW(value1H); //Carga más peso del dato 1 + _btfsc(STATUS,_C); //Hubo acarreo anterior? + _addlw(1); //Si, suma 1 al acumulador + _addwf(byte2H,toW); //Suma más peso del dato 2 + _movwf(H); //Guarda el resultado + _movf(aux,toW); //deja byte bajo en W + aux.Used := false; +} + //versión más corta que solo usa H, por validar + kMOVLW(value1H); //Carga más peso del dato 1 + kADDWF(byte2H, toW); //Suma más peso del dato 2 + _movwf(H.offs); //Guarda el resultado + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value1H); //Carga más peso del dato 1 + _addwf(H.offs,toF); //Suma y guarda + kMOVLW(value1L); //Carga menos peso del dato 1 + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVLW(value2H); //Carga más peso del dato 1 + kADDWF(byte1H, toW); //Suma más peso del dato 2 + _MOVWF(H.offs); //Guarda el resultado + kMOVLW(value2L); //Carga menos peso del dato 1 + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga mayor peso del dato 1 + kADDWF(byte2H, toW); //Suma mayor peso del dato 2 + _MOVWF(H.offs); //Guarda mayor peso del resultado + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte bajo + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _addwf(H.offs,toF); //Suma y guarda + //Siguiente byte + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value2H); //Carga más peso del dato 1 + _addwf(H.offs,toF); //Suma y guarda + kMOVLW(value2L); //Carga menos peso del dato 1 + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVF(byte2H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _addwf(H.offs,toF); //Suma y guarda + kMOVF(byte2L, toW); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_add_word(Opt, SetRes); + FreeStkRegisterWord; //libera pila, obtiene dirección + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); +var + aux, L: TPicRegister; +begin + case stoOperation of + stConst_Const: begin + if value1+value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else begin + SetROBResultConst_word(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); + //versión más corta que solo usa _H, por validar + kMOVLW(value1H); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value1H); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); + kMOVLW(value1L); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); //se cambia primero el banco por si acaso + _MOVWF(H.offs); //Guarda el resultado + kMOVLW(value2L); + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (_H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte de expresión + kMOVF(byte1H, toW); //Carga Hbyte del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); //Lo deja para devolver en H + _BANKSEL(aux.bank); + _MOVF(aux.offs,toW); //recupera byte de expresión + kADDWF(byte1L,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + L := GetAuxRegisterByte; + kMOVWF(L.addr); //Salva W + kMOVLW(value2); + kADDWF(L.addr, toW); //Suma byte de menor peso + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + L.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + kADDWF(byte2L,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_add_byte(Opt, SetRes); + FreeStkRegisterWord; //libera pila + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); +var + aux, aux2: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + if value1-value2 < 0 then begin + genError('Numeric value exceeds a word range.'); + exit; + end; + if value1-value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1-value2); + end else begin + SetROBResultConst_word(value1-value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; + kMOVLW(value1H); + kMOVWF(aux.addr); + kMOVF(byte2H, toW); + kSUBWF(aux.addr, toW); + kMOVWF(H.addr); + + kMOVLW(value1L); + kMOVWF(aux.addr); + kMOVF(byte2L, toW); + kSUBWF(aux.addr, toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; + aux2 := GetAuxRegisterByte; + _MOVWF(aux.offs); //Salva W + //_movf (H.offs,toW); //p2 -> w + //_SUBLW(value1H); //p1 - W -W + kMOVLW(value1H); + kMOVWF(aux2.addr); + kMOVF(H.addr, toW); + kSUBWF(aux2.addr, toW); + _movwf(H.offs); + //_movf (aux.offs,toW); //p2-W + //_SUBLW(value1L); //p1-W->w + kMOVLW(value1L); + kMOVWF(aux2.addr); + kMOVF(aux.addr, toW); + kSUBWF(aux2.addr, toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + aux2.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVLW(value2H); + kSUBWF(byte1H,toW); + _movwf(H.offs); + kMOVLW(value2L); + kSUBWF(byte1L,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + end; + stVariab_Variab:begin //p1 - p2 + SetROBResultExpres_word(Opt); + kMOVF (byte2H, toW); + kSUBWF(byte1H, toW); + _movwf(H.offs); + kMOVF (byte2L, toW); + kSUBWF(byte1L,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + _movf (H.offs,toW); + kSUBWF(byte1H, toW); + _movwf(H.offs); + _movf (aux.offs,toW); + kSUBWF(byte1L,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + kMOVLW(value2H); + _subwf(H.offs, toF); + kMOVLW(value2L); + _subwf(aux.offs,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + kMOVF(byte2H, toW); + _subwf(H.offs, toF); + kMOVF(byte2L, toW); + _subwf(aux.offs,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_sub_word(Opt, SetRes); + FreeStkRegisterWord; //libera pila, obtiene dirección + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.word_mul_word_16(fun: TxpEleFun); +var + SYSTMP00, SYSTMP01, SYSTMP02, aux: TPicRegister; + MUL16LOOP: Word; +begin + //Multiplicaicón; 16bits X 16bits -> 16bits + //[H_W] = [H_W] x [E_U] + // RES = OP_A x OP_B + //SYSTMP00 variable temporal. Contiene RES.LOW (resultado.LOW de la multiplicación) + //SYSTMP01 variable temporal. Contiene OP_A.LOW (inicialmente W) + //SYSTMP02 variable temporal. Contiene OP_A.HIGH (inicialmente _H) + //_H contine durante todo el bucle de multiplicación la parte alta de resultado (RES.HIGH) + StartCodeSub(fun); //inicia codificación + typWord.DefineRegister; //Asegura que exista H,W. + SYSTMP00 := GetAuxRegisterByte; //Pide un registro libre + SYSTMP01 := GetAuxRegisterByte; //Pide un registro libre + SYSTMP02 := GetAuxRegisterByte; //Pide un registro libre + aux := GetAuxRegisterByte; + if HayError then exit; + _CLRF (SYSTMP00.offs); //Clear RES.LOW + _MOVWF (SYSTMP01.offs); //OP_A.LOW := W + _MOVF (H.offs,toW ); //OP_A.HIGH := H.offs + _MOVWF (SYSTMP02.offs); + _CLRF (H.offs); //Clear RES.HIGH +MUL16LOOP := _PC; + _BTFSS (U.offs,0); //Si (OP_B.0=1) then RES+=OP_A + _GOTO (_PC+7); //END_IF_1 + _MOVF (SYSTMP01.offs,toW); + _ADDWF (SYSTMP00.offs,toF); + _MOVF (SYSTMP02.offs,toW); + kMOVWF(aux.addr); //Salva W por si necesita incementarse. No cambia banderas. + _BTFSC (_STATUS,0 ); + _INCF(aux.offs, toW); //W=W+1. El banco aquí, debe ser el de "aux". + _ADDWF (H.offs,toF); +// END_IF_1: + _BCF (_STATUS, 0); //STATUS.C := 0 + _RRF (E.offs, toF ); //OP_B>>1 + _RRF (U.offs, toF ); + _BCF (_STATUS, 0); //STATUS.C := 0 + _RLF (SYSTMP01.offs,toF); //OP_A<<1 + _RLF (SYSTMP02.offs,toF); + _MOVF (E.offs, toW); //Si (OP_B>0) then goto MUL16LOOP + _IORWF (U.offs, toW); + _BTFSS (_STATUS, 2); + _GOTO (MUL16LOOP); //OP_B>0 + _MOVF (SYSTMP00.offs, toW); //i_RETURN RES.LOW to toW + SYSTMP00.used := false; + SYSTMP01.used := false; + SYSTMP02.used := false; + aux.used := false; + EndCodeSub; //termina codificación +end; + +//////////// Operaciones con Dword +procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + varTmp: TxpEleVar; +begin + case stoOperation of + stConst_Const: begin + if value1+value2 < $FF then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else if value1+value2 < $FFFF then begin + //Optimiza + SetROBResultConst_word(value1+value2); + end else begin + SetROBResultConst_dword(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_dword(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + if HayError then exit; + {Se usará la rutina dword+=dword. Tal vez se pueda optimizar en espacio, pero + se complica.} + //Primero se mueve la constante a una variable con los RT + kMOVLW(value1L); + kMOVWF(aux.addr); + kMOVLW(value1H); + kMOVWF(H.addr); + kMOVLW(value1E); + kMOVWF(E.addr); + kMOVLW(value1U); + kMOVWF(U.addr); + //Creamos ahora una variable con los RT + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); + p1^.SetAsVariab(varTmp); //Actualiza Op1 + //Usamos la rutina: dword+=dword + ROB_dword_aadd_dword(Opt, False); //Solo se quiere el código + kMOVF (aux.addr, toW); //Deja L en W + varTmp.Destroy; + aux.used := false; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + if SetRes then SetROBResultExpres_dword(Opt); //Se fija aquí el resultado + //K + WHEU -> WHEU, se puede manejar como asignación con sums + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //guarda W + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal, con los RT + p2^.SetAsVariab(varTmp); //Convierte p2 a variable + ExchangeP1_P2; //Convierte a p1 := p1 + K; + ROB_dword_aadd_dword(Opt, false); //compila como autosuma + _MOVF(aux.offs, toW); //devuelve byet bajo en W + aux.used := false; + varTmp.Destroy; //Destruye la variable + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_dword_add_dword(Opt, SetRes); + end; + stVariab_Variab:begin + SetROBResultExpres_dword(Opt); +// Este algoritmo Falla +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _movf (byte2L,toW); +// _addwf(byte1L,toW); +// _movwf(aux.offs); +// _movf (byte2H,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1H,toW); +// _movwf(H.offs); +// _movf (byte2E,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1E,toW); +// _movwf(E.offs); +// _movf (byte2U,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1U,toW); +// _movwf(U.offs); +// _movf (aux.offs, toW); +// aux.used := false; + + aux := GetAuxRegisterByte; //Pide un registro libre + if HayError then exit; + kMOVF (byte2L, toW); + kADDWF (byte1L, toW); //Cambia C + _movwf (aux.offs); //Guarda Byte L de resultado + + kMOVF (byte2H, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Hoffs,toW); + _addwf (p1^.Hoffs,toW); //Cambia C + _movwf (H.offs); //Guarda Byte H de resultado + + kMOVF (byte2E, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Eoffs,toW); + _addwf (p1^.Eoffs,toW); //Cambia C + _movwf (E.offs); //Guarda Byte E de resultado + + kMOVF (byte2U,toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Uoffs,toW); + _addwf (p1^.Uoffs,toW); + _movwf (U.offs); //Guarda Byte U de resultado + + _movf (aux.offs, toW); //Deja L en W + + aux.used := false; + + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) +// SetROBResultExpres_word(Opt); +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _BANKSEL(aux.bank); +// _movwf(aux.offs); //guarda byte bajo +// _BANKSEL(p1^.bank); +// _MOVF(byte1H, toW); //Carga más peso del dato 1 +// _BANKSEL(H.bank); +// _addwf(H.offs,toF); //Suma y guarda +// //Siguiente byte +// _BANKSEL(p1^.bank); +// _MOVF(byte1L, toW); //Carga menos peso del dato 1 +// _BANKSEL(aux.bank); +// _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W +// _btfsc(STATUS,_C); //Hubo acarreo anterior? +// _incf(H.offs, toF); +// aux.used := false; +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + if SetRes then SetROBResultExpres_dword(Opt); //Se fija aquí el resultado + //WHEU + K -> WHEU, se puede manejar como asignación con suma + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //gaurda W + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal + p1^.SetAsVariab(varTmp); //Convierte p1 a variable + ROB_dword_aadd_dword(Opt, false); //compila como autosuma + _MOVF(aux.offs, toW); //devuelve byet bajo en W + aux.used := false; + varTmp.Destroy; //Destruye la variable + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) +// SetROBResultExpres_word(Opt); +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _movwf(aux.offs); //guarda byte bajo +// _BANKSEL(p2^.bank); +// _MOVF(byte2H, toW); //Carga más peso del dato 1 +// _BANKSEL(H.bank); +// _addwf(H.offs,toF); //Suma y guarda +// _BANKSEL(p2^.bank); +// _MOVF(byte2L, toW); //Carga menos peso del dato 1 +// _BANKSEL(aux.bank); +// _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W +// _BANKSEL(H.bank); +// _btfsc(STATUS,_C); //Hubo acarreo anterior? +// _incf(H.offs, toF); +// aux.used := false; +// end; +// stExpres_Expres:begin +// SetROBResultExpres_word(Opt); +// //p1 está salvado en pila y p2 en (_H,W) +// p1^.Sto := stVariab; //Convierte a variable +// p1^.rVar := GetVarWordFromStk; +// stoOperation := TStoOperandsROB((Ord(p1^.Sto) << 2) or ord(p2^.Sto)); +// //Luego el caso es similar a stVariab_Expres +// ROB_word_add_word; +// FreeStkRegisterByte(spH); //libera pila, obtiene dirección +// FreeStkRegisterByte(spL); //libera pila, obtiene dirección +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //No cambia + end else if value2 <= $FF then begin + kMOVLW (value2L); + kADDWF (byte1L, toF); + _btfsc (_STATUS,_C); + _INCF (p1^.Hoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Eoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Uoffs,toF); + end else if value2 <= $FFFF then begin + aux := GetAuxRegisterByte; + kMOVLW (value2L); + kADDWF (byte1L,toF); + kMOVLW (value2H); + kMOVWF(aux.addr); //Salva W por si necesita incementarse. No cambia banderas. + _btfsc (_STATUS, _C); + _INCF(aux.offs, toW); //W=W+1. El banco aquí, debe ser el de "aux". + kADDWF (byte1H,toF); + _btfsc (_STATUS,_C); + _INCF (p1^.Eoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Uoffs,toF); + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + kMOVLW (value2L); + kADDWF (byte1L, toF); + kMOVLW (value2H); + kMOVWF(aux.addr); //Salva sin cambiar C + _btfsc (_STATUS,_C); + _INCF(aux.offs, toW); //W=W+1. El banco aquí, debe ser el de "aux". + kADDWF (byte1H, toF); + kMOVLW (p2^.EByte); + kMOVWF(aux.addr); //Salva sin cambiar C + _btfsc (_STATUS,_C); + _INCF(aux.offs, toW); //W=W+1. El banco aquí, debe ser el de "aux". + kADDWF (byte1E, toF); + kMOVLW (p2^.UByte); + kMOVWF(aux.addr); //Salva sin cambiar C + _btfsc (_STATUS,_C); + _INCF(aux.offs, toW); //W=W+1. El banco aquí, debe ser el de "aux". + kADDWF (byte1U,toF); + aux.used := false; + end; + end; + stVariab: begin + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kMOVF (byte2L, toW); + kADDWF (byte1L, toF); + kMOVF (byte2H, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Hoffs,toW); + _addwf (p1^.Hoffs,toF); + kMOVF (byte2E, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Eoffs,toW); + _addwf (p1^.Eoffs,toF); + kMOVF (byte2U, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Uoffs,toW); + _addwf (p1^.Uoffs,toF); + end; + stExpres: begin //Se asume que está en U,E,H,w + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kADDWF (byte1L, toF); //p2 ya está en W + _movf (H.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (H.offs,toW); + _addwf (p1^.Hoffs,toF); + _movf (E.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (E.offs,toW); + _addwf (p1^.Eoffs,toF); + _movf (U.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (U.offs,toW); + _addwf (p1^.Uoffs,toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +//////////// Operaciones con Char +procedure TGenCod.ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + if value2=0 then begin + //caso especial + kCLRF(byte1); + end else begin + kMOVLW(value2); //Los chars se manejan como números + kMOVWF(byte1); + end; + end; + stVariab: begin + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + kMOVF(byte2, toW); + kMOVWF(byte1); + end; + stExpres: begin //ya está en w + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +procedure TGenCod.ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_equal_byte(Opt, SetRes); //es lo mismo +end; +procedure TGenCod.ROB_char_difer_char(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_difer_byte(Opt, SetRes); //es lo mismo +end; +//////////// Operaciones con punteros +procedure TGenCod.ROB_pointer_add_byte(Opt: TxpOperation; SetRes: boolean); +{Implementa la suma de un puntero (a cualquier tipo) y un byte.} +var + ptrType: TxpEleType; +begin + {Guarda la referencia al tipo puntero, porque: + * Se supone que este tipo lo define el usuario y no se tiene predefinido. + * Se podrían definir varios tipos de puntero) así que no se tiene una + referencia estática + * Conviene manejar esto de forma dinámica para dar flexibilidad al lenguaje} + ptrType := p1^.Typ; //Se ahce aquí porque después puede cambiar p1^. + //La suma de un puntero y un byte, se procesa, como una suma de bytes + ROB_byte_add_byte(Opt, SetRes); + //Devuelve byte, oero debe devolver el tipo puntero + case res.Sto of + stConst: res.SetAsConst(ptrType); //Cambia el tipo a la constante + //stVariab: res.SetAsVariab(res.rVar); + {Si devuelve variable, solo hay dos posibilidades: + 1. Que sea la variable puntero, por lo que no hay nada que hacer, porque ya tiene + el tipo puntero. + 2. Que sea la variable byte (y que la otra era constante puntero 0 = nil). En este + caso devolverá el tipo Byte, lo cual tiene cierto sentido.} + stExpres: res.SetAsExpres(ptrType); //Cambia tipo a la expresión + end; +end; +procedure TGenCod.ROB_pointer_sub_byte(Opt: TxpOperation; SetRes: boolean); +{Implementa la resta de un puntero (a cualquier tipo) y un byte.} +var + ptrType: TxpEleType; +begin + //La explicación es la misma que para la rutina ROB_pointer_add_byte + ptrType := p1^.Typ; + ROB_byte_sub_byte(Opt, SetRes); + case res.Sto of + stConst: res.SetAsConst(ptrType); + stExpres: res.SetAsExpres(ptrType); + end; +end; +procedure TGenCod.ROU_derefPointer(Opr: TxpOperator; SetRes: boolean); +{Implementa el operador de desreferencia "^", para Opr que se supone debe ser + categoria "tctPointer", es decir, puntero a algún tipo de dato.} +var + tmpVar: TxpEleVar; +begin + case p1^.Sto of + stConst : begin + //Caso especial. Cuando se tenga algo como: TPunteroAByte($FF)^ + //Se asume que devuelve una variable de tipo Byte. + tmpVar := CreateTmpVar('', typByte); + tmpVar.addr0 := value1; //Fija dirección de constante + SetROUResultVariab(tmpVar); + end; + stVariab: begin + //Caso común: ptrWord^ + //La desreferencia de una variable "tctPointer" es un stVarRefVar. + SetROUResultVarRef(p1^.rVar); + end; + stExpres: begin + //La expresión Esta en RT, pero es una dirección, no un valor + SetROUResultExpRef(nil, p1^.Typ); + end; + else + genError('Not implemented: "%s"', [Opr.OperationString]); + end; +end; +///////////// Funciones del sistema +procedure TGenCod.codif_1mseg; +//Codifica rutina de retardo de 1mseg. +var + aux: TPicRegister; +begin + aux := GetAuxRegisterByte; //Pide un registro libre + PutFwdComm(';1 msec routine.'); + if _CLOCK = 1000000 then begin + kMOVLW(83); + _MOVWF(aux.offs); + _DECFSZ(aux.offs, toF); //lazo de 3 ciclos + _GOTO(_PC-1); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 2000000 then begin + kMOVLW(166); + _MOVWF(aux.offs); + _DECFSZ(aux.offs, toF); //lazo de 3 ciclos + _GOTO(_PC-1); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 4000000 then begin + //rtuina básica para 4MHz + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 4 ciclos + _DECFSZ(aux.offs, toF); + _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 8000000 then begin + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 8 ciclos + _GOTO(_PC+1); //introduce 4 ciclos más de retardo + _GOTO(_PC+1); + _DECFSZ(aux.offs, toF); + _GOTO(_PC-4); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 10000000 then begin + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 10 ciclos + _GOTO(_PC+1); //introduce 6 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _DECFSZ(aux.offs, toF); + _GOTO(_PC-5); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 12000000 then begin + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 12 ciclos + _GOTO(_PC+1); //introduce 8 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _DECFSZ(aux.offs, toF); + _GOTO(_PC-6); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 16000000 then begin + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 16 ciclos + _GOTO(_PC+1); //introduce 12 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _DECFSZ(aux.offs, toF); + _GOTO(_PC-8); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 20000000 then begin + kMOVLW(250); + _MOVWF(aux.offs); + _NOP; //Lazo de 20 ciclos + _GOTO(_PC+1); //introduce 16 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _DECFSZ(aux.offs, toF); + _GOTO(_PC-10); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else begin + GenError('Clock frequency %d not supported for delay_ms().', [_CLOCK]); + end; + aux.used := false; //libera registro +end; +procedure TGenCod.codif_delay_ms(fun: TxpEleFun); +//Codifica rutina de retardo en milisegundos +var + delay: Word; + aux: TPicRegister; +begin + StartCodeSub(fun); //inicia codificación + PutTopComm(' ;delay routine.'); + typWord.DefineRegister; //Se asegura de que se exista y lo marca como "usado". + if HayError then exit; + aux := GetAuxRegisterByte; //Pide un registro libre (En esta familia no se puede usar FSR, porque no está implementado con todos sus bits.) + {Esta rutina recibe los milisegundos en los registros en (H,w) o en (w) + En cualquier caso, siempre usa el registros H , el acumulador "w" y un reg. auxiliar. + Se supone que para pasar los parámetros, ya se requirió H, así que no es necesario + crearlo.} + _CLRF(H.offs); PutComm(' ;enter when parameters in (0,w)'); + _MOVWF(aux.offs); PutComm(';enter when parameters in (H,w)'); + _INCF(H.offs,toF); + _INCF(aux.offs,toF); //corrección +delay:= _PC; + _DECFSZ(aux.offs, toF); + _GOTO(_PC+2); + _DECFSZ(H.offs, toF); + _GOTO(_PC+2); + _RETLW(0); //En la mayoría de modelos no existe _RETURN + codif_1mseg; //codifica retardo 1 mseg + if HayError then exit; + _GOTO(delay); + EndCodeSub; //termina codificación + aux.used := false; //libera registro +end; +procedure TGenCod.codif_delay_ms2(fun: TxpEleFun); +//Code the routine for delay in miliseconds for word parameter. +var + aux: TPicRegister; + delay: Word; +begin + if f_delay_msB.linked THEN begin + {This is something weird, because we really don't generate code, but point the + function to an existing code.} + fun.adrr := f_delay_msB.adrr+1; //At the entry for word parameter + end else begin + //It's not used f_delay_ms(). We use a simplified version of the loop + StartCodeSub(fun); //inicia codificación + PutTopComm(' ;delay routine.'); + typWord.DefineRegister; //Se asegura de que se exista y lo marca como "usado". + if HayError then exit; + aux := GetAuxRegisterByte; //Pide un registro libre (En esta familia no se puede usar FSR, porque no está implementado con todos sus bits.) + _MOVWF(aux.offs); + _INCF(H.offs,toF); + _INCF(aux.offs,toF); //corrección + delay:= _PC; + _DECFSZ(aux.offs, toF); + _GOTO(_PC+2); + _DECFSZ(H.offs, toF); + _GOTO(_PC+2); + _RETLW(0); //En la mayoría de modelos no existe _RETURN + codif_1mseg; //codifica retardo 1 mseg + if HayError then exit; + _GOTO(delay); + EndCodeSub; //termina codificación + aux.used := false; //libera registro + end; +end; +procedure TGenCod.fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); +{Se debe dejar en los registros de trabajo, el valor del parámetro indicado.} +var + curFunTyp: TxpEleType; + parentNod: TxpEleCodeCont; + curFun: TxpEleFun; + posExit: TSrcPos; +// adrReturn: word; +begin + //TreeElems.curNode, debe ser de tipo "Body". + parentNod := TreeElems.CurCodeContainer; //Se supone que nunca debería fallar + posExit := cIn.ReadSrcPos; //Guarda para el AddExitCall() + if parentNod.idClass = eltMain then begin + //Es el cuerpo del programa principal + _SLEEP; //Así se termina un programa en PicPas + end else if parentNod.idClass = eltFunc then begin + //Es el caso común, un exit() en procedimientos. + //"parentNod" debe ser de tipo TxpEleFun + curFun := TxpEleFun(parentNod); + if curFun.IsInterrupt then begin + GenError('Cannot use exit() in an INTERRUPT.'); + exit; + end; + //Codifica el retorno + curFunTyp := curFun.typ; + if curFunTyp = typNull then begin + //No retorna valores. Es solo procedimiento + _RETLW(0); //En la mayoría de modelos no existe _RETURN + //No hay nada, más que hacer + end else begin + //Se espera el valor devuelto + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + //Verifica fin de parámetros + if not CaptureTok(')') then exit; + //El resultado de la expresión está en "res". + if curFunTyp <> res.Typ then begin + GenError('Expected a "%s" expression.', [curFunTyp.name]); + exit; + end; + LoadToRT(res, true); //Carga expresión en RT y genera i_RETURN o i_RETLW + end; + end else begin + //Faltaría implementar en cuerpo de TxpEleUni + GenError('Syntax error.'); + end; + //Lleva el registro de las llamadas a exit() + if FirstPass then begin + //CurrBank debe ser el banco con el que se llamó al i_RETURN. + parentNod.AddExitCall(posExit, parentNod.CurrBlockID, CurrBank); + end; + res.SetAsNull; //No es función +end; +procedure TGenCod.fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('Cannot increase a constant.'); exit; + end; + stVariab: begin + if (res.Typ = typByte) or (res.Typ = typChar) then begin + _BANKSEL(res.bank); + _INCF(res.offs, toF); + end else if res.Typ = typWord then begin + _BANKSEL(res.bank); + _INCF(res.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Hoffs, toF); + end else if res.Typ = typDWord then begin + _BANKSEL(res.bank); + _INCF(res.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Hoffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Eoffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Uoffs, toF); + end else if res.Typ.catType = tctPointer then begin + //Es puntero corto + _BANKSEL(res.bank); + _INCF(res.offs, toF); + end else begin + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); + exit; + end; + end; +// stVarRefVar: begin +// if (res.Typ = typByte) or (res.Typ = typChar) then begin +// _BANKSEL(res.bank); +// _INCF(res.offs, toF); +// end else if res.Typ = typWord then begin +// _BANKSEL(res.bank); +// _INCF(res.Loffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Hoffs, toF); +// end else if res.Typ = typDWord then begin +// _BANKSEL(res.bank); +// _INCF(res.Loffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Hoffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Eoffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Uoffs, toF); +// end else if res.Typ.catType = tctPointer then begin +// //Es puntero corto +// _BANKSEL(res.bank); +// _INCF(res.offs, toF); +// end else begin +// GenError(MSG_INVAL_PARTYP, [res.Typ.name]); +// exit; +// end; +// end; + stExpres: begin //se asume que ya está en (_H,w) + GenError('Cannot increase an expression.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + res.SetAsNull; //No es función + //Verifica fin de parámetros + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('Cannot decrease a constant.'); exit; + end; + stVariab: begin + if (res.Typ = typByte) or (res.Typ = typChar) then begin + _BANKSEL(res.bank); + _DECF(res.offs, toF); + end else if res.Typ = typWord then begin + _BANKSEL(res.bank); + _MOVF(res.Loffs, toW); + _BTFSC(_STATUS, _Z); + _DECF(res.Hoffs, toF); + _DECF(res.Loffs, toF); + end else if res.Typ = typDWord then begin + _BANKSEL(res.bank); + kMOVLW(1); + _subwf(res.Loffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Hoffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Eoffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Uoffs, toF); + end else if res.Typ.catType = tctPointer then begin + //Es puntero corto + _BANKSEL(res.bank); + _DECF(res.offs, toF); + end else begin + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); + exit; + end; + end; + stExpres: begin //se asume que ya está en (_H,w) + GenError('Cannot decrease an expression.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + res.SetAsNull; //No es función + //Verifica fin de parámetros + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typChar then begin + SetResultConst(typByte); //Solo cambia el tipo, no el valor + //No se usa SetROBResultConst_byte, porque no estamos en ROP + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + stVariab: begin + if res.Typ = typChar then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); //Actualiza "res" + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typChar then begin + //Es la misma expresión, solo que ahora es Byte. + res.SetAsExpres(typByte); //No se puede usar SetROBResultExpres_byte, porque no hay p1 y p2 + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + SetResultConst(typChar); //Solo cambia el tipo, no el valor + //No se usa SetROBResultConst_char, porque no estamos en ROP + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typChar); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + //Es la misma expresión, solo que ahora es Char. + res.SetAsExpres(typChar); //No se puede usar SetROBResultExpres_char, porque no hay p1 y p2; + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); +{Convierte byte, o boolean a bit} +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + if res.valInt= 0 then begin + SetResultConst(typBit); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := false; + end else begin + SetResultConst(typBit); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := true; + end; + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //No se usa SetROUResultExpres_bit(true), porque no se tiene el operando en p1^ + SetResultExpres(typBit); + res.Inverted := true; + //Se asumirá que cualquier valor diferente de cero, devuelve 1 + _MOVF(res.Loffs, toW); //el resultado aparecerá en Z, invertido + {Notar que se ha usado res.Loff, para apuntar a la dirección de la variable byte. + Si se hubeise usado solo res.off, apuntaría a una dirección del tipo bit} + end else if res.Typ = typBool then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typBit); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //Apunta al mismo byte + tmpVar.bit0 := res.rVar.bit0; //Apunta al mismo bit + SetResultVariab(tmpVar, res.Inverted); //mantiene lógica + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + SetResultExpres(typBit); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ + res.Inverted := true; + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); +{Convierte byte, o bit a boolean} +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + if res.valInt= 0 then begin + SetResultConst(typBool); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := false; + end else begin + SetResultConst(typBool); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := true; + end; + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //No se usa SetROUResultExpres_bool(true), porque no se tiene el operando en p1^ + SetResultExpres(typBool); + res.Inverted := true; + //Se asumirá que cualquier valor diferente de cero, devuelve 1 + _MOVF(res.Loffs, toW); //el resultado aparecerá en Z, invertido + {Notar que se ha usado res.Loff, para apuntar a la dirección de la variable byte. + Si se hubeise usado solo res.off, apuntaría a una dirección del tipo bit} + end else if res.Typ = typBit then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typBool); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //Apunta al mismo byte + tmpVar.bit0 := res.rVar.bit0; //Apunta al mismo bit + SetResultVariab(tmpVar, res.Inverted); //mantiene lógica + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + SetResultExpres(typBool); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ + res.Inverted := true; + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + //ya es Byte + end else if res.Typ = typChar then begin + res.SetAsConst(typByte); //Solo cambia el tipo + end else if res.Typ = typWord then begin + res.SetAsConst(typByte); //Cambia el tipo + res.valInt := res.valInt and $FF; + end else if res.Typ = typDWord then begin + res.SetAsConst(typByte); //Cambia el tipo + res.valInt := res.valInt and $FF; + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typByte); //Cambia el tipo + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + stVariab: begin + if res.Typ = typBit then begin + SetResultExpres(typByte); + _CLRW; + _BTFSC(res.Boffs, res.bit); + kMOVLW(1); //devuelve 1 + //Es lo mismo + end else if res.Typ = typChar then begin + //Crea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else if res.Typ = typByte then begin + //Es lo mismo + end else if res.Typ = typWord then begin + //Crea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else if res.Typ = typDWord then begin + //CRea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + //Ya está en W + //Ya es Byte + end else if res.Typ = typChar then begin + //Ya está en W + res.SetAsExpres(typByte); //Solo cambia el tipo + end else if res.Typ = typWord then begin + //Ya está en W el byte bajo + res.SetAsExpres(typByte); //Cambia el tipo + end else if res.Typ = typDWord then begin + //Ya está en W el byet bajo + res.SetAsExpres(typByte); //Cambia el tipo + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + res.SetAsExpres(typByte); //Cambia el tipo + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + res.SetAsConst(typWord); //solo cambia el tipo + end else if res.Typ = typChar then begin + res.SetAsConst(typWord); //solo cambia el tipo + end else if res.Typ = typWord then begin + //ya es Word + end else if res.Typ = typDWord then begin + res.SetAsConst(typWord); + res.valInt := res.valInt and $FFFF; + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typWord); + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert this constant to word.'); exit; + end; + end; + stVariab: begin + typWord.DefineRegister; + if res.Typ = typByte then begin + SetResultExpres(typWord); //No podemos devolver variable. Pero sí expresión + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typChar then begin + SetResultExpres(typWord); //No podemos devolver variable. Pero sí expresión + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typWord then begin + //ya es Word + end else if res.Typ = typDWord then begin + //Crea varaible que apunte al word bajo + tmpVar := CreateTmpVar('', typWord); //crea variable temporal Word + tmpVar.addr0 := res.rVar.addr0; //apunta al byte L + tmpVar.addr1 := res.rVar.addr1; //apunta al byte H + SetResultVariab(tmpVar); + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + SetResultExpres(typWord); //Devolvemo expresión + _CLRF(H.offs); + kMOVLW(0); + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert this variable to word.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + typWord.DefineRegister; + if res.Typ = typByte then begin + res.SetAsExpres(typWord); + //Ya está en W el byte bajo + _CLRF(H.offs); + end else if res.Typ = typChar then begin + res.SetAsExpres(typWord); + //Ya está en W el byte bajo + _CLRF(H.offs); + end else if res.Typ = typWord then begin +// Ya es word + end else if res.Typ = typDWord then begin + res.SetAsExpres(typWord); + //Ya está en H,W el word bajo + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsExpres(typWord); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert expression to word.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typChar then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typWord then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typDWord then begin + //ya es DWord + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert this constant to Dword.'); exit; + end; + end; + stVariab: begin + typDword.DefineRegister; + if res.Typ = typByte then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typChar then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typWord then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _MOVF(res.Hoffs, toW); + _MOVWF(H.offs); + _MOVF(res.Loffs, toW); + end else if res.Typ = typDWord then begin + //ya es Word. Lo deja como varaible DWord + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert this variable to Dword.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + typDword.DefineRegister; + if res.Typ = typByte then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en W el byte bajo + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + end else if res.Typ = typChar then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en W el byte bajo + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + end else if res.Typ = typWord then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en H,W el word + _CLRF(U.offs); + _CLRF(E.offs); + end else if res.Typ = typDWord then begin +// Ya es Dword + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert expression to Dword.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); +var + b: Byte; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('PORT or BIT variable expected.'); exit; + end; + stVariab: begin + if res.Typ = typByte then begin + //Se asume que será algo como GPIO, PORTA, PORTB, ... + if res.offs in [$05, $06, $07, $08, $09] then begin //GPIO + kMOVLW($FF); //Todo el puerto en entrada + _TRIS(res.offs); + end else begin + GenError('Invalid address for PORT.'); exit; + end; + end else if res.Typ = typBit then begin + //Se asume que será algo como GPIO, PORTA.0, PORTB.0, ... + //Esto solo fincionará para un bit y pone los demás en salida. + if res.offs in [$05, $06, $07, $08, $09] then begin //GPIO + b := res.bit; + kMOVLW(byte($1 << b)); //Bit en salida + _TRIS(res.offs); + end else begin + GenError('Invalid address for PORT.'); exit; + end; + end else begin + GenError('Invalid type.'); exit; + end; + res.SetAsNull; //No es función así que no es necesario fijar el resultado + end; + stExpres: begin //se asume que ya está en (w) + GenError('PORT variable expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); +var + b: Byte; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('PORT variable expected.'); exit; + end; + stVariab: begin + if res.Typ = typByte then begin + //Se asume que será algo como GPIO, PORTA, PORTB, ... + if res.offs in [$05, $06, $07, $08, $09] then begin //GPIO + kMOVLW($00); //Todo el puerto en salida + _TRIS(res.offs); + end else begin + GenError('Invalid address for PORT.'); exit; + end; + end else if res.Typ = typBit then begin + //Se asume que será algo como GPIO, PORTA.0, PORTB.0, ... + //Esto solo fincionará para un bit y pone los demás en entrada. + if res.offs in [$05, $06, $07, $08, $09] then begin //GPIO + b := res.bit; + kMOVLW(not byte($1 << b)); //Bit en salida + _TRIS(res.offs); + end else begin + GenError('Invalid address for PORT.'); exit; + end; + end else begin + GenError('Invalid type.'); exit; + end; + res.SetAsNull; //No es función así que no es necesario fijar el resultado + end; + stExpres: begin //se asume que ya está en (w) + GenError('PORT variable expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); +{Define el banco actual} +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if (res.Typ = typByte) or (res.Typ = typWord) or (res.Typ = typDWord) then begin + //ya es Word + CurrBank := 255; //para forzar el cambio + _BANKSEL(res.valInt); + end else begin + GenError('Number expected.'); exit; + end; + end; + stVariab, stExpres: begin //se asume que ya está en (w) + GenError('A constant expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.StartSyntax; +//Se ejecuta solo una vez al inicio +begin + ///////////define la sintaxis del compilador + //Tipos de tokens personalizados + tnExpDelim := xLex.NewTokType('ExpDelim');//delimitador de expresión ";" + tnBlkDelim := xLex.NewTokType('BlkDelim'); //delimitador de bloque + tnStruct := xLex.NewTokType('Struct'); //personalizado + tnDirective:= xLex.NewTokType('Directive'); //personalizado + tnAsm := xLex.NewTokType('Asm'); //personalizado + tnChar := xLex.NewTokType('Char'); //personalizado + tnOthers := xLex.NewTokType('Others'); //personalizado + //Configura atributos + tkKeyword.Style := [fsBold]; //en negrita + xLex.Attrib[tnBlkDelim].Foreground:=clGreen; + xLex.Attrib[tnBlkDelim].Style := [fsBold]; //en negrita + xLex.Attrib[tnStruct].Foreground:=clGreen; + xLex.Attrib[tnStruct].Style := [fsBold]; //en negrita + //inicia la configuración + xLex.ClearMethodTables; //limpia tabla de métodos + xLex.ClearSpecials; //para empezar a definir tokens + //crea tokens por contenido + xLex.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + xLex.DefTokContent('[0-9]', '[0-9.]*', tnNumber); + xLex.DefTokContent('[$]','[0-9A-Fa-f]*', tnNumber); + xLex.DefTokContent('[%]','[01]*', tnNumber); + //define palabras claves + xLex.AddIdentSpecList('THEN var type absolute interrupt', tnKeyword); + xLex.AddIdentSpecList('program public private method const', tnKeyword); + xLex.AddIdentSpecList('class create destroy sub do begin', tnKeyword); + xLex.AddIdentSpecList('END ELSE ELSIF UNTIL', tnBlkDelim); + xLex.AddIdentSpecList('true false', tnBoolean); + xLex.AddIdentSpecList('if while repeat for', tnStruct); + xLex.AddIdentSpecList('and or xor not div mod in', tnOperator); + xLex.AddIdentSpecList('umulword', tnOperator); + //tipos predefinidos + xLex.AddIdentSpecList('bit boolean byte word char dword', tnType); + //funciones del sistema + xLex.AddIdentSpecList('exit Inc Dec Ord Chr', tnSysFunct); + xLex.AddIdentSpecList('SetAsInput SetAsOutput SetBank', tnSysFunct); + //símbolos especiales + xLex.AddSymbSpec('+', tnOperator); + xLex.AddSymbSpec('+=', tnOperator); + xLex.AddSymbSpec('-=', tnOperator); + xLex.AddSymbSpec('-', tnOperator); + xLex.AddSymbSpec('*', tnOperator); + xLex.AddSymbSpec('/', tnOperator); + xLex.AddSymbSpec('\', tnOperator); +// xLex.AddSymbSpec('%', tnOperator); + xLex.AddSymbSpec('**', tnOperator); + xLex.AddSymbSpec('=', tnOperator); + xLex.AddSymbSpec('>', tnOperator); + xLex.AddSymbSpec('<', tnOperator); + xLex.AddSymbSpec('>=', tnOperator); + xLex.AddSymbSpec('<=', tnOperator); + xLex.AddSymbSpec('<>', tnOperator); + xLex.AddSymbSpec('<=>',tnOperator); + xLex.AddSymbSpec(':=', tnOperator); + xLex.AddSymbSpec('>>', tnOperator); + xLex.AddSymbSpec('<<', tnOperator); + xLex.AddSymbSpec('^', tnOperator); + xLex.AddSymbSpec('@', tnOperator); + xLex.AddSymbSpec('.', tnOperator); + xLex.AddSymbSpec(';', tnExpDelim); + xLex.AddSymbSpec('(', tnOthers); + xLex.AddSymbSpec(')', tnOthers); + xLex.AddSymbSpec(':', tnOthers); + xLex.AddSymbSpec(',', tnOthers); + xLex.AddSymbSpec('[', tnOthers); + xLex.AddSymbSpec(']', tnOthers); + //crea tokens delimitados + xLex.DefTokDelim('''','''', tnString); + xLex.DefTokContent('[#]','[0-9]*', tnChar); +// xLex.DefTokDelim('"','"', tnString); + + xLex.DefTokDelim('//','', xLex.tnComment); + xLex.DefTokDelim('{','}', xLex.tnComment, tdMulLin); + xLex.DefTokDelim('(\*','\*)', xLex.tnComment, tdMulLin); + xLex.DefTokDelim('{$','}', tnDirective, tdUniLin); + xLex.DefTokDelim('Asm','End', tnAsm, tdMulLin); + //define bloques de sintaxis +// xLex.AddBlock('{','}'); + xLex.Rebuild; //es necesario para terminar la definición +end; +procedure TGenCod.DefCompiler; +var + opr: TxpOperator; +begin + //Define métodos a usar + OnExprStart := @expr_start; + OnExprEnd := @expr_End; + + ///////////Crea tipos + ClearSystemTypes; + ///////////////// Tipo Bit //////////////// + typBit := CreateSysType('bit', t_uinteger,-1); //de 1 bit + typBit.OnLoadToRT := @bit_LoadToRT; + typBit.OnDefRegister:= @bit_DefineRegisters; + typBit.OnSaveToStk := @bit_SaveToStk; +// opr:=typBit.CreateUnaryPreOperator('@', 6, 'addr', @Oper_addr_bit); + +//////////////// Boolean type ///////////// + typBool := CreateSysType('boolean',t_boolean,-1); //de 1 bit + typBool.OnLoadToRT := @bit_LoadToRT; //es lo mismo + typBool.OnDefRegister:= @bit_DefineRegisters; //es lo mismo + typBool.OnSaveToStk := @bit_SaveToStk; //es lo mismo + + //////////////// Byte type ///////////// + typByte := CreateSysType('byte',t_uinteger,1); //de 1 byte + typByte.OnLoadToRT := @byte_LoadToRT; + typByte.OnDefRegister:= @byte_DefineRegisters; + typByte.OnSaveToStk := @byte_SaveToStk; + //typByte.OnReadFromStk := + //Campos de bit + typByte.CreateField('bit0', @byte_bit0, @byte_bit0); + typByte.CreateField('bit1', @byte_bit1, @byte_bit1); + typByte.CreateField('bit2', @byte_bit2, @byte_bit2); + typByte.CreateField('bit3', @byte_bit3, @byte_bit3); + typByte.CreateField('bit4', @byte_bit4, @byte_bit4); + typByte.CreateField('bit5', @byte_bit5, @byte_bit5); + typByte.CreateField('bit6', @byte_bit6, @byte_bit6); + typByte.CreateField('bit7', @byte_bit7, @byte_bit7); + //Campos de bit (se mantienen por compatibilidad) + typByte.CreateField('0', @byte_bit0, @byte_bit0); + typByte.CreateField('1', @byte_bit1, @byte_bit1); + typByte.CreateField('2', @byte_bit2, @byte_bit2); + typByte.CreateField('3', @byte_bit3, @byte_bit3); + typByte.CreateField('4', @byte_bit4, @byte_bit4); + typByte.CreateField('5', @byte_bit5, @byte_bit5); + typByte.CreateField('6', @byte_bit6, @byte_bit6); + typByte.CreateField('7', @byte_bit7, @byte_bit7); + + //////////////// Tipo Char ///////////// + //Tipo caracter + typChar := CreateSysType('char',t_uinteger,1); //de 1 byte. Se crea como uinteger para leer/escribir su valor como número + typChar.OnLoadToRT := @byte_LoadToRT; //Es lo mismo + typChar.OnDefRegister:= @byte_DefineRegisters; //Es lo mismo + typChar.OnSaveToStk := @byte_SaveToStk; //Es lo mismo + + //////////////// Tipo Word ///////////// + //Tipo numérico de dos bytes + typWord := CreateSysType('word',t_uinteger,2); //de 2 bytes + typWord.OnLoadToRT := @word_LoadToRT; + typWord.OnDefRegister:= @word_DefineRegisters; + typWord.OnSaveToStk := @word_SaveToStk; + + typWord.CreateField('Low' , @word_Low, @word_Low); + typWord.CreateField('High', @word_High, @word_High); + + //////////////// String type ///////////// + {Se crea el tipo String, solo para permitir inicializar arreglos de + caracteres. Por ahora no se implementan otras funcionalidades.} + typString := CreateSysType('string', t_string, 0); //tamaño variable + { TODO : String debería definirse mejor como un tipo común, no del sistema } + + //////////////// Tipo DWord ///////////// + //Tipo numérico de cuatro bytes + typDWord := CreateSysType('dword',t_uinteger,4); //de 4 bytes + typDWord.OnLoadToRT := @dword_LoadToRT; + typDWord.OnDefRegister:= @dword_DefineRegisters; + typDWord.OnSaveToStk := @dword_SaveToStk; + + typDWord.CreateField('Low' , @dword_Low , @dword_Low ); + typDWord.CreateField('High' , @dword_High , @dword_High ); + typDWord.CreateField('Extra' , @dword_Extra , @dword_Extra ); + typDWord.CreateField('Ultra' , @dword_Ultra , @dword_Ultra ); + typDWord.CreateField('LowWord', @dword_LowWord , @dword_LowWord ); + typDWord.CreateField('HighWord',@dword_HighWord, @dword_HighWord); + + {Los operadores deben crearse con su precedencia correcta + Precedencia de operadores en Pascal: + 6) ~, not, signo "-" (mayor precedencia) + 5) *, /, div, mod, and, shl, shr, & + 4) |, !, +, -, or, xor + 3) =, <>, <, <=, >, >=, in + 2) := (menor precedencia) + } + ////////////////////////////////////////// + //////// Operaciones con Bit //////////// + + opr:=typBit.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typBit, @ROB_bit_asig_bit); + opr.CreateOperation(typByte, @ROB_bit_asig_byte); + + opr:=typBit.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_bit); + + opr:=typBit.CreateBinaryOperator('AND',4,'and'); + opr.CreateOperation(typBit,@ROB_bit_and_bit); + opr.CreateOperation(typByte,@ROB_bit_and_byte); + + opr:=typBit.CreateBinaryOperator('OR',4,'or'); + opr.CreateOperation(typBit,@ROB_bit_or_bit); + opr.CreateOperation(typByte,@ROB_bit_or_byte); + + opr:=typBit.CreateBinaryOperator('XOR',4,'or'); + opr.CreateOperation(typBit,@ROB_bit_xor_bit); + opr.CreateOperation(typByte,@ROB_bit_xor_byte); + + opr:=typBit.CreateBinaryOperator('=',4,'equal'); + opr.CreateOperation(typBit,@ROB_bit_equ_bit); + opr.CreateOperation(typByte,@ROB_bit_equ_byte); + + opr:=typBit.CreateBinaryOperator('<>',4,'difer'); + opr.CreateOperation(typBit,@ROB_bit_dif_bit); + opr.CreateOperation(typByte,@ROB_bit_dif_byte); + + ////////////////////////////////////////// + //////// Operaciones con Boolean //////////// + opr:=typBool.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typBool,@ROB_bool_asig_bool); + + opr:=typBool.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_bool); + + opr:=typBool.CreateBinaryOperator('AND',4,'and'); //suma + opr.CreateOperation(typBool,@ROB_bool_and_bool); + + opr:=typBool.CreateBinaryOperator('OR',4,'or'); //suma + opr.CreateOperation(typBool,@ROB_bool_or_bool); + + opr:=typBool.CreateBinaryOperator('XOR',4,'or'); //suma + opr.CreateOperation(typBool,@ROB_bool_xor_bool); + + opr:=typBool.CreateBinaryOperator('=',4,'equal'); + opr.CreateOperation(typBool,@ROB_bool_equ_bool); + + opr:=typBool.CreateBinaryOperator('<>',4,'difer'); + opr.CreateOperation(typBool,@ROB_bool_dif_bool); + ////////////////////////////////////////// + //////// Operaciones con Byte //////////// + ////////////////////////////////////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typByte.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typByte,@ROB_byte_asig_byte); + opr:=typByte.CreateBinaryOperator('+=',2,'aadd'); //asignación-suma + opr.CreateOperation(typByte,@ROB_byte_aadd_byte); + opr:=typByte.CreateBinaryOperator('-=',2,'asub'); //asignación-resta + opr.CreateOperation(typByte,@ROB_byte_asub_byte); + + opr:=typByte.CreateBinaryOperator('+',4,'add'); //suma + opr.CreateOperation(typByte,@ROB_byte_add_byte); + opr.CreateOperation(typWord,@ROB_byte_add_word); + opr:=typByte.CreateBinaryOperator('-',4,'subs'); //suma + opr.CreateOperation(typByte,@ROB_byte_sub_byte); + opr:=typByte.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word + opr.CreateOperation(typByte,@ROB_byte_mul_byte); + opr.CreateOperation(typWord,@ROB_byte_mul_word); + + opr:=typByte.CreateBinaryOperator('DIV',5,'div'); //byte / byte ->byte + opr.CreateOperation(typByte,@ROB_byte_div_byte); + opr:=typByte.CreateBinaryOperator('MOD',5,'mod'); //byte mod byte ->byte + opr.CreateOperation(typByte,@ROB_byte_mod_byte); + + opr:=typByte.CreateBinaryOperator('AND',5,'and'); //suma + opr.CreateOperation(typByte,@ROB_byte_and_byte); + opr.CreateOperation(typBit ,@ROB_byte_and_bit); + opr:=typByte.CreateBinaryOperator('OR',4,'or'); //suma + opr.CreateOperation(typByte,@ROB_byte_or_byte); + opr.CreateOperation(typBit,@ROB_byte_or_bit); + opr:=typByte.CreateBinaryOperator('XOR',4,'xor'); //suma + opr.CreateOperation(typByte,@ROB_byte_xor_byte); + opr.CreateOperation(typBit,@ROB_byte_xor_bit); + + opr:=typByte.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_byte); + opr:=typByte.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + + opr:=typByte.CreateBinaryOperator('=',3,'equal'); + opr.CreateOperation(typByte,@ROB_byte_equal_byte); + opr:=typByte.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typByte,@ROB_byte_difer_byte); + opr.CreateOperation(typBit,@ROB_byte_difer_bit); + + opr:=typByte.CreateBinaryOperator('>',3,'great'); + opr.CreateOperation(typByte,@ROB_byte_great_byte); + opr:=typByte.CreateBinaryOperator('<',3,'less'); + opr.CreateOperation(typByte,@ROB_byte_less_byte); + + opr:=typByte.CreateBinaryOperator('>=',3,'gequ'); + opr.CreateOperation(typByte,@ROB_byte_gequ_byte); + opr:=typByte.CreateBinaryOperator('<=',3,'lequ'); + opr.CreateOperation(typByte,@ROB_byte_lequ_byte); + + opr:=typByte.CreateBinaryOperator('>>',5,'shr'); { TODO : Definir bien la precedencia } + opr.CreateOperation(typByte,@ROB_byte_shr_byte); + opr:=typByte.CreateBinaryOperator('<<',5,'shl'); + opr.CreateOperation(typByte,@ROB_byte_shl_byte); + ////////////////////////////////////////// + //////// Operaciones con Char //////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typChar.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typChar,@ROB_char_asig_char); + opr:=typChar.CreateBinaryOperator('=',3,'equal'); //asignación + opr.CreateOperation(typChar,@ROB_char_equal_char); + opr:=typChar.CreateBinaryOperator('<>',3,'difer'); //asignación + opr.CreateOperation(typChar,@ROB_char_difer_char); + + ////////////////////////////////////////// + //////// Operaciones con Word //////////// + {Los operadores deben crearse con su precedencia correcta} + + opr:=typWord.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typWord,@ROB_word_asig_word); + opr.CreateOperation(typByte,@ROB_word_asig_byte); + + opr:=typWord.CreateBinaryOperator('=',3,'equal'); //igualdad + opr.CreateOperation(typWord,@ROB_word_equal_word); + opr:=typWord.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typWord,@ROB_word_difer_word); + opr:=typWord.CreateBinaryOperator('>',3,'difer'); + opr.CreateOperation(typWord,@ROB_word_great_word); + + opr:=typWord.CreateBinaryOperator('+',4,'suma'); //suma + opr.CreateOperation(typWord,@ROB_word_add_word); + opr.CreateOperation(typByte,@ROB_word_add_byte); + + opr:=typWord.CreateBinaryOperator('-',4,'subs'); //suma + opr.CreateOperation(typWord,@ROB_word_sub_word); + + opr:=typWord.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word + opr.CreateOperation(typByte,@ROB_word_mul_byte); + opr.CreateOperation(typWord,@ROB_word_mul_word); + + opr:=typWord.CreateBinaryOperator('AND', 5, 'and'); //AND + opr.CreateOperation(typByte, @ROB_word_and_byte); + + opr:=typWord.CreateBinaryOperator('UMULWORD',5,'umulword'); //suma + opr.CreateOperation(typWord,@ROB_word_umulword_word); + + opr:=typWord.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + + ////////////////////////////////////////// + //////// Operaciones con DWord //////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typDWord.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typDWord,@ROB_dword_asig_dword); + opr.CreateOperation(typWord,@ROB_dword_asig_word); + opr.CreateOperation(typByte,@ROB_dword_asig_byte); + + opr:=typDWord.CreateBinaryOperator('=',3,'equal'); //igualdad + opr.CreateOperation(typDWord,@ROB_dword_equal_dword); + opr:=typDWord.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typDWord,@ROB_dword_difer_dword); + + opr:=typDWord.CreateBinaryOperator('+=',2,'asuma'); //suma + opr.CreateOperation(typDWord,@ROB_dword_aadd_dword); + + opr:=typDWord.CreateBinaryOperator('+',4,'suma'); //suma + opr.CreateOperation(typDWord,@ROB_dword_add_dword); +// opr.CreateOperation(typByte,@ROB_word_add_byte); + + //////// Operaciones con String //////////// + opr:=typString.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + opr:=typString.CreateBinaryOperator('+',4,'add'); //add + opr.CreateOperation(typString,@ROB_string_add_string); + opr.CreateOperation(typChar,@ROB_string_add_char); +end; +procedure TGenCod.DefPointerArithmetic(etyp: TxpEleType); +{Configura ls operaciones que definen la aritmética de punteros.} +var + opr: TxpOperator; +begin + //Asignación desde Byte y Puntero + opr:=etyp.CreateBinaryOperator(':=',2,'asig'); + opr.CreateOperation(typByte, @ROB_byte_asig_byte); + opr.CreateOperation(etyp , @ROB_byte_asig_byte); + //Agrega a los bytes, la posibilidad de ser asignados por punteros + typByte.operAsign.CreateOperation(etyp, @ROB_byte_asig_byte); + + opr:=etyp.CreateBinaryOperator('=',3,'equal'); //asignación + opr.CreateOperation(typByte, @ROB_byte_equal_byte); + opr:=etyp.CreateBinaryOperator('+',4,'add'); //suma + opr.CreateOperation(typByte, @ROB_pointer_add_byte); + opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta + opr.CreateOperation(typByte, @ROB_pointer_sub_byte); +end; +procedure TGenCod.DefinePointer(etyp: TxpEleType); +{Set operations that defines pointers aritmethic.} +var + opr: TxpOperator; +begin + //Asignación desde Byte y Puntero +// opr:=etyp.CreateBinaryOperator(':=',2,'asig'); +// opr.CreateOperation(typWord, @ROB_word_asig_word); +// opr.CreateOperation(etyp , @ROB_word_asig_word); +// //Agrega a los word, la posibilidad de ser asignados por punteros +// typWord.operAsign.CreateOperation(etyp, @ROB_word_asig_word); +// +// opr:=etyp.CreateBinaryOperator('=',3,'equal'); //asignación +// opr.CreateOperation(typWord, @ROB_word_equal_word); +// opr:=etyp.CreateBinaryOperator('+',4,'add'); //suma +// opr.CreateOperation(typWord, @ROB_pointer_add_word); +// opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta +// opr.CreateOperation(typWord, @ROB_pointer_sub_word); +// +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +// etyp.CreateUnaryPostOperator('^',6, 'deref', @ROU_derefPointer); //dereferencia +end; +procedure TGenCod.DefineArray(etyp: TxpEleType); +begin +// etyp.CreateField('length', @arrayLength, nil); +// etyp.CreateField('high' , @arrayHigh, nil); +// etyp.CreateField('low' , @arrayLow, nil); +// etyp.CreateField('item' , @GenCodArrayGetItem, @GenCodArraySetItem); +// etyp.CreateField('clear' , @GenCodArrayClear, nil); +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +end; +procedure TGenCod.ValidRAMaddr(addr: integer); +{Validate a physical RAM address. If error generate error.} +begin + if (addr<0) or (addr>$ffff) then begin + //Debe set Word + GenError(ER_INV_MEMADDR); + exit; + end; + if not pic.ValidRAMaddr(addr) then begin + GenError(ER_INV_MAD_DEV); + exit; + end; +end; +procedure TGenCod.CreateSystemElements; +{Inicia los elementos del sistema. Se ejecuta cada vez que se compila.} + procedure AddParam(var pars: TxpParFuncArray; parName: string; const srcPos: TSrcPos; + typ0: TxpEleType; adicDec: TxpAdicDeclar); + //Create a new parameter to the function. + var + n: Integer; + begin + //Add record to the array + n := high(pars)+1; + setlength(pars, n+1); + pars[n].name := parName; //Name is not important + pars[n].srcPos := srcPos; + pars[n].typ := typ0; //Agrega referencia + pars[n].adicVar.hasAdic := adicDec; + pars[n].adicVar.hasInit := false; + end; + function CreateSystemFunction(name: string; retType: TxpEleType; const srcPos: TSrcPos; + const pars: TxpParFuncArray; + compile: TProcExecFunction): TxpEleFun; + {Create a new system function in the current element of the Syntax Tree. + Returns the reference to the function created.} + var + fundec: TxpEleFunDec; + bod: TxpEleBody; + begin + //Add declaration + curLocation := locInterface; + fundec := AddFunctionDEC(name, retType, srcPos, pars, false); + //Implementation + {Note that implementation is added always after declarartion. It's not the usual + in common units, where all declarations are first} + curLocation := locImplement; + Result := AddFunctionIMP(name, retType, srcPos, fundec); + //Here varaibles can be added + {Create a body, to be uniform with normal function and for have a space where + compile code and access to posible variables or other elements.} + bod := CreateBody; + bod.srcDec := srcPos; + TreeElems.AddElement(bod); //Add Body (not need to open) + Result.compile := compile; //Set routine to geenrate code + TreeElems.CloseElement; //Close function implementation + end; +var + f: TxpEleFun; //índice para funciones + uni: TxpEleUnit; + pars: TxpParFuncArray; //Array of parameters + srcPos: TSrcPos; +begin + //////// Funciones del sistema //////////// + {Notar que las funciones del sistema no crean espacios de nombres.} +// f := CreateSysFunction('delay_ms', nil, @fun_delay_ms); +// f.adrr:=$0; +// f.compile := @codif_delay_ms; //rutina de compilación + //Funciones INLINE + f := CreateSysFunction('exit' , nil, @fun_Exit); + f := CreateSysFunction('Inc' , nil, @fun_Inc); + f := CreateSysFunction('Dec' , nil, @fun_Dec); + f := CreateSysFunction('Ord' , @FunctParam, @fun_Ord); + f := CreateSysFunction('Chr' , @FunctParam, @fun_Chr); + f := CreateSysFunction('Bit' , @FunctParam, @fun_Bit); + f := CreateSysFunction('Boolean' , @FunctParam, @fun_Bool); + f := CreateSysFunction('Byte' , @FunctParam, @fun_Byte); + f := CreateSysFunction('Word' , @FunctParam, @fun_Word); + f := CreateSysFunction('DWord' , @FunctParam, @fun_DWord); + f := CreateSysFunction('SetAsInput' ,nil, @fun_SetAsInput); + f := CreateSysFunction('SetAsOutput',nil, @fun_SetAsOutput); + f := CreateSysFunction('SetBank' , nil, @fun_SetBank); + //Funciones de sistema para operaciones aritméticas/lógicas complejas + //Multiplicación byte por byte a word + f_byte_mul_byte_16 := CreateSysFunction('byte_mul_byte_16', nil, nil); + f_byte_mul_byte_16.adrr:=$0; + f_byte_mul_byte_16.compile := @mul_byte_16; + //Multiplicación byte DIV, MOD byte a byte + f_byte_div_byte := CreateSysFunction('byte_div_byte', nil, nil); + f_byte_div_byte.adrr:=$0; + f_byte_div_byte.compile := @byte_div_byte; + //Multiplicación word por word a word + f_word_mul_word_16 := CreateSysFunction('word_mul_word_16', nil, nil); + f_word_mul_word_16.adrr:=$0; + f_word_mul_word_16.compile := @word_mul_word_16; + //Inicializa eventos y funciones del compilador + callDefinePointer:= @DefinePointer; + callDefineArray := @DefineArray; + callValidRAMaddr := @ValidRAMaddr; + callStartProgram := @Cod_StartProgram; + callEndProgram := @Cod_EndProgram; + //Create "System" Unit. Must be done once in First Pass + {Originally system functions were created in a special list and has a special treatment + but it implied a lot of work for manage the memory, linking, use of variables, and + optimization. Now we create a "system unit" like a real unit (more less) and we create + the system fucntion here, so we use the same code for linking, calling and optimization + that we use in common fucntions. Moreover, we can create private functions.} + uni := CreateUnit('-'); + TreeElems.AddElementAndOpen(uni); //Open Unit + //Create a fictional position + srcPos.fil := ''; + srcPos.row := 1; + srcPos.col := 1; + {Create variables for aditional Working register. Note that this variables are + accesible (and usable) from the code, because the name assigned is a common variable.} + //Create register H as variable + H := AddVariable('__H', typByte, srcPos); + H.adicPar.hasAdic := decNone; + H.adicPar.hasInit := false; + H.location := locInterface; //make visible + //Create register E as variable + E := AddVariable('__E', typByte, srcPos); + E.adicPar.hasAdic := decNone; + E.adicPar.hasInit := false; + E.location := locInterface; //make visible + //Create register U as variable + U := AddVariable('__U', typByte, srcPos); + U.adicPar.hasAdic := decNone; + U.adicPar.hasInit := false; + U.location := locInterface; //make visible + + //Create system function "delay_ms" with byte parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typByte, decRegis); //Add parameter + f_delay_msB := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms); + AddCallerTo(H, f.BodyNode); {Adds this dependency because, like this is a system function, + won`t be compiled in the First pass, that is when references are created. + As we need to use W. We declare a call.} + //Create system function "delay_ms" with word parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typWord, decRegis); //Add parameter + f_delay_msW := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms2); + AddCallerTo(H, f.BodyNode); //Adds this dependency. +// +// //Multiply system function +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'A', srcPos, typByte, decNone); //Add parameter +// AddParam(pars, 'B', srcPos, typByte, decNone); //Add parameter +// f_byte_mul_byte_16 := CreateSystemFunction('byte_mul_byte_16', typWord, srcPos, pars, @byte_mul_byte_16); +// AddCallerTo(H, f_byte_mul_byte_16.BodyNode); //We'll need to return result. +// +// //Word shift left +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'n', srcPos, typByte, decRegisX); //Parameter counter shift +// f_word_shift_l := CreateSystemFunction('word_shift_l', typWord, srcPos, pars, @word_shift_l); +// AddCallerTo(H, f_word_shift_l.BodyNode); //We'll need to return result. +// + TreeElems.CloseElement; //Close Unit +end; +end. + diff --git a/Source/GenCod_PIC16.pas b/Source/GenCod_PIC16.pas new file mode 100644 index 00000000..9169af61 --- /dev/null +++ b/Source/GenCod_PIC16.pas @@ -0,0 +1,4006 @@ +{ +Implementación de un compilador sencillo de Pascal para microcontroladores PIC de +rango medio. +Esta implementación no permitirá recursividad, por las limitaciones de recursos de los +dispositivos más pequeños, y por la dificultad adicional en la conmutación de bancos +para los dispositivos más grandes. +El compilador está orientado a uso de registros (solo hay uno) y memoria RAM, pero se +implementa una especie de estructura de pila para la evaluación de expresiones +aritméticas con cierta complejidad y para el paso de parámetros a las funciones. +Solo se manejan datos de tipo bit, boolean, byte y word, y operaciones sencillas. +} +{La arquitectura definida aquí contempla: + +Un registro de trabajo W, de 8 bits (el acumulador del PIC). +Dos registros adicionales H y L de 8 bits cada uno (Creados a demanda). + +Los resultados de una expresión se dejarán en: + +1. En Bit Z o C, de STATUS -> Si el resultado es de tipo bit o boolean. +2. El acumulador W -> Si el resultado es de tipo byte o char. +3. Los registros (H,w) -> Si el resultado es tipo word. +4. Los registros (U,E,H,w) -> Si el resultado es tipo dword. + +Opcionalmente, si estos registros ya están ocupados, se guardan primero en la pila, o se +usan otros registros auxiliares. + +Despues de ejecutar alguna operación booleana que devuelva una expresión, se +actualizan las banderas: BooleanBit y BooleanInverted, que implican que: +* Si BooleanInverted es TRUE, significa que la lógica de C o Z está invertida. +* La bandera BooleanBit, indica si el resultado se deja en C o Z. + +Por normas de Xpres, se debe considerar que: +* Todas las operaciones recibe sus dos parámetros en las variables p1 y p2^. +* El resultado de cualquier expresión se debe dejar indicado en el objeto "res". +* Los valores enteros y enteros sin signo se cargan en valInt +* Los valores booleanos se cargan en "valBool" +* Los valores string se cargan en "valStr" + +Las rutinas de operación, deben devolver su resultado en "res". +Para mayor información, consultar la doc. técnica. + } +unit GenCod_PIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, Graphics, LCLType, LCLProc, + SynFacilBasic, XpresTypesPIC, XpresElementsPIC, Pic16Utils, GenCodBas_PIC16, + CompBase, Globales, MisUtils, XpresBas; +type + { TGenCod } + TGenCod = class(TGenCodBas) + private + procedure codif_delay_ms2(fun: TxpEleFun); + procedure DefineArray(etyp: TxpEleType); + procedure DefinePointer(etyp: TxpEleType); + procedure ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ValidRAMaddr(addr: integer); + private //Operaciones con Bit +// f_byteXbyte_byte: TxpEleFun; //índice para función + f_delay_msB: TxpELeFun; + f_delay_msW: TxpELeFun; + f_byte_mul_byte_16: TxpEleFun; //índice para función + f_byte_div_byte: TxpEleFun; //índice para función + f_word_mul_word_16: TxpEleFun; //índice para función + procedure byte_div_byte(fun: TxpEleFun); + procedure mul_byte_16(fun: TxpEleFun); + procedure CopyInvert_C_to_Z; + procedure fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure ROB_bit_asig_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_and_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_or_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_or_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_xor_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_xor_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_equ_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_equ_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_dif_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bit_dif_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROU_not_bit(Opr: TxpOperator; SetRes: boolean); + procedure ROU_not_byte(Opr: TxpOperator; SetRes: boolean); + procedure ROU_address(Opr: TxpOperator; SetRes: boolean); + + procedure ROB_word_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_umulword_word(Opt: TxpOperation; SetRes: boolean); + procedure word_mul_word_16(fun: TxpEleFun); + private //Operaciones con boolean + procedure ROB_bool_asig_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROU_not_bool(Opr: TxpOperator; SetRes: boolean); + procedure ROB_bool_and_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_or_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_xor_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_equ_bool(Opt: TxpOperation; SetRes: boolean); + procedure ROB_bool_dif_bool(Opt: TxpOperation; SetRes: boolean); + protected //Operaciones con byte + procedure ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_sub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_add_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_and_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_and_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_or_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_or_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_xor_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_xor_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_equal_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_difer_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_difer_bit(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_gequ_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); + procedure CodifShift_by_W(target: TPicRegister; toRight: boolean); + procedure ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con Word + procedure ROB_word_asig_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_equal_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_difer_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con DWord + procedure ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_asig_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_difer_dword(Opt: TxpOperation; SetRes: boolean); + procedure ROB_dword_equal_dword(Opt: TxpOperation; SetRes: boolean); + private //Operaciones con Char + procedure ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_char_difer_char(Opt: TxpOperation; SetRes: boolean); + + procedure ROB_string_add_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_string_add_string(Opt: TxpOperation; SetRes: boolean); + protected //Operaciones con punteros + procedure ROB_pointer_add_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_pointer_sub_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROU_derefPointer(Opr: TxpOperator; SetRes: boolean); + private //Funciones internas. + procedure codif_1mseg; + procedure codif_delay_ms(fun: TxpEleFun); + procedure expr_end(posExpres: TPosExpres); + procedure expr_start; + procedure fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); + protected + procedure Cod_StartProgram; + procedure Cod_EndProgram; + procedure CreateSystemElements; + public + procedure StartSyntax; + procedure DefCompiler; + procedure DefPointerArithmetic(etyp: TxpEleType); + end; + + procedure SetLanguage; +implementation +var + MSG_NOT_IMPLEM, MSG_INVAL_PARTYP, MSG_UNSUPPORTED, MSG_CANNOT_COMPL, + ER_INV_MAD_DEV, ER_INV_MEMADDR: string; + +procedure SetLanguage; +begin + GenCodBas_PIC16.SetLanguage; + {$I ..\language\tra_GenCod.pas} +end; +procedure TGenCod.CopyInvert_C_to_Z; +begin + //El resultado está en C (invertido), hay que pasarlo a Z + kMOVLW($01 << _C); //carga máscara de C + _ANDWF(_STATUS, toW); //el resultado está en Z, corregido en lógica. + InvertedFromC := true; //Indica que se ha hecho Z = 'C. para que se pueda optimizar +end; +////////////rutinas obligatorias +procedure TGenCod.Cod_StartProgram; +//Codifica la parte inicial del programa +begin + //Code('.CODE'); //inicia la sección de código +end; +procedure TGenCod.Cod_EndProgram; +//Codifica la parte inicial del programa +begin + _SLEEP(); //agrega instrucción final + //Code('END'); //inicia la sección de código +end; +procedure TGenCod.expr_start; +//Se ejecuta siempre al iniciar el procesamiento de una expresión. +begin + //Inicia banderas de estado para empezar a calcular una expresión + W.used := false; //Su ciclo de vida es de instrucción + Z.used := false; //Su ciclo de vida es de instrucción +// H.used := false; //Su ciclo de vida es de instrucción + RTstate := nil; //Inicia con los RT libres. + //Limpia tabla de variables temporales + varFields.Clear; + //Guarda información de ubicación, en la ubicación actual + pic.addPosInformation(cIn.curCon.row, cIn.curCon.col, cIn.curCon.idCtx); +end; +procedure TGenCod.expr_end(posExpres: TPosExpres); +//Se ejecuta al final de una expresión, si es que no ha habido error. +begin + if exprLevel = 1 then begin //el último nivel +// Code(' ;fin expres'); + end; + //Muestra informa +end; +////////////operaciones con Bit y Boolean +{$I .\GenCod.inc} +//////////// Operaciones con Byte +procedure TGenCod.ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Realiza la asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //caso especial + kCLRF(byte1); + end else begin + kMOVLW(value2); + kMOVWF(byte1); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kMOVWF(byte1); + end; + stExpres: begin //ya está en w + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + if value2=0 then begin + //caso especial + kCLRF(INDF.addr); + end else begin + kMOVLW(value2); + kMOVWF(INDF.addr); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + kMOVWF(INDF.addr); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //Opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Caso especial de asignación a puntero desreferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + if value2=0 then begin + //caso especial + kCLRF(INDF.addr); + end else begin + kMOVLW(value2); + kMOVWF(INDF.addr); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + kMOVWF(INDF.addr); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); +{Operación de asignación suma: +=} +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Caso especial de asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVLW(value2); + kADDWF(byte1, toF); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kADDWF(byte1, toF); + end; + stExpres: begin //ya está en w + kADDWF(byte1, toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _ADDWF(0, toF); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _ADDWF(0, toF); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _ADDWF(0, toF); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + //Caso especial de asignación a puntero dereferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _ADDWF(0, toF); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _ADDWF(0, toF); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _ADDWF(0, toF); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + rVar: TxpEleVar; +begin + //Simplifcamos el caso en que p2, sea de tipo p2^ + if not ChangePointerToExpres(p2^) then exit; + //Caso especial de asignación + if p1^.Sto = stVariab then begin + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + //Asignación a una variable + case p2^.Sto of + stConst : begin + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVLW(value2); + kSUBWF(byte1, toF); + end; + end; + stVariab: begin + kMOVF(byte2, toW); + kSUBWF(byte1, toF); + end; + stExpres: begin //ya está en w + kSUBWF(byte1, toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stExpRef then begin + {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero + cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _SUBWF(0, toF); + end; + end; + stVariab: begin + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _SUBWF(0, toF); + end; + stExpres: begin + //La dirección está en la pila y la expresión en W + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + rVar := GetVarByteFromStk; + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _SUBWF(0, toF); + aux.used := false; + exit; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else if p1^.Sto = stVarRef then begin + //Asignación a una variable + SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal + case p2^.Sto of + stConst : begin + //Asignación normal + if value2=0 then begin + //Caso especial. No hace nada + end else begin + //Caso especial de asignación a puntero dereferenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); + _SUBWF(0, toF); + end; + end; + stVariab: begin + //Caso especial de asignación a puntero derefrrenciado: variable^ + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(byte2, toW); + _SUBWF(0, toF); + end; + stExpres: begin //ya está en w + //Caso especial de asignación a puntero derefrrenciado: variable^ + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //Salva W (p2) + //Apunta con p1 + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + //Asignación normal + kMOVF(aux.addr, toW); + _SUBWF(0, toF); + aux.used := false; + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; + end else begin + GenError('Cannot assign to this Operand.'); exit; + end; +end; +procedure TGenCod.ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + SetROBResultConst_byte(value1+value2); //puede generar error + end; + stConst_Variab: begin + if value1 = 0 then begin + //Caso especial + SetROBResultVariab(p2^.rVar); //devuelve la misma variable + exit; + end else if value1 = 1 then begin + //Caso especial + SetROBResultExpres_byte(Opt); + kINCF(byte2, toW); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + kADDWF(byte2, toW); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDLW(value1); //deja en W + end; + stVariab_Const: begin + ExchangeP1_P2; + ROB_byte_add_byte(Opt, true); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kADDWF(byte1, toW); //deja en W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDWF(byte1, toW); //deja en W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDLW(value2); //deja en W + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kADDWF(byte2, toW); //deja en W + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //La expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kADDWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_add_word(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stExpres_Expres:begin + {Este es el único caso que no se puede invertir, por la posición de los operandos en + la pila.} + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_add_word(Opt, SetRes); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + //Para los otros casos, funciona + ExchangeP1_P2; //Invierte los operandos + ROB_word_add_byte(Opt, SetRes); //Y llama a la función opuesta + end; +end; +procedure TGenCod.ROB_byte_sub_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //suma de dos constantes. Caso especial + SetROBResultConst_byte(value1-value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kSUBLW(value1); //K - W -> W + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBLW(value1); //K - W -> W + end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); + kMOVLW(value2); + kSUBWF(byte1, toW); //F - W -> W + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte2, toW); + kSUBWF(byte1, toW); //F - W -> W + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBWF(byte1, toW); //F - W -> W + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBLW(value2); //K - W -> W + kSUBLW(0); //K - W -> W //invierte W + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kSUBWF(byte2, toW); //F - W -> W + kSUBLW(0); //K - W -> W //invierte W + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + kSUBWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + FreeStkRegisterByte; //libera pila porque ya se uso + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.mul_byte_16(fun: TxpEleFun); +//E * W -> [H:W] Usa registros: W,H,E,U +//Basado en código de Andrew Warren http://www.piclist.com +var + LOOP: Word; +begin + typDWord.DefineRegister; //Asegura que exista W,H,E,U + _CLRF (H.offs); + _CLRF (U.offs); + _BSF (U.offs,3); //8->U + _RRF (E.offs,toF); +LOOP:=_PC; + _BTFSC (_STATUS,0); + _ADDWF (H.offs,toF); + _RRF (H.offs,toF); + _RRF (E.offs,toF); + _DECFSZ(U.offs, toF); + _GOTO (LOOP); + //Realmente el algortimo es: E*W -> [H:E], pero lo convertimos a: E*W -> [H:W] + _MOVF(E.offs, toW); + _RETURN; +end; +procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end else if value1=1 then begin //caso especial + SetROBResultVariab(p2^.rVar); + exit; + end else if value1=2 then begin + SetROBResultExpres_word(Opt); + _BANKSEL(H.bank); + _CLRF(H.offs); + _BCF(_STATUS, _C); + kRLF(byte2, toW); + _BANKSEL(H.bank); + _RLF(H.offs, toF); + exit; + end; + SetROBResultExpres_word(Opt); + kMOVF(byte2, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVLW(value1); + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_word(opt); + kMOVWF(E.addr); + kMOVLW(value1); + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Const: begin + SetROBResultExpres_word(opt); + kMOVF(byte1, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVLW(value2); + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1, toW); + _BANKSEL(E.bank); + _MOVWF(E.offs); + kMOVF(byte2, toW); + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p2 -> E + kMOVF(byte1, toW); //p1 -> W + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p1 -> E + kMOVLW(value2); //p2 -> W + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_word(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //p1 -> E + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_mul_byte_16.adrr); + AddCallerTo(f_byte_mul_byte_16); + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + _BANKSEL(E.bank); + _MOVWF(E.offs); //p2 -> E + kMOVF(rVar.addr0, toW); //p1 -> W + _CALL(f_byte_mul_byte_16.adrr); + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_mul_byte_16); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else if value1*value2 < $10000 then begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end else begin + SetROBResultConst_dword((value1*value2) and $FFFFFFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; +// stConst_Variab: begin +// if value1=0 then begin //caso especial +// SetROBResultConst_byte(0); +// exit; +// end else if value1=1 then begin //caso especial +// SetROBResultVariab(p2^.rVar); +// exit; +// end else if value1=2 then begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(H.bank); +// _CLRF(H.offs); +// _BCF(STATUS, _C); +// _BANKSEL(P2^.bank); +// _RLF(p2^.offs, toW); +// _BANKSEL(H.bank); +// _RLF(H.offs, toF); +// exit; +// end; +// SetROBResultExpres_word(Opt); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Const: begin +// SetROBResultExpres_word(opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value2); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Variab:begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Const: begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// kMOVLW(value2); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Expres:begin +// SetROBResultExpres_word(Opt); +// //la expresión p1 debe estar salvada y p2 en el acumulador +// rVar := GetVarByteFromStk; +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(rVar.addr0.bank); +// _MOVF(rVar.addr0.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido +// {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una +// variable) temporal, si se tuviera una rutina de multiplicación que compilara a +// partir de la direccion de una variable (en este caso de la pila, que se puede +// modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} +// AddCallerTo(f_byte_mul_byte_16); +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.byte_div_byte(fun: TxpEleFun); +//H div W -> E Usa registros: W,H,E,U +//H mod W -> U Usa registros: W,H,E,U +//Basado en código del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" E. Palacios, F. Remiro y L.J. López +var + Arit_DivideBit8: Word; + aux, aux2: TPicRegister; +begin + typDWord.DefineRegister; //Asegura que exista W,H,E,U + aux := GetAuxRegisterByte; //Pide registro auxiliar +// aux2 := GetAuxRegisterByte; //Pide registro auxiliar + aux2 := FSR; //utiliza FSR como registro auxiliar + _MOVWF (aux.offs); + _clrf (E.offs); //En principio el resultado es cero. + _clrf (U.offs); + kMOVLW (8); //Carga el contador. + _movwf (aux2.offs); +Arit_DivideBit8 := _PC; + _rlf (H.offs,toF); + _rlf (U.offs,toF); // (U.offs) contiene el dividendo parcial. + _movf (aux.offs,toW); + _subwf (U.offs,toW); //Compara dividendo parcial y divisor. + _btfsc (_STATUS,_C); //Si (dividendo parcial)>(divisor) + _movwf (U.offs); //(dividendo parcial) - (divisor) --> (dividendo parcial) + _rlf (E.offs,toF); //Desplaza el cociente introduciendo el bit apropiado. + _decfsz (aux2.offs,toF); + _goto (Arit_DivideBit8); + _movf (E.offs,toW); //Devuelve también en (W) + _RETURN; +// aux2.used := false; + aux.used := false; +end; +procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultConst_byte(value1 div value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + _BANKSEL(E.bank); + _MOVWF(E.offs); //guarda divisor + + kMOVLW(value1); + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //divisor + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Const: begin + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVLW(value2); + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + //guarda divisor + _BANKSEL(E.bank); + _MOVWF(E.offs); + //p1 -> H + kMOVF(byte1, toW); //p1 -> W + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //divisor + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + _BANKSEL(H.bank); + _MOVWF(H.offs); //p1 -> H + kMOVLW(value2); //p2 -> W + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + _BANKSEL(H.bank); + _MOVWF(H.offs); //p1 -> H + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_div_byte.adrr); + AddCallerTo(f_byte_div_byte); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + //guarda divisor + _BANKSEL(E.bank); + _MOVWF(E.offs); + //pila -> H + kMOVF(rVar.addr0, toW); //p1 -> W + _BANKSEL(H.bank); + _MOVWF(H.offs); //dividendo + //divisor -> W + _BANKSEL(E.bank); + _MOVF(E.offs, toW); //p2 -> E + + _CALL(f_byte_div_byte.adrr); + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_div_byte); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); +var + rVar: TxpEleVar; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const : begin //producto de dos constantes. Caso especial + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultConst_byte(value1 mod value2); //puede generar error + exit; //sale aquí, porque es un caso particular + end; + stConst_Variab: begin + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVLW(value1); + kMOVWF(H.addr); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + //¿Y el banco de salida? + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1=0 then begin //caso especial + SetROBResultConst_byte(0); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVWF(E.addr); //guarda divisor + kMOVLW(value1); + kMOVWF(H.addr); //dividendo + + kMOVF(E.addr, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Const: begin + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + kMOVWF(H.addr); + kMOVLW(value2); + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); + kMOVF(byte1, toW); + kMOVWF(H.addr); + kMOVF(byte2, toW); + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + //guarda divisor + kMOVWF(E.addr); + //p1 -> H + kMOVF(byte1, toW); //p1 -> W + kMOVWF(H.addr); //dividendo + + kMOVF(E.addr, toW); //divisor + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 0 then begin + GenError('Cannot divide by zero'); + exit; + end; + SetROBResultExpres_byte(Opt); + kMOVWF(H.addr); //p1 -> H + kMOVLW(value2); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); + kMOVWF(H.addr); //p1 -> H + kMOVF(byte2, toW); //p2 -> W + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + AddCallerTo(f_byte_div_byte); + end; + stExpres_Expres:begin + SetROBResultExpres_byte(Opt); + //la expresión p1 debe estar salvada y p2 en el acumulador + rVar := GetVarByteFromStk; + //guarda divisor + kMOVWF(E.addr); + //pila -> H + kMOVF(rVar.addr0, toW); //p1 -> W + kMOVWF(H.addr); //dividendo + //divisor -> W + kMOVF(E.addr, toW); //p2 -> E + _CALL(f_byte_div_byte.adrr); + kMOVF(U.addr, toW); //Resultado en W + FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido + {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una + variable) temporal, si se tuviera una rutina de multiplicación que compilara a + partir de la direccion de una variable (en este caso de la pila, que se puede + modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} + AddCallerTo(f_byte_div_byte); + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; + +procedure TGenCod.ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); +var + tmp: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 > value2); + end; + stConst_Variab: begin + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVLW(value1); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en W + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + //Optimiza rutina, usando: A>B equiv. NOT (B<=A-1) + //Se necesita asegurar que p1, es mayo que cero. + SetROBResultExpres_bool(Opt, true); //invierte la lógica + //p2, ya está en W + kSUBLW(value1-1); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + end; + stVariab_Const: begin + if value2 = 255 then begin + //Nada es mayor que 255 + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVF(byte1, toW); + kSUBLW(value2); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kMOVF(byte1, toW); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; //Se pide registro auxiliar + kMOVWF(tmp.addr); //guarda resultado de expresión + //Ahora es como stVariab_Variab + kMOVF(byte1, toW); + kSUBWF(tmp.addr, toW); //Si p1 > tmp: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + tmp.used := false; //libera + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + if value2 = 255 then begin + //Nada es mayor que 255 + SetROBResultConst_bool(false); +// GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + // p1, ya está en W + kSUBLW(value2); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + kSUBWF(byte2, toW); //Si p1 > p2: C=0. + CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) + end; + stExpres_Expres:begin + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_great_byte(Opt, true); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + //A < B es lo mismo que B > A + case stoOperation of + stExpres_Expres:begin + {Este es el único caso que no se puede invertir, por la posición de los operandos en + la pila.} + //la expresión p1 debe estar salvada y p2 en el acumulador + p1^.SetAsVariab(GetVarByteFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_byte_less_byte(Opt, SetRes); + FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido + end; + else + //Para los otros casos, funciona + ExchangeP1_P2; + ROB_byte_great_byte(Opt, SetRes); + end; +end; +procedure TGenCod.ROB_byte_gequ_byte(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_less_byte(Opt, SetRes); + res.Invert; +end; +procedure TGenCod.ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_great_byte(Opt, SetRes); + res.Invert; +end; +procedure TGenCod.CodifShift_by_W(target: TPicRegister; toRight: boolean); +{Desplaza el registro "aux", las veces indicadas en el registro W. +Deja el resultado en W. +Deja el banco, en el banco de "aux"} +{ TODO : Tal vez se pueda optimizar usando una rutina que rote W, las veces indicadas +en un registro, o se podría generar el código usando la rutina de WHILE. } +var + loop1: Word; + dg: integer; + bnkExp1: Byte; +begin + bnkExp1 := CurrBank; //Guarda el banco al entrar la rutina + _ADDLW(1); //corrige valor inicial +loop1 := _PC; + _ADDLW(255); //W=W-1 (no hay instrucción DECW) + _BTFSC(Z.offs, Z.bit); + _GOTO_PEND(dg); //Dio, cero, termina + //Desplaza + if toRight then kSHIFTR(target.addr, toF) else kSHIFTL(target.addr, toF); + _GOTO(loop1); + //Terminó el lazo + pic.codGotoAt(dg, _PC); //termina de codificar el salto + {El valor del banco RAM al terminar de ejecutarse esta rutina sería: + * El mismo banco antes de entrar -> Si el lazo no se ejecuto ninguna vez. + * El mismo banco de "target" -> Si el lazo se ejecuta al menos una vez. + Si en "bnkExp1" almacenamos el banco al inicio de la rutina, se concluye entonces + que: + * Si "bnkExp1" es igual al banco de "target", No se generan instrucciones de cambio de + banco y todo trabaja pues no se altera "CurrBank", + * Si "bnkExp1" es diferente al banco de "target", entonces se generarán instrucciones + de cambio de banco en el lazo, pero como no sabemos si se ejecutarán, por seguridad + generamos código obligatorio para fijar siempre el banco de salida en el de "target".} + if bnkExp1 <> target.bank then begin + CurrBank := 255; //Para forzar a generar cambio de banco + _BANKSEL(target.bank); //quedará en este banco + end; +end; +procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la derecha +var + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_byte(value1 >> value2); + end; +// stConst_Variab: begin +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTR(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + //Caso general + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + //lazo de rotación + CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVF(byte2, toW); + //lazo de rotación + CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + //solo devuelve lo mismo en W + end else if value2 = 1 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //devuelve desplazado en W + aux.used := false; + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + //lazo de rotación + CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// end; +// stExpres_Expres:begin +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la izquierda +var + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_byte(value1 << value2); + end; +// stConst_Variab: begin +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// end; + stVariab_Const: begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTL(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + //lazo de rotación + CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; + end; + stVariab_Variab:begin + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVF(byte1, toW); + kMOVWF(aux.addr); + //copia p2 a W + kMOVF(byte2, toW); + //lazo de rotación + CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en W + SetROBResultExpres_byte(Opt); //Se pide Z para el resultado + //Verifica casos simples + if value2 = 0 then begin + //solo devuelve lo mismo en W + end else if value2 = 1 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //devuelve desplazado en W + aux.used := false; + end else if value2 = 2 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 3 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else if value2 = 4 then begin + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W + aux.used := false; + end else begin + aux := GetAuxRegisterByte; + //copia p1 a "aux" + kMOVWF(aux.addr); + //copia p2 a W + kMOVLW(value2); + //lazo de rotación + CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W + aux.used := false; + end; + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// end; +// stExpres_Expres:begin +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +//////////// Operaciones con Word +procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); + procedure codVariab_Const; + {Codifica el caso variable (p1) - constante (p2)} + var + sale: integer; + begin + if value2 = $FFFF then begin + //Nada es mayor que $FFFF + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + end else begin + //Compara byte alto + kMOVF(byte1H, toW); + kSUBLW(value2H); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + kSUBLW(value2L); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; + end; + procedure codVariab_Variab; + var + sale: integer; + begin + //Compara byte alto + kMOVF(byte1H, toW); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + kSUBWF(byte2L, toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; +var + tmp, aux: TPicRegister; + sale: integer; + varTmp: TxpEleVar; +begin + case stoOperation of + stConst_Const: begin //compara constantes. Caso especial + SetROBResultConst_bool(value1 > value2); + end; + stConst_Variab: begin + if value1 = 0 then begin + //0 es mayor que nada + SetROBResultConst_bool(false); + GenWarn('Expression will always be FALSE or TRUE.'); + {No se define realmente el mensaje (si es con TRUE o FALSE), porque + ROB_word_great_word(), es también llamado, por Oper_word_lequ_word para con + lógica invertida} + end else begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + //Compara byte alto + kMOVLW(value1H); + kSUBWF(byte2H, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVLW(value1L); + kSUBWF(byte2L, toW); //p2-p1 + _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; + end; + stConst_Expres: begin //la expresión p2 se evaluó p2 esta en W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVLW(value1H); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVLW(value1L); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + tmp.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + codVariab_Const; + end; + stVariab_Variab:begin + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + codVariab_Variab; + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + tmp := GetAuxRegisterByte; + _BANKSEL(tmp.bank); + _MOVWF(tmp.offs); //salva byte bajo de Expresión + //Compara byte alto + kMOVF(byte1H, toW); + _BANKSEL(H.bank); //verifica banco destino + _SUBWF(H.offs, toW); //p2-p1 + _BTFSS(Z.offs, Z.bit); + _GOTO_PEND(sale); //no son iguales + //Son iguales, comparar el byte bajo + kMOVF(byte1L, toW); + _BANKSEL(tmp.bank); //verifica banco destino + _SUBWF(tmp.offs,toW); //p2-p1 + tmp.used := false; +_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. + CopyInvert_C_to_Z; //Pasa a Z + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //guarda W + varTmp := NewTmpVarWord(aux.addr, H.addr); //Crea variable temporal + p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable + codVariab_Const; //Lo evalúa como stVariab_Const + varTmp.Destroy; + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en H,W + SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //guarda W + varTmp := NewTmpVarWord(aux.addr, H.addr); //Crea variable temporal + p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable + codVariab_Variab; //Lo evalúa como stVariab_Variab; + varTmp.Destroy; + aux.used := false; + end; + stExpres_Expres:begin + //La expresión p1, debe estar salvada y p2 en (H,W) + p1^.SetAsVariab(GetVarWordFromStk); + //Luego el caso es similar a variable-expresión + ROB_word_great_word(Opt, SetRes); + FreeStkRegisterWord; + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + if value1+value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else begin + SetROBResultConst_word(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); +{ aux := GetUnusedByteRegister; //Pide un registro libre + kMOVLW(value1L); //Carga menos peso del dato 1 + _addwf(byte2L,toW); //Suma menos peso del dato 2 + _movwf(aux); //Almacena el resultado + kMOVLW(value1H); //Carga más peso del dato 1 + _btfsc(STATUS,_C); //Hubo acarreo anterior? + _addlw(1); //Si, suma 1 al acumulador + _addwf(byte2H,toW); //Suma más peso del dato 2 + _movwf(H); //Guarda el resultado + _movf(aux,toW); //deja byte bajo en W + aux.Used := false; +} + //versión más corta que solo usa H, por validar + kMOVLW(value1H); //Carga más peso del dato 1 + kADDWF(byte2H, toW); //Suma más peso del dato 2 + _movwf(H.offs); //Guarda el resultado + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value1H); //Carga más peso del dato 1 + _addwf(H.offs,toF); //Suma y guarda + kMOVLW(value1L); //Carga menos peso del dato 1 + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVLW(value2H); //Carga más peso del dato 1 + kADDWF(byte1H, toW); //Suma más peso del dato 2 + _MOVWF(H.offs); //Guarda el resultado + kMOVLW(value2L); //Carga menos peso del dato 1 + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga mayor peso del dato 1 + kADDWF(byte2H, toW); //Suma mayor peso del dato 2 + _MOVWF(H.offs); //Guarda mayor peso del resultado + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte bajo + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _addwf(H.offs,toF); //Suma y guarda + //Siguiente byte + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value2H); //Carga más peso del dato 1 + _addwf(H.offs,toF); //Suma y guarda + kMOVLW(value2L); //Carga menos peso del dato 1 + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _movwf(aux.offs); //guarda byte bajo + kMOVF(byte2H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _addwf(H.offs,toF); //Suma y guarda + kMOVF(byte2L, toW); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_add_word(Opt, SetRes); + FreeStkRegisterWord; //libera pila, obtiene dirección + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + case stoOperation of + stConst_Const: begin + if value1+value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else begin + SetROBResultConst_word(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); + //versión más corta que solo usa _H, por validar + kMOVLW(value1H); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte bajo + kMOVLW(value1H); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); + kMOVLW(value1L); //Carga menos peso del dato 1 + _BANKSEL(aux.bank); + _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); //se cambia primero el banco por si acaso + _MOVWF(H.offs); //Guarda el resultado + kMOVLW(value2L); + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Variab:begin + SetROBResultExpres_word(Opt); + kMOVF(byte1H, toW); //Carga más peso del dato 1 + _BANKSEL(H.bank); + _MOVWF(H.offs); + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? + _INCF(H.offs, toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (_H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _BANKSEL(aux.bank); + _movwf(aux.offs); //guarda byte de expresión + kMOVF(byte1H, toW); //Carga Hbyte del dato 1 + _BANKSEL(H.bank); + _movwf(H.offs); //Lo deja para devolver en H + _BANKSEL(aux.bank); + _MOVF(aux.offs,toW); //recupera byte de expresión + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + kADDLW(value2); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. + _btfsc(_STATUS,_C); //Hubo acarreo anterior? + _incf(H.offs, toF); + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_add_byte(Opt, SetRes); + FreeStkRegisterWord; //libera pila + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; +begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const: begin + if value1-value2 < 0 then begin + genError('Numeric value exceeds a word range.'); + exit; + end; + if value1-value2 <256 then begin + //Optimiza + SetROBResultConst_byte(value1-value2); + end else begin + SetROBResultConst_word(value1-value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_word(Opt); + kMOVF (byte2H, toW); //p2->w + kSUBLW(value1H); //p1 - W -W + kMOVWF(H.addr); + kMOVF (byte2L, toW); //p2-W + kSUBLW(value1L); //p1-W->w + _BANKSEL(H.bank); //Para fijar el banco de salida de la condicional + _BTFSS(_STATUS, _C); + _DECF (H.offs, toF); + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; + kMOVWF(aux.addr); + kMOVF(H.addr, toW); //p2->w + kSUBLW(value1H); //p1 - W -W + kMOVWF(H.addr); + kMOVF (aux.addr, toW); //p2-W + kSUBLW(value1L); //p1-W->w + _BANKSEL(H.bank); //Para fijar el banco de salida de la condicional + _BTFSS(_STATUS, _C); + _DECF (H.offs, toF); + aux.used := false; + end; + stVariab_Const: begin + SetROBResultExpres_word(Opt); + kMOVLW(value2H); + kSUBWF(byte1H,toW); + _movwf(H.offs); + kMOVLW(value2L); + kSUBWF(byte1L, toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + end; + stVariab_Variab:begin //p1 - p2 + SetROBResultExpres_word(Opt); + kMOVF (byte2H, toW); + kSUBWF(byte1H,toW); + _movwf(H.offs); + kMOVF (byte2L, toW); + kSUBWF(byte1L,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + end; + stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + _movf (H.offs,toW); + kSUBWF(byte1H,toW); + _movwf(H.offs); + _movf (aux.offs,toW); + kSUBWF(byte1L, toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + kMOVLW(value2H); + _subwf(H.offs, toF); + kMOVLW(value2L); + _subwf(aux.offs,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) + SetROBResultExpres_word(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); + kMOVF(byte2H, toW); + _subwf(H.offs, toF); + kMOVF(byte2L, toW); + _subwf(aux.offs,toW); + _btfss(_STATUS, _C); + _decf(H.offs,toF); + aux.used := false; + end; + stExpres_Expres:begin + SetROBResultExpres_word(Opt); + //p1 está salvado en pila y p2 en (_H,W) + p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable + //Luego el caso es similar a stVariab_Expres + ROB_word_sub_word(Opt, SetRes); + FreeStkRegisterWord; //libera pila, obtiene dirección + end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.word_mul_word_16(fun: TxpEleFun); +var + SYSTMP00, SYSTMP01, SYSTMP02: TPicRegister; + MUL16LOOP: Word; +begin + //[H_W] = [H_W] x [E_U] + // RES = OP_A x OP_B + //SYSTMP00 variable temporal. Contiene RES.LOW (resultado.LOW de la multiplicación) + //SYSTMP01 variable temporal. Contiene OP_A.LOW (inicialmente W) + //SYSTMP02 variable temporal. Contiene OP_A.HIGH (inicialmente _H) + //_H contine durante todo el bucle de multiplicación la parte alta de resultado (RES.HIGH) + StartCodeSub(fun); //inicia codificación + typWord.DefineRegister; //Asegura que exista H,W. + SYSTMP00 := GetAuxRegisterByte; //Pide un registro libre + SYSTMP01 := GetAuxRegisterByte; //Pide un registro libre + SYSTMP02 := GetAuxRegisterByte; //Pide un registro libre + if HayError then exit; + _CLRF (SYSTMP00.offs); //Clear RES.LOW + _MOVWF (SYSTMP01.offs); //OP_A.LOW := W + _MOVF (H.offs,toW ); //OP_A.HIGH := H.offs + _MOVWF (SYSTMP02.offs); + _CLRF (H.offs); //Clear RES.HIGH +MUL16LOOP := _PC; + _BTFSS (U.offs,0); //Si (OP_B.0=1) then RES+=OP_A + _GOTO (_PC+7); //END_IF_1 + _MOVF (SYSTMP01.offs,toW); + _ADDWF (SYSTMP00.offs,toF); + _MOVF (SYSTMP02.offs,toW); + _BTFSC (_STATUS,0 ); + _ADDLW (1); + _ADDWF (H.offs,toF); +// END_IF_1: + _BCF (_STATUS, 0); //STATUS.C := 0 + _RRF (E.offs, toF ); //OP_B>>1 + _RRF (U.offs, toF ); + _BCF (_STATUS, 0); //STATUS.C := 0 + _RLF (SYSTMP01.offs,toF); //OP_A<<1 + _RLF (SYSTMP02.offs,toF); + _MOVF (E.offs, toW); //Si (OP_B>0) then goto MUL16LOOP + _IORWF (U.offs, toW); + _BTFSS (_STATUS, 2); + _GOTO (MUL16LOOP); //OP_B>0 + _MOVF (SYSTMP00.offs, toW); //i_RETURN RES.LOW to toW + SYSTMP00.used := false; + SYSTMP01.used := false; + SYSTMP02.used := false; + EndCodeSub; //termina codificación +end; + +//////////// Operaciones con Dword +procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); +var + aux: TPicRegister; + varTmp: TxpEleVar; +begin + case stoOperation of + stConst_Const: begin + if value1+value2 < $FF then begin + //Optimiza + SetROBResultConst_byte(value1+value2); + end else if value1+value2 < $FFFF then begin + //Optimiza + SetROBResultConst_word(value1+value2); + end else begin + SetROBResultConst_dword(value1+value2); + end; + end; + stConst_Variab: begin + SetROBResultExpres_dword(Opt); + aux := GetAuxRegisterByte; //Pide un registro libre + if HayError then exit; + kMOVF (byte2L, toW); + _ADDLW (value1L); //Cambia C + _movwf (aux.offs); //Guarda Byte L de resultado + + kMOVF (byte2H, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Hoffs,toW); + _ADDLW (value1H); //Cambia C + _movwf (H.offs); //Guarda Byte H de resultado + + kMOVF (byte2E, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Eoffs,toW); + _ADDLW (p1^.EByte); //Cambia C + _movwf (E.offs); //Guarda Byte E de resultado + + kMOVF (byte2U, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Uoffs,toW); + _ADDLW (p1^.UByte); + _movwf (U.offs); //Guarda Byte U de resultado + + _movf (aux.offs, toW); //Deja L en W + + aux.used := false; + end; + stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) + if SetRes then SetROBResultExpres_dword(Opt); //Se fija aquí el resultado + //K + WHEU -> WHEU, se puede manejar como asignación con sums + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //guarda W + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal, con los RT + p2^.SetAsVariab(varTmp); //Convierte p2 a variable + ExchangeP1_P2; //Convierte a p1 := p1 + K; + ROB_dword_aadd_dword(Opt, false); //compila como autosuma + _MOVF(aux.offs, toW); //devuelve byet bajo en W + aux.used := false; + varTmp.Destroy; //Destruye la variable + end; + stVariab_Const: begin + ExchangeP1_P2; //Convierte a stConst_Variab + ROB_dword_add_dword(Opt, SetRes); + end; + stVariab_Variab:begin + SetROBResultExpres_dword(Opt); +// Este algoritmo Falla +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _movf (byte2L,toW); +// _addwf(byte1L,toW); +// _movwf(aux.offs); +// _movf (byte2H,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1H,toW); +// _movwf(H.offs); +// _movf (byte2E,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1E,toW); +// _movwf(E.offs); +// _movf (byte2U,toW); +// _btfsc(STATUS, _C); +// _addlw(1); +// _addwf(byte1U,toW); +// _movwf(U.offs); +// _movf (aux.offs, toW); +// aux.used := false; + + aux := GetAuxRegisterByte; //Pide un registro libre + if HayError then exit; + kMOVF (byte2L, toW); + kADDWF (byte1L, toW); //Cambia C + _movwf (aux.offs); //Guarda Byte L de resultado + + kMOVF (byte2H, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Hoffs,toW); + _addwf (p1^.Hoffs,toW); //Cambia C + _movwf (H.offs); //Guarda Byte H de resultado + + kMOVF (byte2E, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Eoffs,toW); + _addwf (p1^.Eoffs,toW); //Cambia C + _movwf (E.offs); //Guarda Byte E de resultado + + kMOVF (byte2U, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior + _incfsz (p2^.Uoffs,toW); + _addwf (p1^.Uoffs,toW); + _movwf (U.offs); //Guarda Byte U de resultado + + _movf (aux.offs, toW); //Deja L en W + + aux.used := false; + + end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) +// SetROBResultExpres_word(Opt); +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _BANKSEL(aux.bank); +// _movwf(aux.offs); //guarda byte bajo +// _BANKSEL(p1^.bank); +// _MOVF(byte1H, toW); //Carga más peso del dato 1 +// _BANKSEL(H.bank); +// _addwf(H.offs,toF); //Suma y guarda +// //Siguiente byte +// _BANKSEL(p1^.bank); +// _MOVF(byte1L, toW); //Carga menos peso del dato 1 +// _BANKSEL(aux.bank); +// _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W +// _btfsc(STATUS,_C); //Hubo acarreo anterior? +// _incf(H.offs, toF); +// aux.used := false; +// end; + stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) + if SetRes then SetROBResultExpres_dword(Opt); //Se fija aquí el resultado + //WHEU + K -> WHEU, se puede manejar como asignación con suma + aux := GetAuxRegisterByte; //Pide un registro libre + _MOVWF(aux.offs); //gaurda W + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal + p1^.SetAsVariab(varTmp); //Convierte p1 a variable + ROB_dword_aadd_dword(Opt, false); //compila como autosuma + _MOVF(aux.offs, toW); //devuelve byet bajo en W + aux.used := false; + varTmp.Destroy; //Destruye la variable + end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) +// SetROBResultExpres_word(Opt); +// aux := GetAuxRegisterByte; //Pide un registro libre +// if HayError then exit; +// _movwf(aux.offs); //guarda byte bajo +// _BANKSEL(p2^.bank); +// _MOVF(byte2H, toW); //Carga más peso del dato 1 +// _BANKSEL(H.bank); +// _addwf(H.offs,toF); //Suma y guarda +// _BANKSEL(p2^.bank); +// _MOVF(byte2L, toW); //Carga menos peso del dato 1 +// _BANKSEL(aux.bank); +// _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W +// _BANKSEL(H.bank); +// _btfsc(STATUS,_C); //Hubo acarreo anterior? +// _incf(H.offs, toF); +// aux.used := false; +// end; +// stExpres_Expres:begin +// SetROBResultExpres_word(Opt); +// //p1 está salvado en pila y p2 en (_H,W) +// p1^.Sto := stVariab; //Convierte a variable +// p1^.rVar := GetVarWordFromStk; +// stoOperation := TStoOperandsROB((Ord(p1^.Sto) << 2) or ord(p2^.Sto)); +// //Luego el caso es similar a stVariab_Expres +// ROB_word_add_word; +// FreeStkRegisterByte(spH); //libera pila, obtiene dirección +// FreeStkRegisterByte(spL); //libera pila, obtiene dirección +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + if value2 = 0 then begin + //No cambia + end else if value2 <= $FF then begin + kMOVLW (value2L); + kADDWF (byte1L,toF); + _btfsc (_STATUS,_C); + _INCF (p1^.Hoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Eoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Uoffs,toF); + end else if value2 <= $FFFF then begin + kMOVLW (value2L); + kADDWF (byte1L,toF); + kMOVLW (value2H); + _btfsc (_STATUS,_C); + _ADDLW (1); + kADDWF (byte1H, toF); + _btfsc (_STATUS,_C); + _INCF (p1^.Eoffs,toF); + _btfsc (_STATUS,_Z); + _INCF (p1^.Uoffs,toF); + end else begin + kMOVLW (value2L); + kADDWF (byte1L, toF); + kMOVLW (value2H); + _btfsc (_STATUS,_C); + _ADDLW (1); + kADDWF (byte1H, toF); + kMOVLW (p2^.EByte); + _btfsc (_STATUS,_C); + _ADDLW (1); + kADDWF (byte1E, toF); + kMOVLW (p2^.UByte); + _btfsc (_STATUS,_C); + _ADDLW (1); + kADDWF (byte1U,toF); + end; + end; + stVariab: begin + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kMOVF (byte2L, toW); + kADDWF (byte1L, toF); + kMOVF (byte2H, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Hoffs,toW); + _addwf (p1^.Hoffs,toF); + kMOVF (byte2E, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Eoffs,toW); + _addwf (p1^.Eoffs,toF); + kMOVF (byte2U, toW); + _btfsc (_STATUS,_C); + _incfsz (p2^.Uoffs,toW); + _addwf (p1^.Uoffs,toF); + end; + stExpres: begin //Se asume que está en U,E,H,w + if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante + kADDWF (byte1L, toF); //p2 ya está en W + _movf (H.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (H.offs,toW); + _addwf (p1^.Hoffs,toF); + _movf (E.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (E.offs,toW); + _addwf (p1^.Eoffs,toF); + _movf (U.offs,toW); + _btfsc (_STATUS,_C); + _incfsz (U.offs,toW); + _addwf (p1^.Uoffs,toF); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +//////////// Operaciones con Char +procedure TGenCod.ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); +begin + if p1^.Sto <> stVariab then begin //validación + GenError('Only variables can be assigned.'); exit; + end; + case p2^.Sto of + stConst : begin + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + if value2=0 then begin + //caso especial + kCLRF(byte1); + end else begin + kMOVLW(value2); //Los chars se manejan como números + kMOVWF(byte1); + end; + end; + stVariab: begin + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + kMOVF(byte2, toW); + kMOVWF(byte1); + end; + stExpres: begin //ya está en w + SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante + kMOVWF(byte1); + end; + else + GenError(MSG_UNSUPPORTED); exit; + end; +end; +procedure TGenCod.ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_equal_byte(Opt, SetRes); //es lo mismo +end; +procedure TGenCod.ROB_char_difer_char(Opt: TxpOperation; SetRes: boolean); +begin + ROB_byte_difer_byte(Opt, SetRes); //es lo mismo +end; +//////////// Operaciones con punteros +procedure TGenCod.ROB_pointer_add_byte(Opt: TxpOperation; SetRes: boolean); +{Implementa la suma de un puntero (a cualquier tipo) y un byte.} +var + ptrType: TxpEleType; +begin + {Guarda la referencia al tipo puntero, porque: + * Se supone que este tipo lo define el usuario y no se tiene predefinido. + * Se podrían definir varios tipos de puntero) así que no se tiene una + referencia estática + * Conviene manejar esto de forma dinámica para dar flexibilidad al lenguaje} + ptrType := p1^.Typ; //Se ahce aquí porque después puede cambiar p1^. + //La suma de un puntero y un byte, se procesa, como una suma de bytes + ROB_byte_add_byte(Opt, SetRes); + //Devuelve byte, oero debe devolver el tipo puntero + case res.Sto of + stConst: res.SetAsConst(ptrType); //Cambia el tipo a la constante + //stVariab: res.SetAsVariab(res.rVar); + {Si devuelve variable, solo hay dos posibilidades: + 1. Que sea la variable puntero, por lo que no hay nada que hacer, porque ya tiene + el tipo puntero. + 2. Que sea la variable byte (y que la otra era constante puntero 0 = nil). En este + caso devolverá el tipo Byte, lo cual tiene cierto sentido.} + stExpres: res.SetAsExpres(ptrType); //Cambia tipo a la expresión + end; +end; +procedure TGenCod.ROB_pointer_sub_byte(Opt: TxpOperation; SetRes: boolean); +{Implementa la resta de un puntero (a cualquier tipo) y un byte.} +var + ptrType: TxpEleType; +begin + //La explicación es la misma que para la rutina ROB_pointer_add_byte + ptrType := p1^.Typ; + ROB_byte_sub_byte(Opt, SetRes); + case res.Sto of + stConst: res.SetAsConst(ptrType); + stExpres: res.SetAsExpres(ptrType); + end; +end; +procedure TGenCod.ROU_derefPointer(Opr: TxpOperator; SetRes: boolean); +{Implementa el operador de desreferencia "^", para Opr que se supone debe ser + categoria "tctPointer", es decir, puntero a algún tipo de dato.} +var + tmpVar: TxpEleVar; +begin + case p1^.Sto of + stConst : begin + //Caso especial. Cuando se tenga algo como: TPunteroAByte($FF)^ + //Se asume que devuelve una variable de tipo Byte. + tmpVar := CreateTmpVar('', typByte); + tmpVar.addr0 := value1; //Fija dirección de constante + SetROUResultVariab(tmpVar); + end; + stVariab: begin + //Caso común: ptrWord^ + //La desreferencia de una variable "tctPointer" es un stVarRef. + SetROUResultVarRef(p1^.rVar); + end; + stExpres: begin + //La expresión Esta en RT, pero es una dirección, no un valor + SetROUResultExpRef(nil, p1^.Typ); + end; + else + genError('Not implemented: "%s"', [Opr.OperationString]); + end; +end; +///////////// Funciones del sistema +procedure TGenCod.codif_1mseg; +//Codifica rutina de retardo de 1mseg. +begin + PutFwdComm(';1 msec routine.'); + if _CLOCK = 1000000 then begin + kMOVLW(62); //contador de iteraciones + _ADDLW(255); //lazo de 4 ciclos + _BTFSS(_STATUS,_Z); + _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 1MHz.'); + end else if _CLOCK = 2000000 then begin + kMOVLW(125); //contador de iteraciones + _ADDLW(255); //lazo de 4 ciclos + _BTFSS(_STATUS,_Z); + _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 2MHz.'); + end else if _CLOCK = 4000000 then begin + //rtuina básica para 4MHz + kMOVLW(250); //contador de iteraciones + _ADDLW(255); //lazo de 4 ciclos + _BTFSS(_STATUS,_Z); + _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 4MHz.'); + end else if _CLOCK = 8000000 then begin + kMOVLW(250); + _ADDLW(255); //lazo de 8 ciclos + _GOTO(_PC+1); //introduce 4 ciclos más de retardo + _GOTO(_PC+1); + _BTFSS(_STATUS,_Z); + _GOTO(_PC-4); PutComm(';fin rutina 1 mseg a 8Mhz.'); + end else if _CLOCK = 10000000 then begin + kMOVLW(250); + _ADDLW(255); //lazo de 10 ciclos + _GOTO(_PC+1); //introduce 6 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _BTFSS(_STATUS,_Z); + _GOTO(_PC-5); PutComm(';fin rutina 1 mseg a 10MHz.'); + end else if _CLOCK = 12000000 then begin + kMOVLW(250); + _ADDLW(255); //lazo de 12 ciclos + _GOTO(_PC+1); //introduce 8 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _BTFSS(_STATUS,_Z); + _GOTO(_PC-6); PutComm(';fin rutina 1 mseg a 12MHz.'); + end else if _CLOCK = 16000000 then begin + kMOVLW(250); + _ADDLW(255); //lazo de 16 ciclos + _GOTO(_PC+1); //introduce 12 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _BTFSS(_STATUS,_Z); + _GOTO(_PC-8); PutComm(';fin rutina 1 mseg a 12MHz.'); + end else if _CLOCK = 20000000 then begin + kMOVLW(250); + _ADDLW(255); //lazo de 20 ciclos + _GOTO(_PC+1); //introduce 16 ciclos más de retardo + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _GOTO(_PC+1); + _BTFSS(_STATUS,_Z); + _GOTO(_PC-10); PutComm(';fin rutina 1 mseg a 12MHz.'); + end else begin + GenError('Clock frequency %d not supported for delay_ms().', [_CLOCK]); + end; +end; +procedure TGenCod.codif_delay_ms(fun: TxpEleFun); +//Code the routine for delay in miliseconds, using parameters byte or word +var + delay: Word; + aux: TPicRegister; +begin + StartCodeSub(fun); //inicia codificación + PutTopComm(' ;delay routine.'); + //aux := GetAuxRegisterByte; //Pide un registro libre + //if HayError then exit; + aux := FSR; //Usa el FSR como registro auxiliar + {Esta rutina recibe los milisegundos en los registros en (H,w) o en (w) + En cualquier caso, siempre usa el registros H , el acumulador "w" y un reg. auxiliar. + Se supone que para pasar los parámetros, ya se requirió H, así que no es necesario + crearlo.} + _CLRF(H.offs); PutComm(' ;enter when parameters in (0,w)'); + _MOVWF(aux.offs); PutComm(';enter when parameters in (H,w)'); + _INCF(H.offs,toF); + _INCF(aux.offs,toF); //corrección +delay:= _PC; + _DECFSZ(aux.offs, toF); + _GOTO(_PC+2); + _DECFSZ(H.offs, toF); + _GOTO(_PC+2); + _RETURN(); + codif_1mseg; //codifica retardo 1 mseg + if HayError then exit; + _GOTO(delay); + EndCodeSub; //termina codificación + //aux.used := false; //libera registro + {A better optimization must consider if only the versión of delay with word is + used, and create a simplified version of the delay routine} +end; +procedure TGenCod.codif_delay_ms2(fun: TxpEleFun); +//Code the routine for delay in miliseconds for word parameter. +var + aux: TPicRegister; + delay: Word; +begin + if f_delay_msB.linked THEN begin + {This is something weird, because we really don't generate code, but point the + function to an existing code.} + fun.adrr := f_delay_msB.adrr+1; //At the entry for word parameter + end else begin + //It's not used f_delay_ms(). We use a simplified version of the loop + StartCodeSub(fun); //inicia codificación + PutTopComm(' ;delay routine.'); + aux := FSR; //Usa el FSR como registro auxiliar + + + _MOVWF(aux.offs); + _INCF(H.offs,toF); + _INCF(aux.offs,toF); //corrección + delay:= _PC; + _DECFSZ(aux.offs, toF); + _GOTO(_PC+2); + _DECFSZ(H.offs, toF); + _GOTO(_PC+2); + _RETURN(); + codif_1mseg; //codifica retardo 1 mseg + if HayError then exit; + _GOTO(delay); + EndCodeSub; //termina codificación + end; +end; +procedure TGenCod.fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); +{Se debe dejar en los registros de trabajo, el valor del parámetro indicado.} +var + curFunTyp: TxpEleType; + parentNod: TxpEleCodeCont; + curFun: TxpEleFun; + posExit: TSrcPos; +// adrReturn: word; +begin + //TreeElems.curNode, debe ser de tipo "Body". + parentNod := TreeElems.CurCodeContainer; //Se supone que nunca debería fallar + posExit := cIn.ReadSrcPos; //Guarda para el AddExitCall() + if parentNod.idClass = eltMain then begin + //Es el cuerpo del programa principal + _SLEEP; //Así se termina un programa en PicPas + end else if parentNod.idClass = eltFunc then begin + //Es el caso común, un exit() en procedimientos. + //"parentNod" debe ser de tipo TxpEleFun + curFun := TxpEleFun(parentNod); + if curFun.IsInterrupt then begin + GenError('Cannot use exit() in an INTERRUPT.'); + exit; + end; + //Codifica el retorno + curFunTyp := curFun.typ; + if curFunTyp = typNull then begin + //No retorna valores. Es solo procedimiento + _RETURN; + //No hay nada, más que hacer + end else begin + //Se espera el valor devuelto + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + //Verifica fin de parámetros + if not CaptureTok(')') then exit; + //El resultado de la expresión está en "res". + if curFunTyp <> res.Typ then begin + GenError('Expected a "%s" expression.', [curFunTyp.name]); + exit; + end; + LoadToRT(res, true); //Carga expresión en RT y genera i_RETURN o i_RETLW + end; + end else begin + //Faltaría implementar en cuerpo de TxpEleUni + GenError('Syntax error.'); + end; + //Lleva el registro de las llamadas a exit() + if FirstPass then begin + //CurrBank debe ser el banco con el que se llamó al i_RETURN. + parentNod.AddExitCall(posExit, parentNod.CurrBlockID, CurrBank); + end; + res.SetAsNull; //No es función +end; +procedure TGenCod.fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('Cannot increase a constant.'); exit; + end; + stVariab: begin + if (res.Typ = typByte) or (res.Typ = typChar) then begin + _BANKSEL(res.bank); + _INCF(res.offs, toF); + end else if res.Typ = typWord then begin + _BANKSEL(res.bank); + _INCF(res.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Hoffs, toF); + end else if res.Typ = typDWord then begin + _BANKSEL(res.bank); + _INCF(res.Loffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Hoffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Eoffs, toF); + _BTFSC(_STATUS, _Z); + _INCF(res.Uoffs, toF); + end else if res.Typ.catType = tctPointer then begin + //Es puntero corto + _BANKSEL(res.bank); + _INCF(res.offs, toF); + end else begin + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); + exit; + end; + end; +// stVarRef: begin +// if (res.Typ = typByte) or (res.Typ = typChar) then begin +// _BANKSEL(res.bank); +// _INCF(res.offs, toF); +// end else if res.Typ = typWord then begin +// _BANKSEL(res.bank); +// _INCF(res.Loffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Hoffs, toF); +// end else if res.Typ = typDWord then begin +// _BANKSEL(res.bank); +// _INCF(res.Loffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Hoffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Eoffs, toF); +// _BTFSC(STATUS, _Z); +// _INCF(res.Uoffs, toF); +// end else if res.Typ.catType = tctPointer then begin +// //Es puntero corto +// _BANKSEL(res.bank); +// _INCF(res.offs, toF); +// end else begin +// GenError(MSG_INVAL_PARTYP, [res.Typ.name]); +// exit; +// end; +// end; + stExpres: begin //se asume que ya está en (_H,w) + GenError('Cannot increase an expression.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + res.SetAsNull; //No es función + //Verifica fin de parámetros + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('Cannot decrease a constant.'); exit; + end; + stVariab: begin + if (res.Typ = typByte) or (res.Typ = typChar) then begin + _BANKSEL(res.bank); + _DECF(res.offs, toF); + end else if res.Typ = typWord then begin + _BANKSEL(res.bank); + _MOVF(res.Loffs, toW); + _BTFSC(_STATUS, _Z); + _DECF(res.Hoffs, toF); + _DECF(res.Loffs, toF); + end else if res.Typ = typDWord then begin + _BANKSEL(res.bank); + kMOVLW(1); + _subwf(res.Loffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Hoffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Eoffs, toF); + _BTFSS(_STATUS, _C); + _subwf(RES.Uoffs, toF); + end else if res.Typ.catType = tctPointer then begin + //Es puntero corto + _BANKSEL(res.bank); + _DECF(res.offs, toF); + end else begin + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); + exit; + end; + end; + stExpres: begin //se asume que ya está en (_H,w) + GenError('Cannot decrease an expression.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + res.SetAsNull; //No es función + //Verifica fin de parámetros + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typChar then begin + SetResultConst(typByte); //Solo cambia el tipo, no el valor + //No se usa SetROBResultConst_byte, porque no estamos en ROP + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + stVariab: begin + if res.Typ = typChar then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); //Actualiza "res" + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typChar then begin + //Es la misma expresión, solo que ahora es Byte. + res.SetAsExpres(typByte); //No se puede usar SetROBResultExpres_byte, porque no hay p1 y p2 + end else begin + GenError('Cannot convert to ordinal.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + SetResultConst(typChar); //Solo cambia el tipo, no el valor + //No se usa SetROBResultConst_char, porque no estamos en ROP + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typChar); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + //Es la misma expresión, solo que ahora es Char. + res.SetAsExpres(typChar); //No se puede usar SetROBResultExpres_char, porque no hay p1 y p2; + end else begin + GenError('Cannot convert to char.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); +{Convierte byte, o boolean a bit} +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + if res.valInt= 0 then begin + SetResultConst(typBit); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := false; + end else begin + SetResultConst(typBit); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := true; + end; + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //No se usa SetROUResultExpres_bit(true), porque no se tiene el operando en p1^ + SetResultExpres(typBit); + res.Inverted := true; + //Se asumirá que cualquier valor diferente de cero, devuelve 1 + _MOVF(res.Loffs, toW); //el resultado aparecerá en Z, invertido + {Notar que se ha usado res.Loff, para apuntar a la dirección de la variable byte. + Si se hubeise usado solo res.off, apuntaría a una dirección del tipo bit} + end else if res.Typ = typBool then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typBit); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //Apunta al mismo byte + tmpVar.bit0 := res.rVar.bit0; //Apunta al mismo bit + SetResultVariab(tmpVar, res.Inverted); //mantiene lógica + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + SetResultExpres(typBit); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ + res.Inverted := true; + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW + end else begin + GenError('Cannot convert to bit.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); +{Convierte byte, o bit a boolean} +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + if res.valInt= 0 then begin + SetResultConst(typBool); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := false; + end else begin + SetResultConst(typBool); //No se usa SetROBResultConst_bit, porque no estamos en ROP + res.valBool := true; + end; + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + stVariab: begin + if res.Typ = typByte then begin + //No se usa SetROUResultExpres_bool(true), porque no se tiene el operando en p1^ + SetResultExpres(typBool); + res.Inverted := true; + //Se asumirá que cualquier valor diferente de cero, devuelve 1 + _MOVF(res.Loffs, toW); //el resultado aparecerá en Z, invertido + {Notar que se ha usado res.Loff, para apuntar a la dirección de la variable byte. + Si se hubeise usado solo res.off, apuntaría a una dirección del tipo bit} + end else if res.Typ = typBit then begin + //Sigue siendo variable + tmpVar := CreateTmpVar('', typBool); //crea variable temporal + tmpVar.addr0 := res.rVar.addr0; //Apunta al mismo byte + tmpVar.bit0 := res.rVar.bit0; //Apunta al mismo bit + SetResultVariab(tmpVar, res.Inverted); //mantiene lógica + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + SetResultExpres(typBool); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ + res.Inverted := true; + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW + end else begin + GenError('Cannot convert to boolean.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + //ya es Byte + end else if res.Typ = typChar then begin + res.SetAsConst(typByte); //Solo cambia el tipo + end else if res.Typ = typWord then begin + res.SetAsConst(typByte); //Cambia el tipo + res.valInt := res.valInt and $FF; + end else if res.Typ = typDWord then begin + res.SetAsConst(typByte); //Cambia el tipo + res.valInt := res.valInt and $FF; + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typByte); //Cambia el tipo + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + stVariab: begin + if res.Typ = typBit then begin + SetResultExpres(typByte); + _CLRW; + _BTFSC(res.Boffs, res.bit); + kMOVLW(1); //devuelve 1 + //Es lo mismo + end else if res.Typ = typChar then begin + //Crea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else if res.Typ = typByte then begin + //Es lo mismo + end else if res.Typ = typWord then begin + //Crea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else if res.Typ = typDWord then begin + //CRea varaible que apunte al byte bajo + tmpVar := CreateTmpVar('', typByte); //crea variable temporal Byte + tmpVar.addr0 := res.rVar.addr0; //apunta al mismo byte + SetResultVariab(tmpVar); + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + if res.Typ = typByte then begin + //Ya está en W + //Ya es Byte + end else if res.Typ = typChar then begin + //Ya está en W + res.SetAsExpres(typByte); //Solo cambia el tipo + end else if res.Typ = typWord then begin + //Ya está en W el byte bajo + res.SetAsExpres(typByte); //Cambia el tipo + end else if res.Typ = typDWord then begin + //Ya está en W el byet bajo + res.SetAsExpres(typByte); //Cambia el tipo + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + res.SetAsExpres(typByte); //Cambia el tipo + end else begin + GenError('Cannot convert to byte.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); +var + tmpVar: TxpEleVar; +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + res.SetAsConst(typWord); //solo cambia el tipo + end else if res.Typ = typChar then begin + res.SetAsConst(typWord); //solo cambia el tipo + end else if res.Typ = typWord then begin + //ya es Word + end else if res.Typ = typDWord then begin + res.SetAsConst(typWord); + res.valInt := res.valInt and $FFFF; + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typWord); + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert this constant to word.'); exit; + end; + end; + stVariab: begin + typWord.DefineRegister; + if res.Typ = typByte then begin + SetResultExpres(typWord); //No podemos devolver variable. Pero sí expresión + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typChar then begin + SetResultExpres(typWord); //No podemos devolver variable. Pero sí expresión + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typWord then begin + //ya es Word + end else if res.Typ = typDWord then begin + //Crea varaible que apunte al word bajo + tmpVar := CreateTmpVar('', typWord); //crea variable temporal Word + tmpVar.addr0 := res.rVar.addr0; //apunta al byte L + tmpVar.addr1 := res.rVar.addr1; //apunta al byte H + SetResultVariab(tmpVar); + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + SetResultExpres(typWord); //Devolvemo expresión + _CLRF(H.offs); + kMOVLW(0); + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert this variable to word.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + typWord.DefineRegister; + if res.Typ = typByte then begin + res.SetAsExpres(typWord); + //Ya está en W el byte bajo + _CLRF(H.offs); + end else if res.Typ = typChar then begin + res.SetAsExpres(typWord); + //Ya está en W el byte bajo + _CLRF(H.offs); + end else if res.Typ = typWord then begin +// Ya es word + end else if res.Typ = typDWord then begin + res.SetAsExpres(typWord); + //Ya está en H,W el word bajo + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsExpres(typWord); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert expression to word.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if res.Typ = typByte then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typChar then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typWord then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + end else if res.Typ = typDWord then begin + //ya es DWord + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsConst(typDWord); //Solo cambia el tipo + if res.valBool then res.valInt := 1 else res.valInt := 0; + end else begin + GenError('Cannot convert this constant to Dword.'); exit; + end; + end; + stVariab: begin + typDword.DefineRegister; + if res.Typ = typByte then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typChar then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + _MOVF(res.offs, toW); + end else if res.Typ = typWord then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _MOVF(res.Hoffs, toW); + _MOVWF(H.offs); + _MOVF(res.Loffs, toW); + end else if res.Typ = typDWord then begin + //ya es Word. Lo deja como varaible DWord + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + SetResultExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert this variable to Dword.'); exit; + end; + end; + stExpres: begin //se asume que ya está en (w) + typDword.DefineRegister; + if res.Typ = typByte then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en W el byte bajo + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + end else if res.Typ = typChar then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en W el byte bajo + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + end else if res.Typ = typWord then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + //Ya está en H,W el word + _CLRF(U.offs); + _CLRF(E.offs); + end else if res.Typ = typDWord then begin +// Ya es Dword + end else if (res.Typ = typBool) or (res.Typ = typBit) then begin + res.SetAsExpres(typDWord); //No podemos devolver variable. Pero sí expresión + _CLRF(U.offs); + _CLRF(E.offs); + _CLRF(H.offs); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); + end else begin + GenError('Cannot convert expression to Dword.'); exit; + end; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('PORT or BIT variable expected.'); exit; + end; + stVariab: begin + if res.Typ = typByte then begin + //Se asume que será algo como PORTA, PORTB, ... + kMOVLW($FF); //todos como entradas + _BANKSEL(1); //los registros TRIS, están en el banco 1 + _MOVWF(res.offs); //escribe en TRIS + end else if res.Typ = typBit then begin + //Se asume que será algo como PORTA.0, PORTB.0, ... + _BANKSEL(1); //los registros TRIS, están en el banco 1 + _BSF(res.offs, res.bit); //escribe en TRIS + end else begin + GenError('Invalid type.'); exit; + end; + res.SetAsNull; //No es función así que no es necesario fijar el resultado + end; + stExpres: begin //se asume que ya está en (w) + GenError('PORT variable expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + GenError('PORT variable expected.'); exit; + end; + stVariab: begin + if res.Typ = typByte then begin + //Se asume que será algo como PORTA, PORTB, ... + _BANKSEL(1); //los registros TRIS, están en el banco 1 + _CLRF(res.offs); //escribe en TRIS + end else if res.Typ = typBit then begin + //Se asume que será algo como PORTA.0, PORTB.0, ... + _BANKSEL(1); //los registros TRIS, están en el banco 1 + _BCF(res.offs, res.bit); //escribe en TRIS + end else begin + GenError('Invalid type.'); exit; + end; + res.SetAsNull; //No es función así que no es necesario fijar el resultado + end; + stExpres: begin //se asume que ya está en (w) + GenError('PORT variable expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); +{Define el banco actual} +begin + if not CaptureTok('(') then exit; + res := GetExpression(0); //captura parámetro + if HayError then exit; //aborta + case res.Sto of //el parámetro debe estar en "res" + stConst : begin + if (res.Typ = typByte) or (res.Typ = typWord) or (res.Typ = typDWord) then begin + //ya es Word + CurrBank := 255; //para forzar el cambio + _BANKSEL(res.valInt); + end else begin + GenError('Number expected.'); exit; + end; + end; + stVariab, stExpres: begin //se asume que ya está en (w) + GenError('A constant expected.'); exit; + end; + else + genError('Not implemented "%s" for this operand.', [fun.name]); + end; + if not CaptureTok(')') then exit; +end; +procedure TGenCod.StartSyntax; +//Se ejecuta solo una vez al inicio +begin + ///////////define la sintaxis del compilador + //Tipos de tokens personalizados + tnExpDelim := xLex.NewTokType('ExpDelim');//delimitador de expresión ";" + tnBlkDelim := xLex.NewTokType('BlkDelim'); //delimitador de bloque + tnStruct := xLex.NewTokType('Struct'); //personalizado + tnDirective:= xLex.NewTokType('Directive'); //personalizado + tnAsm := xLex.NewTokType('Asm'); //personalizado + tnChar := xLex.NewTokType('Char'); //personalizado + tnOthers := xLex.NewTokType('Others'); //personalizado + //Configura atributos + tkKeyword.Style := [fsBold]; //en negrita + xLex.Attrib[tnBlkDelim].Foreground:=clGreen; + xLex.Attrib[tnBlkDelim].Style := [fsBold]; //en negrita + xLex.Attrib[tnStruct].Foreground:=clGreen; + xLex.Attrib[tnStruct].Style := [fsBold]; //en negrita + //inicia la configuración + xLex.ClearMethodTables; //limpia tabla de métodos + xLex.ClearSpecials; //para empezar a definir tokens + //crea tokens por contenido + xLex.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + xLex.DefTokContent('[0-9]', '[0-9.]*', tnNumber); + xLex.DefTokContent('[$]','[0-9A-Fa-f]*', tnNumber); + xLex.DefTokContent('[%]','[01]*', tnNumber); + //define palabras claves + xLex.AddIdentSpecList('THEN var type absolute interrupt', tnKeyword); + xLex.AddIdentSpecList('program public private method const', tnKeyword); + xLex.AddIdentSpecList('class create destroy sub do begin', tnKeyword); + xLex.AddIdentSpecList('END ELSE ELSIF UNTIL', tnBlkDelim); + xLex.AddIdentSpecList('true false', tnBoolean); + xLex.AddIdentSpecList('if while repeat for', tnStruct); + xLex.AddIdentSpecList('and or xor not div mod in', tnOperator); + xLex.AddIdentSpecList('umulword', tnOperator); + //tipos predefinidos + xLex.AddIdentSpecList('bit boolean byte word char dword', tnType); + //funciones del sistema + xLex.AddIdentSpecList('exit Inc Dec Ord Chr', tnSysFunct); + xLex.AddIdentSpecList('SetAsInput SetAsOutput SetBank', tnSysFunct); + //símbolos especiales + xLex.AddSymbSpec('+', tnOperator); + xLex.AddSymbSpec('+=', tnOperator); + xLex.AddSymbSpec('-=', tnOperator); + xLex.AddSymbSpec('-', tnOperator); + xLex.AddSymbSpec('*', tnOperator); + xLex.AddSymbSpec('/', tnOperator); + xLex.AddSymbSpec('\', tnOperator); +// xLex.AddSymbSpec('%', tnOperator); + xLex.AddSymbSpec('**', tnOperator); + xLex.AddSymbSpec('=', tnOperator); + xLex.AddSymbSpec('>', tnOperator); + xLex.AddSymbSpec('<', tnOperator); + xLex.AddSymbSpec('>=', tnOperator); + xLex.AddSymbSpec('<=', tnOperator); + xLex.AddSymbSpec('<>', tnOperator); + xLex.AddSymbSpec('<=>',tnOperator); + xLex.AddSymbSpec(':=', tnOperator); + xLex.AddSymbSpec('>>', tnOperator); + xLex.AddSymbSpec('<<', tnOperator); + xLex.AddSymbSpec('^', tnOperator); + xLex.AddSymbSpec('@', tnOperator); + xLex.AddSymbSpec('.', tnOperator); + xLex.AddSymbSpec(';', tnExpDelim); + xLex.AddSymbSpec('(', tnOthers); + xLex.AddSymbSpec(')', tnOthers); + xLex.AddSymbSpec(':', tnOthers); + xLex.AddSymbSpec(',', tnOthers); + xLex.AddSymbSpec('[', tnOthers); + xLex.AddSymbSpec(']', tnOthers); + //crea tokens delimitados + xLex.DefTokDelim('''','''', tnString); + xLex.DefTokContent('[#]','[0-9]*', tnChar); +// xLex.DefTokDelim('"','"', tnString); + + xLex.DefTokDelim('//','', xLex.tnComment); + xLex.DefTokDelim('{','}', xLex.tnComment, tdMulLin); + xLex.DefTokDelim('(\*','\*)', xLex.tnComment, tdMulLin); + xLex.DefTokDelim('{$','}', tnDirective, tdUniLin); + xLex.DefTokDelim('Asm','End', tnAsm, tdMulLin); + //define bloques de sintaxis +// xLex.AddBlock('{','}'); + xLex.Rebuild; //es necesario para terminar la definición +end; +procedure TGenCod.DefCompiler; +var + opr: TxpOperator; +begin + //Define métodos a usar + OnExprStart := @expr_start; + OnExprEnd := @expr_End; + + ///////////Crea tipos + ClearSystemTypes; + ///////////////// Tipo Bit //////////////// + typBit := CreateSysType('bit', t_uinteger,-1); //de 1 bit + typBit.OnLoadToRT := @bit_LoadToRT; + typBit.OnDefRegister:= @bit_DefineRegisters; + typBit.OnSaveToStk := @bit_SaveToStk; +// opr:=typBit.CreateUnaryPreOperator('@', 6, 'addr', @Oper_addr_bit); + + ///////////////// Tipo Booleano //////////////// + typBool := CreateSysType('boolean',t_boolean,-1); //de 1 bit + typBool.OnLoadToRT := @bit_LoadToRT; //es lo mismo + typBool.OnDefRegister:= @bit_DefineRegisters; //es lo mismo + typBool.OnSaveToStk := @bit_SaveToStk; //es lo mismo + + //////////////// Tipo Byte ///////////// + typByte := CreateSysType('byte',t_uinteger,1); //de 1 byte + typByte.OnLoadToRT := @byte_LoadToRT; + typByte.OnDefRegister:= @byte_DefineRegisters; + typByte.OnSaveToStk := @byte_SaveToStk; + //typByte.OnReadFromStk := + //Campos de bit + typByte.CreateField('bit0', @byte_bit0, @byte_bit0); + typByte.CreateField('bit1', @byte_bit1, @byte_bit1); + typByte.CreateField('bit2', @byte_bit2, @byte_bit2); + typByte.CreateField('bit3', @byte_bit3, @byte_bit3); + typByte.CreateField('bit4', @byte_bit4, @byte_bit4); + typByte.CreateField('bit5', @byte_bit5, @byte_bit5); + typByte.CreateField('bit6', @byte_bit6, @byte_bit6); + typByte.CreateField('bit7', @byte_bit7, @byte_bit7); + //Campos de bit (se mantienen por compatibilidad) + typByte.CreateField('0', @byte_bit0, @byte_bit0); + typByte.CreateField('1', @byte_bit1, @byte_bit1); + typByte.CreateField('2', @byte_bit2, @byte_bit2); + typByte.CreateField('3', @byte_bit3, @byte_bit3); + typByte.CreateField('4', @byte_bit4, @byte_bit4); + typByte.CreateField('5', @byte_bit5, @byte_bit5); + typByte.CreateField('6', @byte_bit6, @byte_bit6); + typByte.CreateField('7', @byte_bit7, @byte_bit7); + + //////////////// Tipo Char ///////////// + //Tipo caracter + typChar := CreateSysType('char',t_uinteger,1); //de 1 byte. Se crea como uinteger para leer/escribir su valor como número + typChar.OnLoadToRT := @byte_LoadToRT; //Es lo mismo + typChar.OnDefRegister:= @byte_DefineRegisters; //Es lo mismo + typChar.OnSaveToStk := @byte_SaveToStk; //Es lo mismo + + //////////////// Tipo Word ///////////// + //Tipo numérico de dos bytes + typWord := CreateSysType('word',t_uinteger,2); //de 2 bytes + typWord.OnLoadToRT := @word_LoadToRT; + typWord.OnDefRegister:= @word_DefineRegisters; + typWord.OnSaveToStk := @word_SaveToStk; + + typWord.CreateField('Low' , @word_Low , @word_Low ); + typWord.CreateField('High', @word_High, @word_High); + + //////////////// String type ///////////// + {Se crea el tipo String, solo para permitir inicializar arreglos de + caracteres. Por ahora no se implementan otras funcionalidades.} + typString := CreateSysType('string', t_string, 0); //tamaño variable + { TODO : String debería definirse mejor como un tipo común, no del sistema } + + //////////////// Tipo DWord ///////////// + //Tipo numérico de cuatro bytes + typDWord := CreateSysType('dword',t_uinteger,4); //de 4 bytes + typDWord.OnLoadToRT := @dword_LoadToRT; + typDWord.OnDefRegister:= @dword_DefineRegisters; + typDWord.OnSaveToStk := @dword_SaveToStk; + + typDWord.CreateField('Low' , @dword_Low , @dword_Low ); + typDWord.CreateField('High' , @dword_High , @dword_High ); + typDWord.CreateField('Extra' , @dword_Extra , @dword_Extra ); + typDWord.CreateField('Ultra' , @dword_Ultra , @dword_Ultra ); + typDWord.CreateField('LowWord' , @dword_LowWord , @dword_LowWord ); + typDWord.CreateField('HighWord', @dword_HighWord, @dword_HighWord); + + {Los operadores deben crearse con su precedencia correcta + Precedencia de operadores en Pascal: + 6) ~, not, signo "-" (mayor precedencia) + 5) *, /, div, mod, and, shl, shr, & + 4) |, !, +, -, or, xor + 3) =, <>, <, <=, >, >=, in + 2) := (menor precedencia) + } + ////////////////////////////////////////// + //////// Operaciones con Bit //////////// + + opr:=typBit.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typBit, @ROB_bit_asig_bit); + opr.CreateOperation(typByte, @ROB_bit_asig_byte); + + opr:=typBit.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_bit); + + opr:=typBit.CreateBinaryOperator('AND',4,'and'); + opr.CreateOperation(typBit,@ROB_bit_and_bit); + opr.CreateOperation(typByte,@ROB_bit_and_byte); + + opr:=typBit.CreateBinaryOperator('OR',4,'or'); + opr.CreateOperation(typBit,@ROB_bit_or_bit); + opr.CreateOperation(typByte,@ROB_bit_or_byte); + + opr:=typBit.CreateBinaryOperator('XOR',4,'or'); + opr.CreateOperation(typBit,@ROB_bit_xor_bit); + opr.CreateOperation(typByte,@ROB_bit_xor_byte); + + opr:=typBit.CreateBinaryOperator('=',4,'equal'); + opr.CreateOperation(typBit,@ROB_bit_equ_bit); + opr.CreateOperation(typByte,@ROB_bit_equ_byte); + + opr:=typBit.CreateBinaryOperator('<>',4,'difer'); + opr.CreateOperation(typBit,@ROB_bit_dif_bit); + opr.CreateOperation(typByte,@ROB_bit_dif_byte); + + ////////////////////////////////////////// + //////// Operaciones con Boolean //////////// + opr:=typBool.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typBool,@ROB_bool_asig_bool); + + opr:=typBool.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_bool); + + opr:=typBool.CreateBinaryOperator('AND',4,'and'); //suma + opr.CreateOperation(typBool,@ROB_bool_and_bool); + + opr:=typBool.CreateBinaryOperator('OR',4,'or'); //suma + opr.CreateOperation(typBool,@ROB_bool_or_bool); + + opr:=typBool.CreateBinaryOperator('XOR',4,'or'); //suma + opr.CreateOperation(typBool,@ROB_bool_xor_bool); + + opr:=typBool.CreateBinaryOperator('=',4,'equal'); + opr.CreateOperation(typBool,@ROB_bool_equ_bool); + + opr:=typBool.CreateBinaryOperator('<>',4,'difer'); + opr.CreateOperation(typBool,@ROB_bool_dif_bool); + ////////////////////////////////////////// + //////// Operaciones con Byte //////////// + ////////////////////////////////////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typByte.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typByte,@ROB_byte_asig_byte); + opr:=typByte.CreateBinaryOperator('+=',2,'aadd'); //asignación-suma + opr.CreateOperation(typByte,@ROB_byte_aadd_byte); + opr:=typByte.CreateBinaryOperator('-=',2,'asub'); //asignación-resta + opr.CreateOperation(typByte,@ROB_byte_asub_byte); + + opr:=typByte.CreateBinaryOperator('+',4,'add'); //suma + opr.CreateOperation(typByte,@ROB_byte_add_byte); + opr.CreateOperation(typWord,@ROB_byte_add_word); + opr:=typByte.CreateBinaryOperator('-',4,'subs'); //suma + opr.CreateOperation(typByte,@ROB_byte_sub_byte); + opr:=typByte.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word + opr.CreateOperation(typByte,@ROB_byte_mul_byte); + opr.CreateOperation(typWord,@ROB_byte_mul_word); + + opr:=typByte.CreateBinaryOperator('DIV',5,'div'); //byte / byte ->byte + opr.CreateOperation(typByte,@ROB_byte_div_byte); + opr:=typByte.CreateBinaryOperator('MOD',5,'mod'); //byte mod byte ->byte + opr.CreateOperation(typByte,@ROB_byte_mod_byte); + + opr:=typByte.CreateBinaryOperator('AND',5,'and'); //suma + opr.CreateOperation(typByte,@ROB_byte_and_byte); + opr.CreateOperation(typBit ,@ROB_byte_and_bit); + opr:=typByte.CreateBinaryOperator('OR',4,'or'); //suma + opr.CreateOperation(typByte,@ROB_byte_or_byte); + opr.CreateOperation(typBit,@ROB_byte_or_bit); + opr:=typByte.CreateBinaryOperator('XOR',4,'xor'); //suma + opr.CreateOperation(typByte,@ROB_byte_xor_byte); + opr.CreateOperation(typBit,@ROB_byte_xor_bit); + + opr:=typByte.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_byte); + opr:=typByte.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + + opr:=typByte.CreateBinaryOperator('=',3,'equal'); + opr.CreateOperation(typByte,@ROB_byte_equal_byte); + opr:=typByte.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typByte,@ROB_byte_difer_byte); + opr.CreateOperation(typBit,@ROB_byte_difer_bit); + + opr:=typByte.CreateBinaryOperator('>',3,'great'); + opr.CreateOperation(typByte,@ROB_byte_great_byte); + opr:=typByte.CreateBinaryOperator('<',3,'less'); + opr.CreateOperation(typByte,@ROB_byte_less_byte); + + opr:=typByte.CreateBinaryOperator('>=',3,'gequ'); + opr.CreateOperation(typByte,@ROB_byte_gequ_byte); + opr:=typByte.CreateBinaryOperator('<=',3,'lequ'); + opr.CreateOperation(typByte,@ROB_byte_lequ_byte); + + opr:=typByte.CreateBinaryOperator('>>',5,'shr'); { TODO : Definir bien la precedencia } + opr.CreateOperation(typByte,@ROB_byte_shr_byte); + opr:=typByte.CreateBinaryOperator('<<',5,'shl'); + opr.CreateOperation(typByte,@ROB_byte_shl_byte); + ////////////////////////////////////////// + //////// Operaciones con Char //////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typChar.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typChar,@ROB_char_asig_char); + opr:=typChar.CreateBinaryOperator('=',3,'equal'); //asignación + opr.CreateOperation(typChar,@ROB_char_equal_char); + opr:=typChar.CreateBinaryOperator('<>',3,'difer'); //asignación + opr.CreateOperation(typChar,@ROB_char_difer_char); + + ////////////////////////////////////////// + //////// Operaciones con Word //////////// + {Los operadores deben crearse con su precedencia correcta} + + opr:=typWord.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typWord,@ROB_word_asig_word); + opr.CreateOperation(typByte,@ROB_word_asig_byte); + + opr:=typWord.CreateBinaryOperator('=',3,'equal'); //igualdad + opr.CreateOperation(typWord,@ROB_word_equal_word); + opr:=typWord.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typWord,@ROB_word_difer_word); + opr:=typWord.CreateBinaryOperator('>',3,'difer'); + opr.CreateOperation(typWord,@ROB_word_great_word); + + opr:=typWord.CreateBinaryOperator('+',4,'suma'); //suma + opr.CreateOperation(typWord,@ROB_word_add_word); + opr.CreateOperation(typByte,@ROB_word_add_byte); + + opr:=typWord.CreateBinaryOperator('-',4,'subs'); //suma + opr.CreateOperation(typWord,@ROB_word_sub_word); + + opr:=typWord.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word + opr.CreateOperation(typByte,@ROB_word_mul_byte); + opr.CreateOperation(typWord,@ROB_word_mul_word); + + opr:=typWord.CreateBinaryOperator('AND', 5, 'and'); //AND + opr.CreateOperation(typByte, @ROB_word_and_byte); + + opr:=typWord.CreateBinaryOperator('UMULWORD',5,'umulword'); //suma + opr.CreateOperation(typWord,@ROB_word_umulword_word); + + opr:=typWord.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + + ////////////////////////////////////////// + //////// Operaciones con DWord //////////// + {Los operadores deben crearse con su precedencia correcta} + opr:=typDWord.CreateBinaryOperator(':=',2,'asig'); //asignación + opr.CreateOperation(typDWord,@ROB_dword_asig_dword); + opr.CreateOperation(typWord,@ROB_dword_asig_word); + opr.CreateOperation(typByte,@ROB_dword_asig_byte); + + opr:=typDWord.CreateBinaryOperator('=',3,'equal'); //igualdad + opr.CreateOperation(typDWord,@ROB_dword_equal_dword); + opr:=typDWord.CreateBinaryOperator('<>',3,'difer'); + opr.CreateOperation(typDWord,@ROB_dword_difer_dword); + + opr:=typDWord.CreateBinaryOperator('+=',2,'asuma'); //suma + opr.CreateOperation(typDWord,@ROB_dword_aadd_dword); + + opr:=typDWord.CreateBinaryOperator('+',4,'suma'); //suma + opr.CreateOperation(typDWord,@ROB_dword_add_dword); +// opr.CreateOperation(typByte,@ROB_word_add_byte); + + //////// Operaciones con String //////////// + opr:=typString.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + opr:=typString.CreateBinaryOperator('+',4,'add'); //add + opr.CreateOperation(typString,@ROB_string_add_string); + opr.CreateOperation(typChar,@ROB_string_add_char); +end; +procedure TGenCod.DefPointerArithmetic(etyp: TxpEleType); +{Configura ls operaciones que definen la aritmética de punteros.} +var + opr: TxpOperator; +begin + //Asignación desde Byte y Puntero + opr:=etyp.CreateBinaryOperator(':=',2,'asig'); + opr.CreateOperation(typByte, @ROB_byte_asig_byte); + opr.CreateOperation(etyp , @ROB_byte_asig_byte); + //Agrega a los bytes, la posibilidad de ser asignados por punteros + typByte.operAsign.CreateOperation(etyp, @ROB_byte_asig_byte); + + opr:=etyp.CreateBinaryOperator('=',3,'equal'); //asignación + opr.CreateOperation(typByte, @ROB_byte_equal_byte); + opr:=etyp.CreateBinaryOperator('+',4,'add'); //suma + opr.CreateOperation(typByte, @ROB_pointer_add_byte); + opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta + opr.CreateOperation(typByte, @ROB_pointer_sub_byte); +end; +procedure TGenCod.DefinePointer(etyp: TxpEleType); +{Set operations that defines pointers aritmethic.} +var + opr: TxpOperator; +begin + //Asignación desde Byte y Puntero +// opr:=etyp.CreateBinaryOperator(':=',2,'asig'); +// opr.CreateOperation(typWord, @ROB_word_asig_word); +// opr.CreateOperation(etyp , @ROB_word_asig_word); +// //Agrega a los word, la posibilidad de ser asignados por punteros +// typWord.operAsign.CreateOperation(etyp, @ROB_word_asig_word); +// +// opr:=etyp.CreateBinaryOperator('=',3,'equal'); //asignación +// opr.CreateOperation(typWord, @ROB_word_equal_word); +// opr:=etyp.CreateBinaryOperator('+',4,'add'); //suma +// opr.CreateOperation(typWord, @ROB_pointer_add_word); +// opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta +// opr.CreateOperation(typWord, @ROB_pointer_sub_word); +// +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +// etyp.CreateUnaryPostOperator('^',6, 'deref', @ROU_derefPointer); //dereferencia +end; +procedure TGenCod.DefineArray(etyp: TxpEleType); +begin +// etyp.CreateField('length', @arrayLength, nil); +// etyp.CreateField('high' , @arrayHigh, nil); +// etyp.CreateField('low' , @arrayLow, nil); +// etyp.CreateField('item' , @GenCodArrayGetItem, @GenCodArraySetItem); +// etyp.CreateField('clear' , @GenCodArrayClear, nil); +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +end; +procedure TGenCod.ValidRAMaddr(addr: integer); +{Validate a physical RAM address. If error generate error.} +begin + if (addr<0) or (addr>$ffff) then begin + //Debe set Word + GenError(ER_INV_MEMADDR); + exit; + end; + if not pic.ValidRAMaddr(addr) then begin + GenError(ER_INV_MAD_DEV); + exit; + end; +end; +procedure TGenCod.CreateSystemElements; +{Inicia los elementos del sistema. Se ejecuta cada vez que se compila.} + procedure AddParam(var pars: TxpParFuncArray; parName: string; const srcPos: TSrcPos; + typ0: TxpEleType; adicDec: TxpAdicDeclar); + //Create a new parameter to the function. + var + n: Integer; + begin + //Add record to the array + n := high(pars)+1; + setlength(pars, n+1); + pars[n].name := parName; //Name is not important + pars[n].srcPos := srcPos; + pars[n].typ := typ0; //Agrega referencia + pars[n].adicVar.hasAdic := adicDec; + pars[n].adicVar.hasInit := false; + end; + function CreateSystemFunction(name: string; retType: TxpEleType; const srcPos: TSrcPos; + const pars: TxpParFuncArray; + compile: TProcExecFunction): TxpEleFun; + {Create a new system function in the current element of the Syntax Tree. + Returns the reference to the function created.} + var + fundec: TxpEleFunDec; + bod: TxpEleBody; + begin + //Add declaration + curLocation := locInterface; + fundec := AddFunctionDEC(name, retType, srcPos, pars, false); + //Implementation + {Note that implementation is added always after declarartion. It's not the usual + in common units, where all declarations are first} + curLocation := locImplement; + Result := AddFunctionIMP(name, retType, srcPos, fundec); + //Here varaibles can be added + {Create a body, to be uniform with normal function and for have a space where + compile code and access to posible variables or other elements.} + bod := CreateBody; + bod.srcDec := srcPos; + TreeElems.AddElement(bod); //Add Body (not need to open) + Result.compile := compile; //Set routine to geenrate code + TreeElems.CloseElement; //Close function implementation + end; +var + f: TxpEleFun; //índice para funciones + uni: TxpEleUnit; + pars: TxpParFuncArray; //Array of parameters + srcPos: TSrcPos; +begin + //////// Funciones del sistema //////////// + //Funciones INLINE + f := CreateSysFunction('exit' , nil, @fun_Exit); + f := CreateSysFunction('Inc' , nil, @fun_Inc); + f := CreateSysFunction('Dec' , nil, @fun_Dec); + f := CreateSysFunction('Ord' , @FunctParam, @fun_Ord); + f := CreateSysFunction('Chr' , @FunctParam, @fun_Chr); + f := CreateSysFunction('Bit' , @FunctParam, @fun_Bit); + f := CreateSysFunction('Boolean' , @FunctParam, @fun_Bool); + f := CreateSysFunction('Byte' , @FunctParam, @fun_Byte); + f := CreateSysFunction('Word' , @FunctParam, @fun_Word); + f := CreateSysFunction('DWord' , @FunctParam, @fun_DWord); + f := CreateSysFunction('SetAsInput' ,nil, @fun_SetAsInput); + f := CreateSysFunction('SetAsOutput',nil, @fun_SetAsOutput); + f := CreateSysFunction('SetBank' , nil, @fun_SetBank); + //Funciones de sistema para operaciones aritméticas/lógicas complejas + //Multiplicación byte por byte a word + f_byte_mul_byte_16 := CreateSysFunction('byte_mul_byte_16', nil, nil); + f_byte_mul_byte_16.adrr:=$0; + f_byte_mul_byte_16.compile := @mul_byte_16; + //Multiplicación byte DIV, MOD byte a byte + f_byte_div_byte := CreateSysFunction('byte_div_byte', nil, nil); + f_byte_div_byte.adrr:=$0; + f_byte_div_byte.compile := @byte_div_byte; + //Multiplicación word por word a word + f_word_mul_word_16 := CreateSysFunction('word_mul_word_16', nil, nil); + f_word_mul_word_16.adrr:=$0; + f_word_mul_word_16.compile := @word_mul_word_16; + //Inicializa eventos y funciones del compilador + callDefinePointer:= @DefinePointer; + callDefineArray := @DefineArray; + callValidRAMaddr := @ValidRAMaddr; + callStartProgram := @Cod_StartProgram; + callEndProgram := @Cod_EndProgram; + //Create "System" Unit. Must be done once in First Pass + {Originally system functions were created in a special list and has a special treatment + but it implied a lot of work for manage the memory, linking, use of variables, and + optimization. Now we create a "system unit" like a real unit (more less) and we create + the system fucntion here, so we use the same code for linking, calling and optimization + that we use in common fucntions. Moreover, we can create private functions.} + uni := CreateUnit('-'); + TreeElems.AddElementAndOpen(uni); //Open Unit + //Create a fictional position + srcPos.fil := ''; + srcPos.row := 1; + srcPos.col := 1; + {Create variables for aditional Working register. Note that this variables are + accesible (and usable) from the code, because the name assigned is a common variable.} + //Create register H as variable + H := AddVariable('__H', typByte, srcPos); + H.adicPar.hasAdic := decNone; + H.adicPar.hasInit := false; + H.location := locInterface; //make visible + //Create register E as variable + E := AddVariable('__E', typByte, srcPos); + E.adicPar.hasAdic := decNone; + E.adicPar.hasInit := false; + E.location := locInterface; //make visible + //Create register U as variable + U := AddVariable('__U', typByte, srcPos); + U.adicPar.hasAdic := decNone; + U.adicPar.hasInit := false; + U.location := locInterface; //make visible + + //Create system function "delay_ms" with byte parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typByte, decRegis); //Add parameter + f_delay_msB := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms); + AddCallerTo(H, f.BodyNode); {Adds this dependency because, like this is a system function, + won`t be compiled in the First pass, that is when references are created. + As we need to use W. We declare a call.} + //Create system function "delay_ms" with word parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typWord, decRegis); //Add parameter + f_delay_msW := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms2); + AddCallerTo(H, f.BodyNode); //Adds this dependency. +// +// //Multiply system function +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'A', srcPos, typByte, decNone); //Add parameter +// AddParam(pars, 'B', srcPos, typByte, decNone); //Add parameter +// f_byte_mul_byte_16 := CreateSystemFunction('byte_mul_byte_16', typWord, srcPos, pars, @byte_mul_byte_16); +// AddCallerTo(H, f_byte_mul_byte_16.BodyNode); //We'll need to return result. +// +// //Word shift left +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'n', srcPos, typByte, decRegisX); //Parameter counter shift +// f_word_shift_l := CreateSystemFunction('word_shift_l', typWord, srcPos, pars, @word_shift_l); +// AddCallerTo(H, f_word_shift_l.BodyNode); //We'll need to return result. +// + TreeElems.CloseElement; //Close Unit +end; +end. + diff --git a/Source/GenCod.pas b/Source/GenCod_PIC17.pas similarity index 50% rename from Source/GenCod.pas rename to Source/GenCod_PIC17.pas index b38811a6..70217a76 100644 --- a/Source/GenCod.pas +++ b/Source/GenCod_PIC17.pas @@ -39,37 +39,37 @@ Las rutinas de operación, deben devolver su resultado en "res". Para mayor información, consultar la doc. técnica. } -unit GenCod; +unit GenCod_PIC17; {$mode objfpc}{$H+} interface uses - Classes, SysUtils, SynEditHighlighter, Graphics, LCLType, LCLProc, - SynFacilBasic, XpresTypesPIC, XPresParserPIC, XpresElementsPIC, GenCodPic, - Pic16Utils, MisUtils, XpresBas; + Classes, SysUtils, Graphics, LCLType, LCLProc, + SynFacilBasic, XpresTypesPIC, XpresElementsPIC, Pic17Utils, GenCodBas_PIC17, + CompBase, Globales, MisUtils, XpresBas; type { TGenCod } - TGenCod = class(TGenCodPic) - protected - procedure callParam(fun: TxpEleFun); - procedure callFunct(fun: TxpEleFun); - private //Accesos a propeidades de p1^ y p2^. - function bit1: TPicRegisterBit; - function bit2: TPicRegisterBit; - function byte1: TPicRegister; - function byte2: TPicRegister; + TGenCod = class(TGenCodBas) + private + procedure codif_delay_ms2(fun: TxpEleFun); + procedure DefineArray(etyp: TxpEleType); + procedure DefinePointer(etyp: TxpEleType); procedure ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); - function valor1: word; - function valor2: word; + procedure ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_byte(Opt: TxpOperation; SetRes: boolean); + procedure ROB_word_mul_word(Opt: TxpOperation; SetRes: boolean); + procedure ValidRAMaddr(addr: integer); private //Operaciones con Bit // f_byteXbyte_byte: TxpEleFun; //índice para función + f_delay_msB: TxpELeFun; + f_delay_msW: TxpELeFun; f_byte_mul_byte_16: TxpEleFun; //índice para función f_byte_div_byte: TxpEleFun; //índice para función f_word_mul_word_16: TxpEleFun; //índice para función procedure byte_div_byte(fun: TxpEleFun); procedure mul_byte_16(fun: TxpEleFun); procedure CopyInvert_C_to_Z; - procedure fun_Byte(fun: TxpEleFun); - procedure fun_DWord(fun: TxpEleFun); + procedure fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); procedure ROB_bit_asig_bit(Opt: TxpOperation; SetRes: boolean); procedure ROB_bit_asig_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_bit_and_bit(Opt: TxpOperation; SetRes: boolean); @@ -84,10 +84,9 @@ TGenCod = class(TGenCodPic) procedure ROB_bit_dif_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); - procedure ROU_addr_word(Opr: TxpOperator; SetRes: boolean); procedure ROU_not_bit(Opr: TxpOperator; SetRes: boolean); procedure ROU_not_byte(Opr: TxpOperator; SetRes: boolean); - procedure ROU_addr_byte(Opr: TxpOperator; SetRes: boolean); + procedure ROU_address(Opr: TxpOperator; SetRes: boolean); procedure ROB_word_and_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_word_umulword_word(Opt: TxpOperation; SetRes: boolean); @@ -101,7 +100,6 @@ TGenCod = class(TGenCodPic) procedure ROB_bool_equ_bool(Opt: TxpOperation; SetRes: boolean); procedure ROB_bool_dif_bool(Opt: TxpOperation; SetRes: boolean); protected //Operaciones con byte - procedure opers_byte(Opt: TxpOperation; const InstLW, InstWF: TPIC16Inst); procedure ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); @@ -121,7 +119,7 @@ TGenCod = class(TGenCodPic) procedure ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_gequ_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); - procedure CodifShift_by_W(aux: TPicRegister; toRight: boolean); + procedure CodifShift_by_W(target: TPicRegister; toRight: boolean); procedure ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); private //Operaciones con Word @@ -145,6 +143,9 @@ TGenCod = class(TGenCodPic) procedure ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); procedure ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); procedure ROB_char_difer_char(Opt: TxpOperation; SetRes: boolean); + + procedure ROB_string_add_char(Opt: TxpOperation; SetRes: boolean); + procedure ROB_string_add_string(Opt: TxpOperation; SetRes: boolean); protected //Operaciones con punteros procedure ROB_pointer_add_byte(Opt: TxpOperation; SetRes: boolean); procedure ROB_pointer_sub_byte(Opt: TxpOperation; SetRes: boolean); @@ -154,21 +155,18 @@ TGenCod = class(TGenCodPic) procedure codif_delay_ms(fun: TxpEleFun); procedure expr_end(posExpres: TPosExpres); procedure expr_start; - procedure fun_delay_ms(fun: TxpEleFun); - procedure fun_Exit(fun: TxpEleFun); - procedure fun_Inc(fun: TxpEleFun); - procedure fun_Dec(fun: TxpEleFun); - procedure fun_Ord(fun: TxpEleFun); - procedure fun_Chr(fun: TxpEleFun); - procedure fun_Bit(fun: TxpEleFun); - procedure fun_Bool(fun: TxpEleFun); - procedure fun_SetAsInput(fun: TxpEleFun); - procedure fun_SetAsOutput(fun: TxpEleFun); - procedure fun_Word(fun: TxpEleFun); - procedure fun_SetBank(fun: TxpEleFun); + procedure fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); + procedure fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); protected - procedure StartCodeSub(fun: TxpEleFun); - procedure EndCodeSub; procedure Cod_StartProgram; procedure Cod_EndProgram; procedure CreateSystemElements; @@ -178,47 +176,22 @@ TGenCod = class(TGenCodPic) procedure DefPointerArithmetic(etyp: TxpEleType); end; + procedure SetLanguage; implementation +var + MSG_NOT_IMPLEM, MSG_INVAL_PARTYP, MSG_UNSUPPORTED, MSG_CANNOT_COMPL, + ER_INV_MAD_DEV, ER_INV_MEMADDR: string; -procedure TGenCod.StartCodeSub(fun: TxpEleFun); -{debe ser llamado para iniciar la codificación de una subrutina} -begin -// iFlashTmp := pic.iFlash; //guarda puntero -// pic.iFlash := curBloSub; //empieza a codificar aquí -end; -procedure TGenCod.EndCodeSub; -{debe ser llamado al terminar la codificaión de una subrutina} -begin -// curBloSub := pic.iFlash; //indica siguiente posición libre -// pic.iFlash := iFlashTmp; //retorna puntero -end; -procedure TGenCod.callParam(fun: TxpEleFun); -{Rutina genérica, que se usa antes de leer los parámetros de una función.} -begin - {Haya o no, parámetros se debe proceder como en cualquier expresión, asumiendo que - vamos a devolver una expresión.} - SetResultExpres(fun.typ); //actualiza "RTstate" -end; -procedure TGenCod.callFunct(fun: TxpEleFun); -{Rutina genérica para llamar a una función definida por el usuario.} +procedure SetLanguage; begin - fun.iniBnk := CurrBank; //fija el banco inicial - //Por ahora, no se implementa paginación, pero despuñes habría que considerarlo. - _CALL(fun.adrr); //codifica el salto - //Verifica la optimizaicón de cambio de banco - if OptBnkAftPro then begin - //Se debe optimizar, fijando el banco que deja la función - CurrBank := fun.ExitBank; - end else begin - //Se debe incluir siempre instrucciones de cambio de banco - _BANKRESET; - end; + GenCodBas_PIC17.SetLanguage; + {$I ..\language\tra_GenCod.pas} end; procedure TGenCod.CopyInvert_C_to_Z; begin //El resultado está en C (invertido), hay que pasarlo a Z - _MOVLW($01 << _C); //carga máscara de C - _ANDWF(STATUS, toW); //el resultado está en Z, corregido en lógica. + kMOVLW($01 << _C); //carga máscara de C + _ANDWF(_STATUS, toW); //el resultado está en Z, corregido en lógica. InvertedFromC := true; //Indica que se ha hecho Z = 'C. para que se pueda optimizar end; ////////////rutinas obligatorias @@ -230,6 +203,7 @@ procedure TGenCod.Cod_StartProgram; procedure TGenCod.Cod_EndProgram; //Codifica la parte inicial del programa begin + _SLEEP(); //agrega instrucción final //Code('END'); //inicia la sección de código end; procedure TGenCod.expr_start; @@ -238,8 +212,7 @@ procedure TGenCod.expr_start; //Inicia banderas de estado para empezar a calcular una expresión W.used := false; //Su ciclo de vida es de instrucción Z.used := false; //Su ciclo de vida es de instrucción - if H<>nil then - H.used := false; //Su ciclo de vida es de instrucción + //H.used := false; //Su ciclo de vida es de instrucción RTstate := nil; //Inicia con los RT libres. //Limpia tabla de variables temporales varFields.Clear; @@ -254,715 +227,8 @@ procedure TGenCod.expr_end(posExpres: TPosExpres); end; //Muestra informa end; -function IsTheSameBitVar(var1, var2: TxpEleVar): boolean; inline; -{Indica si dos variables bit son la misma, es decir que apuntan, a la misma dirección -física} -begin - Result := (var1.addr0 = var2.addr0) and (var1.bit0 = var2.bit0); -end; -//Accesos a propeidades de p1^ y p2^. -function TGenCod.valor1: word; inline; -begin - Result := p1^.valInt; -end; -function TGenCod.valor2: word; inline; -begin - Result := p2^.valInt; -end; -function TGenCod.byte1: TPicRegister; inline; -begin - Result := p1^.rVar.adrByte0; -end; -function TGenCod.byte2: TPicRegister; inline; -begin - Result := p2^.rVar.adrByte0; -end; -function TGenCod.bit1: TPicRegisterBit; inline; -begin - Result := p1^.rVar.adrBit; -end; -function TGenCod.bit2: TPicRegisterBit; inline; -begin - Result := p2^.rVar.adrBit; -end; -////////////operaciones con Bit -procedure TGenCod.ROB_bit_asig_bit(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto <> stVariab then begin //validación - GenError('Only variables can be assigned.'); exit; - end; - case p2^.Sto of - stConst : begin - SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante - {Actualmente no existen constantes de tipo "Bit", ya que el número menor que se - reconoce es de typo byte. Por eso se define ROB_bit_asig_byte(). } - if p2^.valBool then begin - kBSF(bit1); - end else begin - kBCF(bit1); - end; - end; - stVariab: begin - SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante - if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin - //Es asignación de la misma variable. - if p2^.Inverted then begin //Es a := not a - //verifica error. - kMOVLW(p1^.rVar.BitMask); //carga máscara - kXORWF(byte1, toF); //Se usa como byte - end else begin //Es a := a - PutTopComm('No code, by optimizing.'); - end; - end else begin - //Es asignación de otra variable - if p1^.rVar.bank = p2^.rVar.bank then begin //Están en el mismo banco - //No se usa el registro W - kBCF(bit1); - if p2^.Inverted then kBTFSS(bit2) else kBTFSC(bit2); - kBSF(bit1); - //No hay problema con el banco final, porque es el mismo - end else begin //Están en bancos diferentes - //No se usa el registro W - kBCF(bit1); - if p2^.Inverted then kBTFSS(bit2) else kBTFSC(bit2); - kBSF(bit1); - CurrBank := 255; //No se puede predecir el banco - end; - end; - end; - stExpres: begin //ya está en STATUS.Z - SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante - if p2^.Inverted then begin //está invertido - //No se usa el registro W - kBCF(bit1); - kBTFSS(Z); - kBSF(bit1); - end else begin //caso normal - //No se usa el registro W - kBCF(bit1); - kBTFSC(Z); - kBSF(bit1); - end; - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_bit_asig_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto <> stVariab then begin //validación - GenError('Only variables can be assigned.'); exit; - end; - case p2^.Sto of - stConst : begin - SetROBResultExpres_bit(Opt, false); //Realmente, el resultado no es importante - {Esta es la única opción válida, pero solo para los valores 0 y 1} - if p2^.valInt = 0 then begin - //No se usa el registro W - kBCF(bit1); - end else if p2^.valInt = 1 then begin - //No se usa el registro W - kBSF(bit1); - end else begin - GenError('Invalid value for a bit variable.'); exit; - end; - end; - stVariab, - stExpres: begin //ya está en STATUS.Z - GenError('Cannot asign: (bit) := (byte).'); exit; - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_bit_and_bit(Opt: TxpOperation; SetRes: boolean); -begin - case stoOperation of - stConst_Const: begin //AND de dos constantes. Caso especial - SetROBResultConst_bit(p1^.valBool and p2^.valBool); - exit; //sale aquí, porque es un caso particular - end; - stConst_Variab: begin - if p1^.valBool then begin //p1 = 1 - //No usa ningún registro - //Optimiza devolviendo la misma variable - SetROBResultVariab(p2^.rVar, p2^.Inverted); //mantiene la lógica - end else begin //p1 = 0 - //No usa ningún registro - //Optimiza devolviendo constante = 0 - SetROBResultConst_bit(false); - end; - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valBool then begin //p1 = 1 - //No usa ningún registro - //Optimiza devolviendo la misma expresión en Z - SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica - end else begin //p1 = 0 - //No usa ningún registro - //Optimiza devolviendo constante = 0 - SetROBResultConst_bit(false); - Z.used := false; //libera el bit Z, porque ya no importa la expresión - end; - end; - stVariab_Const: begin - if p2^.valBool then begin //p2 = 1 - //No usa ningún registro - //Optimiza devolviendo la misma variable - SetROBResultVariab(p1^.rVar, p1^.Inverted); //mantiene la lógica - end else begin //p2 = 0 - //No usa ningún registro - //Optimiza devolviendo constante = 0 - SetROBResultConst_bit(false); - end; - end; - stVariab_Variab:begin - if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin - //Es la misma variable: a AND a - //Optimiza devolviendo la misma variable - if p1^.Inverted and p2^.Inverted then begin - //not a and not a = not a - SetROBResultVariab(p1^.rVar, p1^.Inverted); - end else if p1^.Inverted then begin - //not a and a = 0 - SetROBResultConst_bit(false); - end else if p2^.Inverted then begin - //a and not a = 0 - SetROBResultConst_bit(false); - end else begin //Caso normal - //a and a = a - SetROBResultVariab(p1^.rVar, p1^.Inverted); - end; - end else begin - if p1^.Inverted and p2^.Inverted then begin - //Por La ley de Morgan, se convierten em OR - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_or_bit(Opt, SetRes); //procesa como OR - res.Invert; //y niega todo - exit; - end else if p1^.Inverted then begin - //Este caso es lo inverso, no vale la pena implementarlo de nuevo - ExchangeP1_P2; - ROB_bit_and_bit(Opt, SetRes); //procesa como OR - exit; - end else if p2^.Inverted then begin - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Mueve p2 a Z - kMOVLW(p2^.rVar.BitMask); - kANDWF(byte2, toW); //Z aparece normal - //Aplica un AND entre Z y p1, - kBTFSS(bit1); //Si es 1, deja tal cual - kBCF(Z); //Si es 0, devuelve cero - end else begin //Caso normal - SetROBResultExpres_bit(Opt, true); //Fija resultado, con lógica invertida - //Mueve p2 a Z - kMOVLW(p2^.rVar.BitMask); - kANDWF(byte2, toW); //Z está invertido - //Aplica un AND entre Z' y p1. Trabajamos con lógica invertida, por optimización - kBTFSS(bit1); //Si es 1, deja tal cual (pero sigue con lógica invertida) - kBSF(Z); //Si es 0, devuelve cero (1 porque debe quedar con lógica invertida) - end; - end; - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - if p1^.Inverted and p2^.Inverted then begin - //Por La ley de Morgan, se convierten em OR - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_or_bit(Opt, SetRes); //procesa como OR - exit; - end else if p1^.Inverted then begin //lógica invertida en p1 - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un AND entre p1' y Z. - kBTFSC(bit1); //Si es 0, deja tal cual - kBCF(Z); //Si es 1, devuelve cero - end else if p2^.Inverted then begin //lógica invertida en Z - SetROBResultExpres_bit(Opt, true); //Deja la lógica invertida por optimización - //Aplica un AND entre p1 y Z'. - kBTFSS(bit1); //Si es 1, deja tal cual - kBSF(Z); //Si es 0, devuelve cero (1, porque es lógica es invertida) - end else begin //lógica normal - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un AND entre p1 y Z. - kBTFSS(bit1); //Si es 1, deja tal cual - kBCF(Z); //Si es 0, devuelve cero - end; - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stConst_Expres - ROB_bit_and_bit(Opt, SetRes); - exit; - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stVariab_Expres - ROB_bit_and_bit(Opt, SetRes); - exit; - end; - stExpres_Expres:begin - //la expresión p1 debe estar salvada y p2 en el acumulador - p1^.SetAsVariab(GetVarBitFromStk); - //Luego el caso es similar a variable-expresión - ROB_bit_and_bit(Opt, SetRes); - FreeStkRegisterBit; //Libera pila. Ya se usó el dato. - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_bit_and_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p2^.Sto <> stConst then begin - GenError('Incompatible types: (bit) AND (byte).'); exit; - end; - //p2 es constante - if p2^.valInt = 0 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := false; - ROB_bit_and_bit(Opt, SetRes); //opera como bit - end else if p2^.valInt = 1 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := true; - ROB_bit_and_bit(Opt, SetRes); //opera como bit - end else begin - GenError('Incompatible types: (bit) AND (byte).'); exit; - end; -end; -procedure TGenCod.ROB_bit_or_bit(Opt: TxpOperation; SetRes: boolean); -begin - case stoOperation of - stConst_Const: begin //AND de dos constantes. Caso especial - SetROBResultConst_bit(p1^.valBool or p2^.valBool); - exit; //sale aquí, porque es un caso particular - end; - stConst_Variab: begin - if p1^.valBool then begin //p1 = 1 - //No usa ningún registro - //Optimiza devolviendo constante = 1 - SetROBResultConst_bit(true); - end else begin //p1 = 0 - //No usa ningún registro - //Optimiza devolviendo la misma variable - SetROBResultVariab(p2^.rVar, p2^.Inverted); - end; - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valBool then begin //p1 = 1 - //No usa ningún registro - //Optimiza devolviendo constante = 1 - SetROBResultConst_bit(true); - Z.used := false; //libera el bit Z, porque ya no importa la expresión - end else begin //p1 = 0 - //No usa ningún registro - //Optimiza devolviendo la misma expresión en Z - SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica - end; - end; - stVariab_Const: begin - if p2^.valBool then begin //p2 = 1 - //No usa ningún registro - //Optimiza devolviendo constante = 1 - SetROBResultConst_bit(true); - end else begin //p2 = 0 - //No usa ningún registro - //Optimiza devolviendo la misma variable - SetROBResultVariab(p1^.rVar, p1^.Inverted); - end; - end; - stVariab_Variab:begin - if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin - //Es la misma variable: a OR a. Optimiza - if p1^.Inverted and p2^.Inverted then begin - //not a or not a = not a - SetROBResultVariab(p1^.rVar, p1^.Inverted); - end else if p1^.Inverted then begin - //not a or a = 1 - SetROBResultConst_bit(true); - end else if p2^.Inverted then begin - //a or not a = 1 - SetROBResultConst_bit(true); - end else begin //Caso normal - //a and a = a - SetROBResultVariab(p1^.rVar, p1^.Inverted); - end; - end else begin - if p1^.Inverted and p2^.Inverted then begin - //Por La ley de Morgan, se convierten em AND - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_and_bit(Opt, SetRes); //procesa como OR - res.Invert; - exit; - end else if p1^.Inverted then begin - //Este caso es lo inverso, no vale la pena implementarlo de nuevo - ExchangeP1_P2; - ROB_bit_or_bit(Opt, SetRes); //procesa como OR - exit; - end else if p2^.Inverted then begin - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Mueve p2 a Z - kMOVLW(p2^.rVar.BitMask); - kANDWF(byte2, toW); //Z aparece normal - //Aplica un OR entre Z y p1, - kBTFSC(bit1); //Si es 0, deja tal cual - kBSF(Z); //Si es 1, devuelve uno - end else begin //Caso normal - SetROBResultExpres_bit(Opt, true); //Fija resultado, con lógica invertida - //Mueve p2 a Z - kMOVLW(p2^.rVar.BitMask); - kANDWF(byte2, toW); //Z está invertido - //Aplica un OR entre p1 y Z'. Trabajamos con lógica invertida, por optimización - kBTFSC(bit1); //Si es 0, deja tal cual (pero sigue con lógica invertida) - kBCF(Z); //Si es 1, devuelve 1 (0 porque debe quedar con lógica invertida) - end; - end; - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - if p1^.Inverted and p2^.Inverted then begin - //Por La ley de Morgan, se convierten em AND - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_and_bit(Opt, SetRes); //procesa como OR - exit; - end else if p1^.Inverted then begin //lógica invertida - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un OR entre p1' y Z. - kBTFSS(bit1); //Si es 1, deja tal cual - kBSF(Z); //Si es 0, devuelve uno - end else if p2^.Inverted then begin //lógica invertida en Z - SetROBResultExpres_bit(Opt, true); //Deja la lógica invertida por optimización - //Aplica un OR entre p1 y Z. - kBTFSC(bit1); //Si es 0, deja tal cual - kBCF(Z); //Si es 1, devuelve uno (0 porque es lógica invertida) - end else begin //lógica normal - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un OR entre p1 y Z. - kBTFSC(bit1); //Si es 0, deja tal cual - kBSF(Z); //Si es 1, devuelve uno - end; - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stConst_Expres - ROB_bit_or_bit(Opt, SetRes); - exit; - end; - stExpres_Variab:begin //la expresión p2 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stVariab_Expres - ROB_bit_or_bit(Opt, SetRes); - exit; - end; - stExpres_Expres:begin - //la expresión p1 debe estar salvada y p2 en el acumulador - p1^.SetAsVariab(GetVarBitFromStk); - //Luego el caso es similar a variable-expresión - ROB_bit_or_bit(Opt, SetRes); - FreeStkRegisterBit; //Libera pila. Ya se usó el dato. - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_bit_or_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p2^.Sto <> stConst then begin - GenError('Incompatible types: (bit) OR (byte).'); exit; - end; - //p2 es constante - if p2^.valInt = 0 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := false; - ROB_bit_or_bit(Opt, SetRes); //opera como bit - end else if p2^.valInt = 1 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := true; - ROB_bit_or_bit(Opt, SetRes); //opera como bit - end else begin - GenError('Incompatible types: (bit) OR (byte).'); exit; - end; -end; -procedure TGenCod.ROB_bit_xor_bit(Opt: TxpOperation; SetRes: boolean); -begin - case stoOperation of - stConst_Const: begin //XOR de dos constantes. Caso especial - SetROBResultConst_bit(p1^.valBool xor p2^.valBool); - exit; //sale aquí, porque es un caso particular - end; - stConst_Variab: begin - if p1^.valBool then begin //p1 = 1 - //Optimiza devolviendo la variable invertida - SetROBResultVariab(p2^.rVar, not p2^.Inverted); - end else begin //p1 = 0 - //Optimiza devolviendo la misma variable - SetROBResultVariab(p2^.rVar, p2^.Inverted); - end; - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valBool then begin //p1 = 1 - //Optimiza devolviendo la expresión invertida - SetROBResultExpres_bit(Opt, not p2^.Inverted); //mantiene la lógica - end else begin //p1 = 0 - //Optimiza devolviendo la misma expresión en Z - SetROBResultExpres_bit(Opt, p2^.Inverted); //mantiene la lógica - end; - end; - stVariab_Const: begin - ExchangeP1_P2; //Convierte a stConst_Variab - ROB_bit_xor_bit(Opt, SetRes); - exit; - end; - stVariab_Variab:begin - if IsTheSameBitVar(p1^.rVar, p2^.rVar) then begin - //Es la misma variable: a XOR a - //Optimiza devolviendo cero - SetROBResultConst_bit(false); - end else begin - if p1^.Inverted and p2^.Inverted then begin - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_xor_bit(Opt, SetRes); //es lo mismo - exit; - end else if p1^.Inverted then begin - //Este caso es lo inverso, no vale la pena implementarlo de nuevo - ExchangeP1_P2; - ROB_bit_xor_bit(Opt, SetRes); //procesa como OR - exit; - end else if p2^.Inverted then begin - //a XOR b' = (z XOR b)' - p2^.Inverted := false; - ROB_bit_xor_bit(Opt, SetRes); - res.Invert; //Invierte la lógica - exit; - end else begin //Caso normal - {Se optimiza bien, esta operación, porque es una rutina muy usada para loa - las operaciones XOR, y porque también se utiliza el XOR para las comparaciones - de bits.} - if p1^.bit = p2^.bit then begin - //Están en el mismo bit, se puede optimizar - SetROBResultExpres_bit(Opt, true); //Fija resultado - kMOVF(byte2, toW); //mueve a W - kXORWF(byte1, toW); //APlica XOR, - kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido - end else if p1^.bit = p2^.bit +1 then begin - //p1 está a un bit a la izquierda, se puede optimizar - SetROBResultExpres_bit(Opt, true); //Fija resultado - kRLF(byte2, toW); //alinea y mueve a W - kXORWF(byte1, toW); //APlica XOR, - kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido - end else if p1^.bit = p2^.bit-1 then begin - //p1 está a un bit a la derecha, se puede optimizar - SetROBResultExpres_bit(Opt, true); //Fija resultado - kRRF(byte2, toW); //alinea y mueve a W - kXORWF(byte1, toW); //APlica XOR, - kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido - end else if abs(p1^.bit - p2^.bit) = 4 then begin - //p1 está a un nibble de distancia, se puede optimizar - SetROBResultExpres_bit(Opt, true); //Fija resultado - kSWAPF(byte2, toW); //alinea y mueve a W - kXORWF(byte1, toW); //APlica XOR, - kANDLW(p1^.rVar.BitMask); //Aplica máscara al bit que nos interesa, queda en Z, invertido - end else begin - //La forma larga - SetROBResultExpres_bit(Opt, false); //Fija resultado, - //Mueve p2 a Z - kMOVLW(p2^.rVar.BitMask); - kANDWF(byte2, toW); //Z está invertido - //Aplica un XOR entre p1 y Z'. - _BANKSEL(p1^.bank); - _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es que se necesita - _BTFSS(p1^.offs, p1^.bit); //Si es 1, invierte, pero ya esta invertido, así que lo deja - _ANDWF(Z.offs, toW); //Si es 0, deja tal cual, pero como está invertido, hay que corregir - end; - end; - end; - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - if p1^.Inverted and p2^.Inverted then begin - p1^.Inverted := false; - p2^.Inverted := false; - ROB_bit_xor_bit(Opt, SetRes); //es lo mismo - exit; - end else if p1^.Inverted then begin //lógica invertida - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un XOR entre p1' y Z. - _BANKSEL(p1^.bank); - _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es eu se necesita - _BTFSS(p1^.offs, p1^.bit); //Si es 1(0), deja tal cual - _ANDWF(Z.offs, toW); //Si es 0(1), invierte - end else if p2^.Inverted then begin //lógica invertida en Z - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un XOR entre p1 y Z'. - _BANKSEL(p1^.bank); - _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es eu se necesita - _BTFSS(p1^.offs, p1^.bit); //Si es 1, invierte (deja igual porque ya está invertido) - _ANDWF(Z.offs, toW); //Si es 0, deja tal cual (realmente debe invertir) - end else begin //lógica normal - SetROBResultExpres_bit(Opt, false); //Fija resultado - //Aplica un XOR entre p1 y Z. - _BANKSEL(p1^.bank); - _MOVLW($1 << Z.bit); //carga máscara, y deja lista si es se necesita - _BTFSC(p1^.offs, p1^.bit); //Si es 0, deja tal cual - _ANDWF(Z.offs, toW); //Si es 1, invierte - end; - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stConst_Expres - ROB_bit_xor_bit(Opt, SetRes); - exit; - end; - stExpres_Variab:begin //la expresión p2 se evaluó y esta en W - ExchangeP1_P2; //Convierte en stVariab_Expres - ROB_bit_xor_bit(Opt, SetRes); - exit; - end; - stExpres_Expres:begin - //la expresión p1 debe estar salvada y p2 en el acumulador - p1^.SetAsVariab(GetVarBitFromStk); - //Luego el caso es similar a stVariab_Expres - ROB_bit_xor_bit(Opt, SetRes); - FreeStkRegisterBit; //Libera pila. Ya se usó el dato. - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_bit_xor_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p2^.Sto <> stConst then begin - GenError('Incompatible types: (bit) XOR (byte).'); exit; - end; - //p2 es constante - if p2^.valInt = 0 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := false; - ROB_bit_xor_bit(Opt, SetRes); //opera como bit - end else if p2^.valInt = 1 then begin - p2^.SetAsConst(typBit); //convierte en bit - p2^.valBool := true; - ROB_bit_xor_bit(Opt, SetRes); //opera como bit - end else begin - GenError('Incompatible types: (bit) XOR (byte).'); exit; - end; -end; -procedure TGenCod.ROB_bit_equ_bit(Opt: TxpOperation; SetRes: boolean); -begin - //Una comparación, es lo mismo que un XOR negado - ROB_bit_xor_bit(Opt, SetRes); //puede devolver error - //Niega la lógica - res.Invert; //Invierte la lógica - ChangeResultBitToBool; //devuelve boolean -end; -procedure TGenCod.ROB_bit_equ_byte(Opt: TxpOperation; SetRes: boolean); -begin - //Una comparación, es lo mismo que un XOR negado - ROB_bit_xor_byte(Opt, SetRes); //puede devolver error - //¿Y si devuelve variable? - res.Invert; //Invierte la lógica - ChangeResultBitToBool; //devuelve boolean -end; -procedure TGenCod.ROB_bit_dif_bit(Opt: TxpOperation; SetRes: boolean); -begin - //Esta comparación, es lo mismo que un XOR - ROB_bit_xor_bit(Opt, SetRes); //puede devolver error - ChangeResultBitToBool; //devuelve boolean -end; -procedure TGenCod.ROB_bit_dif_byte(Opt: TxpOperation; SetRes: boolean); -begin - //Una comparación, es lo mismo que un XOR - ROB_bit_xor_byte(Opt, SetRes); //puede devolver error - ChangeResultBitToBool; //devuelve boolean -end; -procedure TGenCod.ROU_not_bit(Opr: TxpOperator; SetRes: boolean); -begin - case p1^.Sto of - stConst : begin - {Actualmente no existen constantes de tipo "Bit", pero si existieran, sería así} - SetROUResultConst_bit(not p1^.valBool); - end; - stVariab: begin - {Optimiza devolviendo la misma variable, pero invirtiendo la lógica.} - SetROBResultVariab(p1^.rVar, not p1^.Inverted); - end; - stExpres: begin //ya está en STATUS.Z - //No cambiamos su valor, sino su significado. - SetROUResultExpres_bit(not p1^.Inverted); - end; - else - genError('Not implemented: "%s"', [Opr.OperationString]); - end; -end; -procedure TGenCod.ROU_not_byte(Opr: TxpOperator; SetRes: boolean); -begin - case p1^.Sto of - stConst : begin - {Actualmente no existen constantes de tipo "Bit", pero si existieran, sería así} - SetROUResultConst_byte((not p1^.valInt) and $FF); - end; - stVariab: begin - SetROUResultExpres_byte; - _COMF(p1^.offs, toW); - end; -// stExpres: begin -// SetROUResultExpres_byte; -// ////// -// end; - else - genError('Not implemented: "%s"', [Opr.OperationString]); - end; -end; -procedure TGenCod.ROU_addr_byte(Opr: TxpOperator; SetRes: boolean); -{Devuelve la dirección de una variable.} -begin - case p1^.Sto of - stConst : begin - genError('Cannot obtain address of constant.'); - end; - stVariab: begin - //Es una variable normal - //La dirección de una variable es constante - SetResultConst(typByte); - //No se usa p1^.offs, porque solo retorna 7 bits; - res.valInt := p1^.rVar.addr and $ff; - end; - stExpres: begin //ya está en STATUS.Z - genError('Cannot obtain address of an expression.'); - end; - else - genError('Cannot obtain address of this operand.'); - end; -end; -////////////operaciones con Boolean -procedure TGenCod.ROB_bool_asig_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_asig_bit(Opt, SetRes); //A bajo nivel es lo mismo -end; -procedure TGenCod.ROU_not_bool(Opr: TxpOperator; SetRes: boolean); -begin - ROU_not_bit(Opr, SetRes); //A bajo nivel es lo mismo - ChangeResultBitToBool; //pero debe devolver este tipo -end; -procedure TGenCod.ROB_bool_and_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_and_bit(Opt, SetRes); //A bajo nivel es lo mismo - ChangeResultBitToBool; //pero debe devolver este tipo -end; -procedure TGenCod.ROB_bool_or_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_or_bit(Opt, SetRes); //A bajo nivel es lo mismo - ChangeResultBitToBool; //pero debe devolver este tipo -end; -procedure TGenCod.ROB_bool_xor_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_xor_bit(Opt, SetRes); //A bajo nivel es lo mismo - ChangeResultBitToBool; //pero debe devolver este tipo -end; -procedure TGenCod.ROB_bool_equ_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_equ_bit(Opt, SetRes); //Es lo mismo -end; -procedure TGenCod.ROB_bool_dif_bool(Opt: TxpOperation; SetRes: boolean); -begin - ROB_bit_dif_bit(Opt, SetRes); -end; +////////////operaciones con Bit y Boolean +{$I .\GenCod.inc} //////////// Operaciones con Byte procedure TGenCod.ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); var @@ -977,108 +243,110 @@ procedure TGenCod.ROB_byte_asig_byte(Opt: TxpOperation; SetRes: boolean); //Asignación a una variable case p2^.Sto of stConst : begin - if p2^.valInt=0 then begin + if value2=0 then begin //caso especial kCLRF(byte1); end else begin - kMOVLW(valor2); + kMOVLW(value2); kMOVWF(byte1); end; end; stVariab: begin kMOVF(byte2, toW); +// kMOVF(p2^.rVar.addr0, toW); kMOVWF(byte1); end; stExpres: begin //ya está en w kMOVWF(byte1); end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefExp then begin + end else if p1^.Sto = stExpRef then begin {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin - kMOVWF(FSR); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //caso especial - kCLRF(INDF); + kCLRF(INDF.addr); end else begin - kMOVLW(valor2); - kMOVWF(INDF); + kMOVLW(value2); + kMOVWF(INDF.addr); end; end; stVariab: begin - kMOVWF(FSR); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal kMOVF(byte2, toW); - kMOVWF(INDF); + kMOVWF(INDF.addr); end; stExpres: begin //La dirección está en la pila y la expresión en W aux := GetAuxRegisterByte; - kMOVWF(aux); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 rVar := GetVarByteFromStk; - kMOVF(rVar.adrByte0, toW); //Opera directamente al dato que había en la pila. Deja en W - kMOVWF(FSR); //direcciona + kMOVF(rVar.addr0, toW); //Opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona //Asignación normal - kMOVF(aux, toW); - kMOVWF(INDF); + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); aux.used := false; exit; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefVar then begin + end else if p1^.Sto = stVarRef then begin //Asignación a una variable SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin //Caso especial de asignación a puntero desreferenciado: variable^ kMOVF(byte1, toW); - kMOVWF(FSR); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //caso especial - kCLRF(INDF); + kCLRF(INDF.addr); end else begin - kMOVLW(valor2); - kMOVWF(INDF); + kMOVLW(value2); + kMOVWF(INDF.addr); end; end; stVariab: begin //Caso especial de asignación a puntero derefrrenciado: variable^ kMOVF(byte1, toW); - kMOVWF(FSR); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal kMOVF(byte2, toW); - kMOVWF(INDF); + kMOVWF(INDF.addr); end; stExpres: begin //ya está en w //Caso especial de asignación a puntero derefrrenciado: variable^ aux := GetAuxRegisterByte; - kMOVWF(aux); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 kMOVF(byte1, toW); - kMOVWF(FSR); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal - kMOVF(aux, toW); - kMOVWF(INDF); + kMOVF(aux.addr, toW); + kMOVWF(INDF.addr); aux.used := false; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; end else begin GenError('Cannot assign to this Operand.'); exit; end; end; procedure TGenCod.ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); +{Operación de asignación suma: +=} var aux: TPicRegister; rVar: TxpEleVar; @@ -1091,113 +359,99 @@ procedure TGenCod.ROB_byte_aadd_byte(Opt: TxpOperation; SetRes: boolean); //Asignación a una variable case p2^.Sto of stConst : begin - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin - _MOVLW(p2^.valInt); - _BANKSEL(p1^.bank); //verifica banco destino - _ADDWF(p1^.offs, toF); + kMOVLW(value2); + kADDWF(byte1, toF); end; end; stVariab: begin - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); //verifica banco destino - _ADDWF(p1^.offs, toF); + kMOVF(byte2, toW); + kADDWF(byte1, toF); end; stExpres: begin //ya está en w - _BANKSEL(p1^.bank); //verifica banco destino - _ADDWF(p1^.offs, toF); + kADDWF(byte1, toF); end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefExp then begin + end else if p1^.Sto = stExpRef then begin {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin - _MOVWF(FSR.offs); //direcciona - _MOVLW(p2^.valInt); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); _ADDWF(0, toF); end; end; stVariab: begin - _MOVWF(FSR.offs); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _ADDWF(0, toF); end; stExpres: begin //La dirección está en la pila y la expresión en W aux := GetAuxRegisterByte; - _BANKSEL(aux.bank); - _MOVWF(aux.offs); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); - _MOVF(rVar.adrByte0.offs, toW); //opera directamente al dato que había en la pila. Deja en W - _MOVWF(FSR.offs); //direcciona + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(aux.bank); //verifica banco fuente - _MOVF(aux.offs, toW); + kMOVF(aux.addr, toW); _ADDWF(0, toF); aux.used := false; exit; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefVar then begin + end else if p1^.Sto = stVarRef then begin //Asignación a una variable SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin //Caso especial de asignación a puntero dereferenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona - _MOVLW(p2^.valInt); + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); _ADDWF(0, toF); end; end; stVariab: begin //Caso especial de asignación a puntero derefrrenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _ADDWF(0, toF); end; stExpres: begin //ya está en w //Caso especial de asignación a puntero derefrrenciado: variable^ aux := GetAuxRegisterByte; - _BANKSEL(aux.bank); - _MOVWF(aux.offs); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(aux.bank); //Salva W (p2) - _MOVF(aux.offs, toW); + kMOVF(aux.addr, toW); _ADDWF(0, toF); aux.used := false; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; end else begin GenError('Cannot assign to this Operand.'); exit; @@ -1216,206 +470,135 @@ procedure TGenCod.ROB_byte_asub_byte(Opt: TxpOperation; SetRes: boolean); //Asignación a una variable case p2^.Sto of stConst : begin - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin - _MOVLW(p2^.valInt); - _BANKSEL(p1^.bank); //verifica banco destino - _SUBWF(p1^.offs, toF); + kMOVLW(value2); + kSUBWF(byte1, toF); end; end; stVariab: begin - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); //verifica banco destino - _SUBWF(p1^.offs, toF); + kMOVF(byte2, toW); + kSUBWF(byte1, toF); end; stExpres: begin //ya está en w - _BANKSEL(p1^.bank); //verifica banco destino - _SUBWF(p1^.offs, toF); + kSUBWF(byte1, toF); end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefExp then begin + end else if p1^.Sto = stExpRef then begin {Este es un caso especial de asignación a un puntero a byte dereferenciado, pero cuando el valor del puntero es una expresión. Algo así como (ptr + 1)^} SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin - _MOVWF(FSR.offs); //direcciona - _MOVLW(p2^.valInt); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); _SUBWF(0, toF); end; end; stVariab: begin - _MOVWF(FSR.offs); //direcciona + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _SUBWF(0, toF); end; stExpres: begin //La dirección está en la pila y la expresión en W aux := GetAuxRegisterByte; - _BANKSEL(aux.bank); - _MOVWF(aux.offs); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); - _MOVF(rVar.adrByte0.offs, toW); //opera directamente al dato que había en la pila. Deja en W - _MOVWF(FSR.offs); //direcciona + kMOVF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(aux.bank); //verifica banco fuente - _MOVF(aux.offs, toW); + kMOVF(aux.addr, toW); _SUBWF(0, toF); aux.used := false; exit; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; - end else if p1^.Sto = stVarRefVar then begin + end else if p1^.Sto = stVarRef then begin //Asignación a una variable SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal case p2^.Sto of stConst : begin //Asignación normal - if p2^.valInt=0 then begin + if value2=0 then begin //Caso especial. No hace nada end else begin //Caso especial de asignación a puntero dereferenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona - _MOVLW(p2^.valInt); + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona + kMOVLW(value2); _SUBWF(0, toF); end; end; stVariab: begin //Caso especial de asignación a puntero derefrrenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _SUBWF(0, toF); end; stExpres: begin //ya está en w //Caso especial de asignación a puntero derefrrenciado: variable^ aux := GetAuxRegisterByte; - _BANKSEL(aux.bank); - _MOVWF(aux.offs); //Salva W (p2) + kMOVWF(aux.addr); //Salva W (p2) //Apunta con p1 - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona + kMOVF(byte1, toW); + kMOVWF(FSR.addr); //direcciona //Asignación normal - _BANKSEL(aux.bank); //Salva W (p2) - _MOVF(aux.offs, toW); + kMOVF(aux.addr, toW); _SUBWF(0, toF); aux.used := false; end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; end else begin GenError('Cannot assign to this Operand.'); exit; end; end; -procedure TGenCod.opers_byte(Opt: TxpOperation; const InstLW, InstWF:TPIC16Inst); -{Rutina general en operaciones con bytes} -var - rVar: TxpEleVar; -begin - case stoOperation of - stConst_Variab: begin - SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - CodAsmK(InstLW, p1^.valInt); //deja en W - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_byte(Opt); - CodAsmK(InstLW, p1^.valInt); //deja en W - end; - stVariab_Const: begin - SetROBResultExpres_byte(Opt); - _MOVLW(p2^.valInt); - _BANKSEL(p1^.bank); - CodAsmFD(InstWF, p1^.offs, toW); //deja en W - end; - stVariab_Variab:begin - SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); - CodAsmFD(InstWF, p1^.offs, toW); //deja en W - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - CodAsmFD(InstWF, p1^.offs, toW); //deja en W - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - SetROBResultExpres_byte(Opt); - CodAsmK(InstLW, p2^.valInt); //deja en W - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en W - SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - CodAsmFD(InstWF, p2^.offs, toW); //deja en W - end; - stExpres_Expres:begin - SetROBResultExpres_byte(Opt); - //La expresión p1 debe estar salvada y p2 en el acumulador - rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); - CodAsmFD(InstWF, rVar.adrByte0.offs, toW); //opera directamente al dato que había en la pila. Deja en W - FreeStkRegisterByte; //libera pila porque ya se uso - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; procedure TGenCod.ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); var rVar: TxpEleVar; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin - SetROBResultConst_byte(p1^.valInt+p2^.valInt); //puede generar error + SetROBResultConst_byte(value1+value2); //puede generar error end; stConst_Variab: begin - if p1^.valInt = 0 then begin + if value1 = 0 then begin //Caso especial SetROBResultVariab(p2^.rVar); //devuelve la misma variable exit; - end else if p1^.valInt = 1 then begin + end else if value1 = 1 then begin //Caso especial SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _INCF(p2^.offs, toW); + kINCF(byte2, toW); exit; end; SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - _ADDLW(p1^.valInt); //deja en W + kMOVLW(value1); + kADDWF(byte2, toW); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_byte(Opt); - CodAsmK(ADDLW, p1^.valInt); //deja en W + kADDLW(value1); //deja en W end; stVariab_Const: begin ExchangeP1_P2; @@ -1423,40 +606,35 @@ procedure TGenCod.ROB_byte_add_byte(Opt: TxpOperation; SetRes: boolean); end; stVariab_Variab:begin SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); - _ADDWF(p1^.offs, toW); //deja en W + kMOVF(byte2, toW); + kADDWF(byte1, toW); //deja en W end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _ADDWF(p1^.offs, toW); //deja en W + kADDWF(byte1, toW); //deja en W end; stExpres_Const: begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); - CodAsmK(ADDLW, p2^.valInt); //deja en W + kADDLW(value2); //deja en W end; stExpres_Variab:begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _ADDWF(p2^.offs, toW); //deja en W + kADDWF(byte2, toW); //deja en W end; stExpres_Expres:begin SetROBResultExpres_byte(Opt); //La expresión p1 debe estar salvada y p2 en el acumulador rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); - _ADDWF(rVar.adrByte0.offs, toW); //opera directamente al dato que había en la pila. Deja en W + kADDWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W FreeStkRegisterByte; //libera pila porque ya se uso end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_byte_add_word(Opt: TxpOperation; SetRes: boolean); begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; @@ -1481,65 +659,58 @@ procedure TGenCod.ROB_byte_sub_byte(Opt: TxpOperation; SetRes: boolean); var rVar: TxpEleVar; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const:begin //suma de dos constantes. Caso especial - SetROBResultConst_byte(p1^.valInt-p2^.valInt); //puede generar error + SetROBResultConst_byte(value1-value2); //puede generar error exit; //sale aquí, porque es un caso particular end; stConst_Variab: begin SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - _SUBLW(p1^.valInt); //K - W -> W + kMOVF(byte2, toW); + kSUBLW(value1); //K - W -> W end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _SUBLW(p1^.valInt); //K - W -> W + kSUBLW(value1); //K - W -> W end; stVariab_Const: begin SetROBResultExpres_byte(Opt); - _MOVLW(p2^.valInt); - _BANKSEL(p1^.bank); - _SUBWF(p1^.offs, toW); //F - W -> W + kMOVLW(value2); + kSUBWF(byte1, toW); //F - W -> W end; stVariab_Variab:begin SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); - _SUBWF(p1^.offs, toW); //F - W -> W + kMOVF(byte2, toW); + kSUBWF(byte1, toW); //F - W -> W end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _SUBWF(p1^.offs, toW); //F - W -> W + kSUBWF(byte1, toW); //F - W -> W end; stExpres_Const: begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _SUBLW(p2^.valInt); //K - W -> W - _SUBLW(0); //K - W -> W //invierte W + kSUBLW(value2); //K - W -> W + kSUBLW(0); //K - W -> W //invierte W end; stExpres_Variab:begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _SUBWF(p2^.offs, toW); //F - W -> W - _SUBLW(0); //K - W -> W //invierte W + kSUBWF(byte2, toW); //F - W -> W + kSUBLW(0); //K - W -> W //invierte W end; stExpres_Expres:begin SetROBResultExpres_byte(Opt); //la expresión p1 debe estar salvada y p2 en el acumulador rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); - _SUBWF(rVar.adrByte0.offs, toW); //opera directamente al dato que había en la pila. Deja en W + kSUBWF(rVar.addr0, toW); //opera directamente al dato que había en la pila. Deja en W FreeStkRegisterByte; //libera pila porque ya se uso end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.mul_byte_16(fun: TxpEleFun); @@ -1554,7 +725,7 @@ procedure TGenCod.mul_byte_16(fun: TxpEleFun); _BSF (U.offs,3); //8->U _RRF (E.offs,toF); LOOP:=_PC; - _BTFSC (STATUS,0); + _BTFSC (_STATUS,0); _ADDWF (H.offs,toF); _RRF (H.offs,toF); _RRF (E.offs,toF); @@ -1568,69 +739,67 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); var rVar: TxpEleVar; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const:begin //producto de dos constantes. Caso especial - SetROBResultConst_word((p1^.valInt*p2^.valInt) and $FFFF); //puede generar error + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end; exit; //sale aquí, porque es un caso particular end; stConst_Variab: begin - if p1^.valInt=0 then begin //caso especial + if value1=0 then begin //caso especial SetROBResultConst_byte(0); exit; - end else if p1^.valInt=1 then begin //caso especial + end else if value1=1 then begin //caso especial SetROBResultVariab(p2^.rVar); exit; - end else if p1^.valInt=2 then begin + end else if value1=2 then begin SetROBResultExpres_word(Opt); _BANKSEL(H.bank); _CLRF(H.offs); - _BCF(STATUS, _C); - _BANKSEL(P2^.bank); - _RLF(p2^.offs, toW); + _BCF(_STATUS, _C); + kRLF(byte2, toW); _BANKSEL(H.bank); _RLF(H.offs, toF); exit; end; SetROBResultExpres_word(Opt); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _BANKSEL(E.bank); _MOVWF(E.offs); - _MOVLW(p1^.valInt); + kMOVLW(value1); _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_word(opt); - _BANKSEL(E.bank); - _MOVWF(E.offs); - _MOVLW(p1^.valInt); + kMOVWF(E.addr); + kMOVLW(value1); _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; stVariab_Const: begin SetROBResultExpres_word(opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); + kMOVF(byte1, toW); _BANKSEL(E.bank); _MOVWF(E.offs); - _MOVLW(p2^.valInt); + kMOVLW(value2); _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; stVariab_Variab:begin SetROBResultExpres_word(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); + kMOVF(byte1, toW); _BANKSEL(E.bank); _MOVWF(E.offs); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; @@ -1638,8 +807,7 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); _BANKSEL(E.bank); _MOVWF(E.offs); //p2 -> E - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); //p1 -> W + kMOVF(byte1, toW); //p1 -> W _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; @@ -1647,7 +815,7 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); _BANKSEL(E.bank); _MOVWF(E.offs); //p1 -> E - _MOVLW(p2^.valInt); //p2 -> W + kMOVLW(value2); //p2 -> W _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; @@ -1655,8 +823,7 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); _BANKSEL(E.bank); _MOVWF(E.offs); //p1 -> E - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); //p2 -> W + kMOVF(byte2, toW); //p2 -> W _CALL(f_byte_mul_byte_16.adrr); AddCallerTo(f_byte_mul_byte_16); end; @@ -1666,8 +833,7 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); rVar := GetVarByteFromStk; _BANKSEL(E.bank); _MOVWF(E.offs); //p2 -> E - _BANKSEL(rVar.adrByte0.bank); - _MOVF(rVar.adrByte0.offs, toW); //p1 -> W + kMOVF(rVar.addr0, toW); //p1 -> W _CALL(f_byte_mul_byte_16.adrr); FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una @@ -1677,32 +843,152 @@ procedure TGenCod.ROB_byte_mul_byte(Opt: TxpOperation; SetRes: boolean); AddCallerTo(f_byte_mul_byte_16); end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; -procedure TGenCod.byte_div_byte(fun: TxpEleFun); -//H div W -> E Usa registros: W,H,E,U -//H mod W -> U Usa registros: W,H,E,U -//Basado en código del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" E. Palacios, F. Remiro y L.J. López -var - Arit_DivideBit8: Word; - aux, aux2: TPicRegister; +procedure TGenCod.ROB_byte_mul_word(Opt: TxpOperation; SetRes: boolean); begin - typDWord.DefineRegister; //Asegura que exista W,H,E,U - aux := GetAuxRegisterByte; //Pide registro auxiliar + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin + GenError('Too complex pointer expression.'); exit; + end; + if not ChangePointerToExpres(p1^) then exit; + if not ChangePointerToExpres(p2^) then exit; + case stoOperation of + stConst_Const:begin //producto de dos constantes. Caso especial + if value1*value2 < $100 then begin + SetROBResultConst_byte((value1*value2) and $FF); //puede generar error + end else if value1*value2 < $10000 then begin + SetROBResultConst_word((value1*value2) and $FFFF); //puede generar error + end else begin + SetROBResultConst_dword((value1*value2) and $FFFFFFFF); //puede generar error + end; + exit; //sale aquí, porque es un caso particular + end; +// stConst_Variab: begin +// if value1=0 then begin //caso especial +// SetROBResultConst_byte(0); +// exit; +// end else if value1=1 then begin //caso especial +// SetROBResultVariab(p2^.rVar); +// exit; +// end else if value1=2 then begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(H.bank); +// _CLRF(H.offs); +// _BCF(STATUS, _C); +// _BANKSEL(P2^.bank); +// _RLF(p2^.offs, toW); +// _BANKSEL(H.bank); +// _RLF(H.offs, toF); +// exit; +// end; +// SetROBResultExpres_word(Opt); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stConst_Expres: begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value1); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Const: begin +// SetROBResultExpres_word(opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// kMOVLW(value2); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Variab:begin +// SetROBResultExpres_word(Opt); +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(p1^.bank); +// _MOVF(p1^.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Const: begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// kMOVLW(value2); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W +// SetROBResultExpres_word(Opt); +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p1 -> E +// _BANKSEL(p2^.bank); +// _MOVF(p2^.offs, toW); //p2 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// AddCallerTo(f_byte_mul_byte_16); +// end; +// stExpres_Expres:begin +// SetROBResultExpres_word(Opt); +// //la expresión p1 debe estar salvada y p2 en el acumulador +// rVar := GetVarByteFromStk; +// _BANKSEL(E.bank); +// _MOVWF(E.offs); //p2 -> E +// _BANKSEL(rVar.addr0.bank); +// _MOVF(rVar.addr0.offs, toW); //p1 -> W +// _CALL(f_byte_mul_byte_16.adrr); +// FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido +// {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una +// variable) temporal, si se tuviera una rutina de multiplicación que compilara a +// partir de la direccion de una variable (en este caso de la pila, que se puede +// modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} +// AddCallerTo(f_byte_mul_byte_16); +// end; + else + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); + end; +end; +procedure TGenCod.byte_div_byte(fun: TxpEleFun); +//H div W -> E Usa registros: W,H,E,U +//H mod W -> U Usa registros: W,H,E,U +//Basado en código del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" E. Palacios, F. Remiro y L.J. López +var + Arit_DivideBit8: Word; + aux, aux2: TPicRegister; +begin + typDWord.DefineRegister; //Asegura que exista W,H,E,U + aux := GetAuxRegisterByte; //Pide registro auxiliar // aux2 := GetAuxRegisterByte; //Pide registro auxiliar aux2 := FSR; //utiliza FSR como registro auxiliar _MOVWF (aux.offs); _clrf (E.offs); //En principio el resultado es cero. _clrf (U.offs); - _movlw (8); //Carga el contador. + kMOVLW (8); //Carga el contador. _movwf (aux2.offs); Arit_DivideBit8 := _PC; _rlf (H.offs,toF); _rlf (U.offs,toF); // (U.offs) contiene el dividendo parcial. _movf (aux.offs,toW); _subwf (U.offs,toW); //Compara dividendo parcial y divisor. - _btfsc (STATUS,_C); //Si (dividendo parcial)>(divisor) + _btfsc (_STATUS,_C); //Si (dividendo parcial)>(divisor) _movwf (U.offs); //(dividendo parcial) - (divisor) --> (dividendo parcial) _rlf (E.offs,toF); //Desplaza el cociente introduciendo el bit apropiado. _decfsz (aux2.offs,toF); @@ -1716,36 +1002,35 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); var rVar: TxpEleVar; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const:begin //producto de dos constantes. Caso especial - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; - SetROBResultConst_byte(p1^.valInt div p2^.valInt); //puede generar error + SetROBResultConst_byte(value1 div value2); //puede generar error exit; //sale aquí, porque es un caso particular end; stConst_Variab: begin - if p1^.valInt=0 then begin //caso especial + if value1=0 then begin //caso especial SetROBResultConst_byte(0); exit; end; SetROBResultExpres_byte(Opt); - _MOVLW(p1^.valInt); + kMOVLW(value1); _BANKSEL(H.bank); _MOVWF(H.offs); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _CALL(f_byte_div_byte.adrr); AddCallerTo(f_byte_div_byte); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valInt=0 then begin //caso especial + if value1=0 then begin //caso especial SetROBResultConst_byte(0); exit; end; @@ -1753,7 +1038,7 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); _BANKSEL(E.bank); _MOVWF(E.offs); //guarda divisor - _MOVLW(p1^.valInt); + kMOVLW(value1); _BANKSEL(H.bank); _MOVWF(H.offs); //dividendo @@ -1763,27 +1048,24 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); AddCallerTo(f_byte_div_byte); end; stVariab_Const: begin - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); + kMOVF(byte1, toW); _BANKSEL(H.bank); _MOVWF(H.offs); - _MOVLW(p2^.valInt); + kMOVLW(value2); _CALL(f_byte_div_byte.adrr); AddCallerTo(f_byte_div_byte); end; stVariab_Variab:begin SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); + kMOVF(byte1, toW); _BANKSEL(H.bank); _MOVWF(H.offs); - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); _CALL(f_byte_div_byte.adrr); AddCallerTo(f_byte_div_byte); end; @@ -1793,8 +1075,7 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); _BANKSEL(E.bank); _MOVWF(E.offs); //p1 -> H - _BANKSEL(p1^.bank); - _MOVF(p1^.offs, toW); //p1 -> W + kMOVF(byte1, toW); //p1 -> W _BANKSEL(H.bank); _MOVWF(H.offs); //dividendo @@ -1804,14 +1085,14 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); AddCallerTo(f_byte_div_byte); end; stExpres_Const: begin //la expresión p1 se evaluó y esta en W - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; SetROBResultExpres_byte(Opt); _BANKSEL(H.bank); _MOVWF(H.offs); //p1 -> H - _MOVLW(p2^.valInt); //p2 -> W + kMOVLW(value2); //p2 -> W _CALL(f_byte_div_byte.adrr); AddCallerTo(f_byte_div_byte); end; @@ -1819,8 +1100,7 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_byte(Opt); _BANKSEL(H.bank); _MOVWF(H.offs); //p1 -> H - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); //p2 -> W + kMOVF(byte2, toW); //p2 -> W _CALL(f_byte_div_byte.adrr); AddCallerTo(f_byte_div_byte); end; @@ -1832,8 +1112,7 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); _BANKSEL(E.bank); _MOVWF(E.offs); //pila -> H - _BANKSEL(rVar.adrByte0.bank); - _MOVF(rVar.adrByte0.offs, toW); //p1 -> W + kMOVF(rVar.addr0, toW); //p1 -> W _BANKSEL(H.bank); _MOVWF(H.offs); //dividendo //divisor -> W @@ -1849,109 +1128,109 @@ procedure TGenCod.ROB_byte_div_byte(Opt: TxpOperation; SetRes: boolean); AddCallerTo(f_byte_div_byte); end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); var rVar: TxpEleVar; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const : begin //producto de dos constantes. Caso especial - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; - SetROBResultConst_byte(p1^.valInt mod p2^.valInt); //puede generar error + SetROBResultConst_byte(value1 mod value2); //puede generar error exit; //sale aquí, porque es un caso particular end; stConst_Variab: begin - if p1^.valInt=0 then begin //caso especial + if value1=0 then begin //caso especial SetROBResultConst_byte(0); exit; end; SetROBResultExpres_byte(Opt); - kMOVLW(p1^.valInt); - kMOVWF(H); + kMOVLW(value1); + kMOVWF(H.addr); kMOVF(byte2, toW); _CALL(f_byte_div_byte.adrr); //¿Y el banco de salida? - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valInt=0 then begin //caso especial + if value1=0 then begin //caso especial SetROBResultConst_byte(0); exit; end; SetROBResultExpres_byte(Opt); - kMOVWF(E); //guarda divisor - kMOVLW(p1^.valInt); - kMOVWF(H); //dividendo + kMOVWF(E.addr); //guarda divisor + kMOVLW(value1); + kMOVWF(H.addr); //dividendo - kMOVF(E, toW); //divisor + kMOVF(E.addr, toW); //divisor _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stVariab_Const: begin - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; SetROBResultExpres_byte(Opt); kMOVF(byte1, toW); - kMOVWF(H); - kMOVLW(p2^.valInt); + kMOVWF(H.addr); + kMOVLW(value2); _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stVariab_Variab:begin SetROBResultExpres_byte(Opt); kMOVF(byte1, toW); - kMOVWF(H); + kMOVWF(H.addr); kMOVF(byte2, toW); _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_byte(Opt); //guarda divisor - kMOVWF(E); + kMOVWF(E.addr); //p1 -> H kMOVF(byte1, toW); //p1 -> W - kMOVWF(H); //dividendo + kMOVWF(H.addr); //dividendo - kMOVF(E, toW); //divisor + kMOVF(E.addr, toW); //divisor _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stExpres_Const: begin //la expresión p1 se evaluó y esta en W - if p2^.valInt = 0 then begin + if value2 = 0 then begin GenError('Cannot divide by zero'); exit; end; SetROBResultExpres_byte(Opt); - kMOVWF(H); //p1 -> H - kMOVLW(p2^.valInt); //p2 -> W + kMOVWF(H.addr); //p1 -> H + kMOVLW(value2); //p2 -> W _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stExpres_Variab:begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); - kMOVWF(H); //p1 -> H + kMOVWF(H.addr); //p1 -> H kMOVF(byte2, toW); //p2 -> W _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W AddCallerTo(f_byte_div_byte); end; stExpres_Expres:begin @@ -1959,14 +1238,14 @@ procedure TGenCod.ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); //la expresión p1 debe estar salvada y p2 en el acumulador rVar := GetVarByteFromStk; //guarda divisor - kMOVWF(E); + kMOVWF(E.addr); //pila -> H - kMOVF(rVar.adrByte0, toW); //p1 -> W - kMOVWF(H); //dividendo + kMOVF(rVar.addr0, toW); //p1 -> W + kMOVWF(H.addr); //dividendo //divisor -> W - kMOVF(E, toW); //p2 -> E + kMOVF(E.addr, toW); //p2 -> E _CALL(f_byte_div_byte.adrr); - kMOVF(U, toW); //Resultado en W + kMOVF(U.addr, toW); //Resultado en W FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una variable) temporal, si se tuviera una rutina de multiplicación que compilara a @@ -1975,183 +1254,37 @@ procedure TGenCod.ROB_byte_mod_byte(Opt: TxpOperation; SetRes: boolean); AddCallerTo(f_byte_div_byte); end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_byte_and_byte(Opt: TxpOperation; SetRes: boolean); -begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin - GenError('Too complex pointer expression.'); exit; + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; - if not ChangePointerToExpres(p1^) then exit; - if not ChangePointerToExpres(p2^) then exit; - if stoOperation = stConst_Const then begin //suma de dos constantes. Caso especial - SetROBResultConst_byte(p1^.valInt and p2^.valInt); //puede generar error - exit; //sale aquí, porque es un caso particular - end else //caso general - opers_byte(Opt, ANDLW, ANDWF); -end; -procedure TGenCod.ROB_byte_and_bit(Opt: TxpOperation; SetRes: boolean); -begin - {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, - no se implementa ROB_bit_and_byte.} - ExchangeP1_P2; //Invierte los operandos - ROB_bit_and_byte(Opt, SetRes); -end; -procedure TGenCod.ROB_byte_or_byte(Opt: TxpOperation; SetRes: boolean); -begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin - GenError('Too complex pointer expression.'); exit; - end; - if not ChangePointerToExpres(p1^) then exit; - if not ChangePointerToExpres(p2^) then exit; - if stoOperation = stConst_Const then begin //suma de dos constantes. Caso especial - SetROBResultConst_byte(p1^.valInt or p2^.valInt); //puede generar error - exit; //sale aquí, porque es un caso particular - end else //caso general - opers_byte(Opt, IORLW, IORWF); -end; -procedure TGenCod.ROB_byte_or_bit(Opt: TxpOperation; SetRes: boolean); -begin - {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, - no se implementa ROB_bit_or_byte.} - ExchangeP1_P2; //Invierte los operandos - ROB_bit_or_byte(Opt, SetRes); -end; -procedure TGenCod.ROB_byte_xor_byte(Opt: TxpOperation; SetRes: boolean); -begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin - GenError('Too complex pointer expression.'); exit; - end; - if not ChangePointerToExpres(p1^) then exit; - if not ChangePointerToExpres(p2^) then exit; - if stoOperation = stConst_Const then begin //suma de dos constantes. Caso especial - SetROBResultConst_byte(p1^.valInt xor p2^.valInt); //puede generar error - exit; //sale aquí, porque es un caso particular - end else //caso general - opers_byte(Opt, XORLW, XORWF); -end; -procedure TGenCod.ROB_byte_xor_bit(Opt: TxpOperation; SetRes: boolean); -begin - {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, - no se implementa ROB_bit_xor_byte.} - ExchangeP1_P2; //Invierte los operandos - ROB_bit_xor_byte(Opt, SetRes); -end; -procedure TGenCod.ROB_byte_equal_byte(Opt: TxpOperation; SetRes: boolean); -var - rVar: TxpEleVar; -begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin - GenError('Too complex pointer expression.'); exit; - end; - if not ChangePointerToExpres(p1^) then exit; - if not ChangePointerToExpres(p2^) then exit; - case stoOperation of - stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_bool(p1^.valInt = p2^.valInt); - end; - stConst_Variab: begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - if p1^.valInt = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.offs, toF); //si iguales _Z=1 - end else if p1^.valInt = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.offs, toW); //si el resultado es cero _Z=1 - end else if p1^.valInt = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.offs, toW); //si el resultado es cero _Z=1 - end else begin - _MOVLW(p1^.valInt); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //si iguales _Z=1 - end; - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _SUBLW(p1^.valInt); //si iguales _Z=1 - end; - stVariab_Const: begin - ExchangeP1_P2; //Convierte a stConst_Variab - ROB_byte_equal_byte(Opt, SetRes); - end; - stVariab_Variab:begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //si iguales _Z=1 - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //ReserveW; if HayError then exit; - _BANKSEL(p1^.bank); //verifica banco destino - _SUBWF(p1^.offs, toW); //si iguales _Z=1 - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //ReserveW; if HayError then exit; - _SUBLW(p2^.valInt); //si iguales _Z=1 - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //ReserveW; if HayError then exit; - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //si iguales _Z=1 - end; - stExpres_Expres:begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //la expresión p1 debe estar salvada y p2 en el acumulador - rVar := GetVarByteFromStk; - _BANKSEL(rVar.adrByte0.bank); //verifica banco destino - _SUBWF(rVar.adrByte0.offs, toW); //compara directamente a lo que había en pila. - FreeStkRegisterByte; //libera pila porque se usará el dato ahí contenido - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_byte_difer_byte(Opt: TxpOperation; SetRes: boolean); -begin - ROB_byte_equal_byte(Opt, SetRes); //usa el mismo código - res.Invert; //Invierte la lógica -end; -procedure TGenCod.ROB_byte_difer_bit(Opt: TxpOperation; SetRes: boolean); -begin - {No hay problema en usar siempre ExchangeP1_P2, porque el caso Expresión-Expresión, - no se implementa ROB_bit_dif_byte.} - ExchangeP1_P2; - ROB_bit_dif_byte(Opt, SetRes); end; + procedure TGenCod.ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); var tmp: TPicRegister; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_bool(p1^.valInt > p2^.valInt); + SetROBResultConst_bool(value1 > value2); end; stConst_Variab: begin - if p1^.valInt = 0 then begin + if value1 = 0 then begin //0 es mayor que nada SetROBResultConst_bool(false); // GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida end else begin SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _MOVLW(p1^.valInt); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //Si p1 > p2: C=0. + kMOVLW(value1); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; end; stConst_Expres: begin //la expresión p2 se evaluó y esta en W - if p1^.valInt = 0 then begin + if value1 = 0 then begin //0 es mayor que nada SetROBResultConst_bool(false); // GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida @@ -2160,59 +1293,53 @@ procedure TGenCod.ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); //Se necesita asegurar que p1, es mayo que cero. SetROBResultExpres_bool(Opt, true); //invierte la lógica //p2, ya está en W - _SUBLW(p1^.valInt-1); //Si p1 > p2: C=0. + kSUBLW(value1-1); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; end; stVariab_Const: begin - if p2^.valInt = 255 then begin + if value2 = 255 then begin //Nada es mayor que 255 SetROBResultConst_bool(false); GenWarn('Expression will always be FALSE or TRUE.'); end else begin SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _SUBLW(p2^.valInt); //Si p1 > p2: C=0. + kMOVF(byte1, toW); + kSUBLW(value2); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; end; stVariab_Variab:begin SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //Si p1 > p2: C=0. + kMOVF(byte1, toW); + kSUBWF(byte2, toW); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en W SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado tmp := GetAuxRegisterByte; //Se pide registro auxiliar - _MOVWF(tmp.offs); //guarda resultado de expresión + kMOVWF(tmp.addr); //guarda resultado de expresión //Ahora es como stVariab_Variab - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(tmp.bank); //verifica banco destino - _SUBWF(tmp.offs, toW); //Si p1 > tmp: C=0. + kMOVF(byte1, toW); + kSUBWF(tmp.addr, toW); //Si p1 > tmp: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) tmp.used := false; //libera end; stExpres_Const: begin //la expresión p1 se evaluó y esta en W - if p2^.valInt = 255 then begin - //nada es mayor que 255 + if value2 = 255 then begin + //Nada es mayor que 255 SetROBResultConst_bool(false); // GenWarn('Expression will always be FALSE.'); //o TRUE si la lógica Está invertida end else begin SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado // p1, ya está en W - _SUBLW(p2^.valInt); //Si p1 > p2: C=0. + kSUBLW(value2); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; end; stExpres_Variab:begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.offs, toW); //Si p1 > p2: C=0. + kSUBWF(byte2, toW); //Si p1 > p2: C=0. CopyInvert_C_to_Z; //Pasa C a Z (invirtiendo) end; stExpres_Expres:begin @@ -2223,12 +1350,12 @@ procedure TGenCod.ROB_byte_great_byte(Opt: TxpOperation; SetRes: boolean); FreeStkRegisterByte; //libera pila porque ya se usó el dato ahí contenido end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_byte_less_byte(Opt: TxpOperation; SetRes: boolean); begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; @@ -2260,7 +1387,7 @@ procedure TGenCod.ROB_byte_lequ_byte(Opt: TxpOperation; SetRes: boolean); ROB_byte_great_byte(Opt, SetRes); res.Invert; end; -procedure TGenCod.CodifShift_by_W(aux: TPicRegister; toRight: boolean); +procedure TGenCod.CodifShift_by_W(target: TPicRegister; toRight: boolean); {Desplaza el registro "aux", las veces indicadas en el registro W. Deja el resultado en W. Deja el banco, en el banco de "aux"} @@ -2269,37 +1396,46 @@ procedure TGenCod.CodifShift_by_W(aux: TPicRegister; toRight: boolean); var loop1: Word; dg: integer; + bnkExp1: Byte; begin - _BANKSEL(aux.bank); //quedará en este banco + bnkExp1 := CurrBank; //Guarda el banco al entrar la rutina _ADDLW(1); //corrige valor inicial loop1 := _PC; _ADDLW(255); //W=W-1 (no hay instrucción DECW) _BTFSC(Z.offs, Z.bit); _GOTO_PEND(dg); //Dio, cero, termina //Desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - if toRight then //a la derecha - _RRF(aux.offs, toF) - else - _RLF(aux.offs, toF); + if toRight then kSHIFTR(target.addr, toF) else kSHIFTL(target.addr, toF); _GOTO(loop1); //Terminó el lazo - //Ya estamos en el banco de "aux" pic.codGotoAt(dg, _PC); //termina de codificar el salto - _MOVF(aux.offs, toW); //deja en W + {El valor del banco RAM al terminar de ejecutarse esta rutina sería: + * El mismo banco antes de entrar -> Si el lazo no se ejecuto ninguna vez. + * El mismo banco de "target" -> Si el lazo se ejecuta al menos una vez. + Si en "bnkExp1" almacenamos el banco al inicio de la rutina, se concluye entonces + que: + * Si "bnkExp1" es igual al banco de "target", No se generan instrucciones de cambio de + banco y todo trabaja pues no se altera "CurrBank", + * Si "bnkExp1" es diferente al banco de "target", entonces se generarán instrucciones + de cambio de banco en el lazo, pero como no sabemos si se ejecutarán, por seguridad + generamos código obligatorio para fijar siempre el banco de salida en el de "target".} + if bnkExp1 <> target.bank then begin + CurrBank := 255; //Para forzar a generar cambio de banco + _BANKSEL(target.bank); //quedará en este banco + end; end; procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la derecha var aux: TPicRegister; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_byte(p1^.valInt >> p2^.valInt); + SetROBResultConst_byte(value1 >> value2); end; // stConst_Variab: begin // end; @@ -2308,63 +1444,45 @@ procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desp stVariab_Const: begin SetROBResultExpres_byte(Opt); //Se pide Z para el resultado //Verifica casos simples - if p2^.valInt = 0 then begin - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); //solo devuelve lo mismo en W - end else if p2^.valInt = 1 then begin - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _BANKSEL(p1^.bank); //verifica banco destino - _RRF(p1^.offs, toW); //devuelve desplazado en W - end else if p2^.valInt = 2 then begin + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTR(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 3 then begin + end else if value2 = 3 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 4 then begin + end else if value2 = 4 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTR(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; end else begin + //Caso general aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(aux.bank); - _MOVWF(aux.offs); + kMOVF(byte1, toW); + kMOVWF(aux.addr); //copia p2 a W - _MOVLW(p2^.valInt); + kMOVLW(value2); //lazo de rotación CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; end; @@ -2372,15 +1490,13 @@ procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desp SetROBResultExpres_byte(Opt); //Se pide Z para el resultado aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(aux.bank); - _MOVWF(aux.offs); + kMOVF(byte1, toW); + kMOVWF(aux.addr); //copia p2 a W - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); //lazo de rotación CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; // stVariab_Expres:begin //la expresión p2 se evaluó y esta en W @@ -2388,52 +1504,43 @@ procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desp stExpres_Const: begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); //Se pide Z para el resultado //Verifica casos simples - if p2^.valInt = 0 then begin + if value2 = 0 then begin //solo devuelve lo mismo en W - end else if p2^.valInt = 1 then begin + end else if value2 = 1 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //devuelve desplazado en W + kMOVWF(aux.addr); + kSHIFTR(aux.addr, toW); //devuelve desplazado en W aux.used := false; - end else if p2^.valInt = 2 then begin + end else if value2 = 2 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 3 then begin + end else if value2 = 3 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 4 then begin + end else if value2 = 4 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RRF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toF); //desplaza + kSHIFTR(aux.addr, toW); //desplaza y devuelve en W aux.used := false; end else begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _MOVWF(aux.offs); + kMOVWF(aux.addr); //copia p2 a W - _MOVLW(p2^.valInt); + kMOVLW(value2); //lazo de rotación CodifShift_by_W(aux, true); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; end; @@ -2442,21 +1549,21 @@ procedure TGenCod.ROB_byte_shr_byte(Opt: TxpOperation; SetRes: boolean); //Desp // stExpres_Expres:begin // end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Desplaza a la izquierda var aux: TPicRegister; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_byte(p1^.valInt << p2^.valInt); + SetROBResultConst_byte(value1 << value2); end; // stConst_Variab: begin // end; @@ -2465,63 +1572,44 @@ procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Des stVariab_Const: begin SetROBResultExpres_byte(Opt); //Se pide Z para el resultado //Verifica casos simples - if p2^.valInt = 0 then begin - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); //solo devuelve lo mismo en W - end else if p2^.valInt = 1 then begin - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _BANKSEL(p1^.bank); //verifica banco destino - _RLF(p1^.offs, toW); //devuelve desplazado en W - end else if p2^.valInt = 2 then begin + if value2 = 0 then begin + kMOVF(byte1, toW); //solo devuelve lo mismo en W + end else if value2 = 1 then begin + kSHIFTL(byte1, toW); //devuelve desplazado en W + end else if value2 = 2 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 3 then begin + end else if value2 = 3 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 4 then begin + end else if value2 = 4 then begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(p1^.offs, toW); //desplaza y mueve - _BANKSEL(aux.bank); - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kSHIFTL(byte1, toW); //desplaza y mueve + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; end else begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(aux.bank); - _MOVWF(aux.offs); + kMOVF(byte1, toW); + kMOVWF(aux.addr); //copia p2 a W - _MOVLW(p2^.valInt); + kMOVLW(value2); //lazo de rotación CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; end; @@ -2529,15 +1617,13 @@ procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Des SetROBResultExpres_byte(Opt); //Se pide Z para el resultado aux := GetAuxRegisterByte; //copia p1 a "aux" - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _BANKSEL(aux.bank); - _MOVWF(aux.offs); + kMOVF(byte1, toW); + kMOVWF(aux.addr); //copia p2 a W - _BANKSEL(p2^.bank); - _MOVF(p2^.offs, toW); + kMOVF(byte2, toW); //lazo de rotación CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; // stVariab_Expres:begin //la expresión p2 se evaluó y esta en W @@ -2545,380 +1631,74 @@ procedure TGenCod.ROB_byte_shl_byte(Opt: TxpOperation; SetRes: boolean); //Des stExpres_Const: begin //la expresión p1 se evaluó y esta en W SetROBResultExpres_byte(Opt); //Se pide Z para el resultado //Verifica casos simples - if p2^.valInt = 0 then begin + if value2 = 0 then begin //solo devuelve lo mismo en W - end else if p2^.valInt = 1 then begin + end else if value2 = 1 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //devuelve desplazado en W + kMOVWF(aux.addr); + kSHIFTL(aux.addr, toW); //devuelve desplazado en W aux.used := false; - end else if p2^.valInt = 2 then begin + end else if value2 = 2 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 3 then begin + end else if value2 = 3 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; - end else if p2^.valInt = 4 then begin + end else if value2 = 4 then begin aux := GetAuxRegisterByte; - _MOVWF(aux.offs); //copia p1 a "aux" - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toF); //desplaza - _BCF(STATUS, _C); //limpia bandera porque se hace rotación - _RLF(aux.offs, toW); //desplaza y devuelve en W + kMOVWF(aux.addr); //copia p1 a "aux" + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toF); //desplaza + kSHIFTL(aux.addr, toW); //desplaza y devuelve en W aux.used := false; end else begin aux := GetAuxRegisterByte; //copia p1 a "aux" - _MOVWF(aux.offs); + kMOVWF(aux.addr); //copia p2 a W - _MOVLW(p2^.valInt); + kMOVLW(value2); //lazo de rotación CodifShift_by_W(aux, false); + kMOVF(aux.addr, toW); //deja en W aux.used := false; end; end; // stExpres_Variab:begin //la expresión p1 se evaluó y esta en W -// end; -// stExpres_Expres:begin -// end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -//////////// Operaciones con Word -procedure TGenCod.ROB_word_asig_word(Opt: TxpOperation; SetRes: boolean); -var - aux: TPicRegister; -begin - //Simplifcamos el caso en que p2, sea de tipo p2^ - if not ChangePointerToExpres(p2^) then exit; - //Realiza la asignación - if p1^.Sto = stVariab then begin - case p2^.Sto of - stConst : begin - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - _BANKSEL(p1^.bank); - if p2^.LByte = 0 then begin //optimiza - _CLRF(p1^.Loffs); - end else begin - _MOVLW(p2^.LByte); - _MOVWF(p1^.Loffs); - end; - if p2^.HByte = 0 then begin //optimiza - _CLRF(p1^.Hoffs); - end else begin - _MOVLW(p2^.HByte); - _MOVWF(p1^.Hoffs); - end; - end; - stVariab: begin - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - _BANKSEL(p2^.bank); - _MOVF(p2^.Loffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Loffs); - _BANKSEL(p2^.bank); - _MOVF(p2^.Hoffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Hoffs); - end; - stExpres: begin //se asume que se tiene en (H,w) - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - _BANKSEL(p1^.bank); - _MOVWF(p1^.Loffs); - _BANKSEL(H.bank); - _MOVF(H.offs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Hoffs); - end; - else - GenError('No soportado'); exit; - end; - end else if p1^.Sto = stVarRefVar then begin - //Asignación a una variable - SetResultNull; //Fomalmente, una aisgnación no devuelve valores en Pascal - case p2^.Sto of - stConst : begin - //Caso especial de asignación a puntero derefrrenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona byte bajo - //Asignación normal - if p2^.LByte=0 then begin - //caso especial - _CLRF(0); - end else begin - _MOVLW(p2^.LByte); - _MOVWF(0); - end; - _INCF(FSR.offs, toF); //direcciona byte alto - if p2^.HByte=0 then begin - //caso especial - _CLRF(0); - end else begin - _MOVLW(p2^.HByte); - _MOVWF(0); - end; - end; - stVariab: begin - //Caso especial de asignación a puntero dereferenciado: variable^ - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona byte bajo - //Asignación normal - _BANKSEL(p2^.bank); //verifica banco fuente - _MOVF(p2^.Loffs, toW); - _MOVWF(0); - _INCF(FSR.offs, toF); //direcciona byte alto - _MOVF(p2^.Hoffs, toW); - _MOVWF(0); - end; - stExpres: begin //ya está en H,w - //Caso especial de asignación a puntero dereferenciado: variable^ - aux := GetAuxRegisterByte; - _BANKSEL(aux.bank); - _MOVWF(aux.offs); //Salva W (p2.L) - //Apunta con p1 - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.offs, toW); - _MOVWF(FSR.offs); //direcciona a byte bajo - //Asignación normal - _BANKSEL(aux.bank); - _MOVF(aux.offs, toW); //recupero p2.L - _MOVWF(0); //escribe - _BANKSEL(H.bank); - _MOVF(H.offs, toW); //recupero p2.H - _INCF(FSR.offs, toF); //apunta a byte alto - _MOVWF(0); //escribe - aux.used := false; - end; - else - GenError('No soportado'); exit; - end; - end else begin - GenError('Cannot assign to this Operand.'); exit; - end; -end; -procedure TGenCod.ROB_word_asig_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto = stVariab then begin - case p2^.Sto of - stConst : begin - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - if p2^.valInt = 0 then begin - //caso especial - _CLRF(p1^.Loffs); - _CLRF(p1^.Hoffs); - end else begin; - _CLRF(p1^.Hoffs); - _MOVLW(p2^.valInt); - _MOVWF(p1^.Loffs); - end; - end; - stVariab: begin - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Hoffs); - _MOVF(p2^.Loffs, toW); - _MOVWF(p1^.Loffs); - end; - stExpres: begin //se asume que está en w - SetROBResultExpres_word(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Hoffs); - _MOVWF(p1^.offs); - end; - else - GenError('No soportado'); exit; - end; - end else begin - GenError('Cannot assign to this Operand.'); exit; - end; -end; -procedure TGenCod.ROB_word_equal_word(Opt: TxpOperation; SetRes: boolean); -var - tmp: TPicRegister; - sale: integer; -begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin - GenError('Too complex pointer expression.'); exit; - end; - if not ChangePointerToExpres(p1^) then exit; - if not ChangePointerToExpres(p2^) then exit; - case stoOperation of - stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_bool(p1^.valInt = p2^.valInt); - end; - stConst_Variab: begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - ////////// Compara byte alto - if p1^.HByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale); //no son iguales - end else if p1^.HByte = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - {De no ser porque se tiene que devolver siempre, el valor de Z, - las 2 instrucciones anteriores, se podrían reemplazar con un DECFSZ, - pero DECFSZ, no actualiza Z} - _GOTO_PEND(sale); //no son iguales - end else if p1^.HByte = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - {De no ser porque se tiene que devolver siempre, el valor de Z, - las 2 instrucciones anteriores, se podrían reemplazar con un DECFSZ, - pero DECFSZ, no actualiza Z} - _GOTO_PEND(sale); //no son iguales - end else begin //caso general - _MOVLW(p1^.HByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale); //no son iguales - end; - ////////// Son iguales, comparar el byte bajo - if p1^.LByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Loffs,toW); //p2-p1 - _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end else if p1^.LByte = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Loffs,toW); //p2-p1 - _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end else if p1^.LByte = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Loffs,toW); //p2-p1 - _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end else begin - _MOVLW(p1^.LByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 - _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end; - end; - stConst_Expres: begin //la expresión p2 se evaluó p2 esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - tmp := GetAuxRegisterByte; - if HayError then exit; - _BANKSEL(tmp.bank); - _MOVWF(tmp.offs); //salva byte bajo de Expresión - //Compara byte alto - _MOVLW(p1^.HByte); - _BANKSEL(H.bank); //verifica banco destino - _SUBWF(H.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale); //no son iguales - //Son iguales, comparar el byte bajo - _MOVLW(p1^.LByte); - _BANKSEL(tmp.bank); //verifica banco destino - _SUBWF(tmp.offs,toW); //p2-p1 -_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - tmp.used := false; - end; - stVariab_Const: begin - ExchangeP1_P2; //Convierte a stConst_Variab - ROB_word_equal_word(Opt, SetRes); - end; - stVariab_Variab:begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale); //no son iguales - //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 -_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - tmp := GetAuxRegisterByte; - _BANKSEL(tmp.bank); - _MOVWF(tmp.offs); //salva byte bajo de Expresión - //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); - _BANKSEL(H.bank); //verifica banco destino - _SUBWF(H.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale); //no son iguales - //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); - _BANKSEL(tmp.bank); //verifica banco destino - _SUBWF(tmp.offs,toW); //p2-p1 - tmp.used := false; -_LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte a stConst_Expres; - ROB_word_equal_word(Opt, SetRes); - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte a stVariab_Expres; - ROB_word_equal_word(Opt, SetRes); - end; - stExpres_Expres:begin - //La expresión p1, debe estar salvada y p2 en (H,W) - p1^.SetAsVariab(GetVarWordFromStk); - //Luego el caso es similar a variable-expresión - ROB_word_equal_word(Opt, SetRes); - FreeStkRegisterWord; - end; +// end; +// stExpres_Expres:begin +// end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; -procedure TGenCod.ROB_word_difer_word(Opt: TxpOperation; SetRes: boolean); -begin - ROB_word_equal_word(Opt, SetRes); - res.Invert; -end; +//////////// Operaciones con Word procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); procedure codVariab_Const; {Codifica el caso variable (p1) - constante (p2)} var sale: integer; begin - if p2^.valInt = $FFFF then begin + if value2 = $FFFF then begin //Nada es mayor que $FFFF SetROBResultConst_bool(false); GenWarn('Expression will always be FALSE or TRUE.'); end else begin //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); - _SUBLW(p2^.HByte); //p2-p1 + kMOVF(byte1H, toW); + kSUBLW(value2H); //p2-p1 _BTFSS(Z.offs, Z.bit); _GOTO_PEND(sale); //no son iguales //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); - _SUBLW(p2^.LByte); //p2-p1 + kMOVF(byte1L, toW); + kSUBLW(value2L); //p2-p1 _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. CopyInvert_C_to_Z; //Pasa a Z end; @@ -2928,17 +1708,13 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); sale: integer; begin //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 + kMOVF(byte1H, toW); + kSUBWF(byte2H, toW); //p2-p1 _BTFSS(Z.offs, Z.bit); _GOTO_PEND(sale); //no son iguales //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 + kMOVF(byte1L, toW); + kSUBWF(byte2L, toW); //p2-p1 _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. CopyInvert_C_to_Z; //Pasa a Z end; @@ -2949,10 +1725,10 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); begin case stoOperation of stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_bool(p1^.valInt > p2^.valInt); + SetROBResultConst_bool(value1 > value2); end; stConst_Variab: begin - if p1^.valInt = 0 then begin + if value1 = 0 then begin //0 es mayor que nada SetROBResultConst_bool(false); GenWarn('Expression will always be FALSE or TRUE.'); @@ -2962,15 +1738,13 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); end else begin SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado //Compara byte alto - _MOVLW(p1^.HByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 + kMOVLW(value1H); + kSUBWF(byte2H, toW); //p2-p1 _BTFSS(Z.offs, Z.bit); _GOTO_PEND(sale); //no son iguales //Son iguales, comparar el byte bajo - _MOVLW(p1^.LByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 + kMOVLW(value1L); + kSUBWF(byte2L, toW); //p2-p1 _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. CopyInvert_C_to_Z; //Pasa a Z end; @@ -2981,13 +1755,13 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); _BANKSEL(tmp.bank); _MOVWF(tmp.offs); //salva byte bajo de Expresión //Compara byte alto - _MOVLW(p1^.HByte); + kMOVLW(value1H); _BANKSEL(H.bank); //verifica banco destino _SUBWF(H.offs, toW); //p2-p1 _BTFSS(Z.offs, Z.bit); _GOTO_PEND(sale); //no son iguales //Son iguales, comparar el byte bajo - _MOVLW(p1^.LByte); + kMOVLW(value1L); _BANKSEL(tmp.bank); //verifica banco destino _SUBWF(tmp.offs,toW); //p2-p1 _LABEL(sale); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. @@ -3008,15 +1782,13 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); _BANKSEL(tmp.bank); _MOVWF(tmp.offs); //salva byte bajo de Expresión //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); + kMOVF(byte1H, toW); _BANKSEL(H.bank); //verifica banco destino _SUBWF(H.offs, toW); //p2-p1 _BTFSS(Z.offs, Z.bit); _GOTO_PEND(sale); //no son iguales //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); + kMOVF(byte1L, toW); _BANKSEL(tmp.bank); //verifica banco destino _SUBWF(tmp.offs,toW); //p2-p1 tmp.used := false; @@ -3027,7 +1799,7 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); //guarda W - varTmp := NewTmpVarWord(aux, H); //Crea variable temporal + varTmp := NewTmpVarWord(aux.addr, H.addr); //Crea variable temporal p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable codVariab_Const; //Lo evalúa como stVariab_Const varTmp.Destroy; @@ -3037,7 +1809,7 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); //guarda W - varTmp := NewTmpVarWord(aux, H); //Crea variable temporal + varTmp := NewTmpVarWord(aux.addr, H.addr); //Crea variable temporal p1^.SetAsVariab(varTmp); //para que se pueda procesar como variable codVariab_Variab; //Lo evalúa como stVariab_Variab; varTmp.Destroy; @@ -3051,80 +1823,80 @@ procedure TGenCod.ROB_word_great_word(Opt: TxpOperation; SetRes: boolean); FreeStkRegisterWord; end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); var aux: TPicRegister; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin - if p1^.valInt+p2^.valInt <256 then begin + if value1+value2 <256 then begin //Optimiza - SetROBResultConst_byte(p1^.valInt+p2^.valInt); + SetROBResultConst_byte(value1+value2); end else begin - SetROBResultConst_word(p1^.valInt+p2^.valInt); + SetROBResultConst_word(value1+value2); end; end; stConst_Variab: begin SetROBResultExpres_word(Opt); { aux := GetUnusedByteRegister; //Pide un registro libre - _movlw(p1^.LByte); //Carga menos peso del dato 1 - _addwf(p2^.Loffs,toW); //Suma menos peso del dato 2 + kMOVLW(value1L); //Carga menos peso del dato 1 + _addwf(byte2L,toW); //Suma menos peso del dato 2 _movwf(aux); //Almacena el resultado - _movlw(p1^.HByte); //Carga más peso del dato 1 + kMOVLW(value1H); //Carga más peso del dato 1 _btfsc(STATUS,_C); //Hubo acarreo anterior? _addlw(1); //Si, suma 1 al acumulador - _addwf(p2^.Hoffs,toW); //Suma más peso del dato 2 + _addwf(byte2H,toW); //Suma más peso del dato 2 _movwf(H); //Guarda el resultado _movf(aux,toW); //deja byte bajo en W aux.Used := false; } //versión más corta que solo usa H, por validar - _movlw(p1^.HByte); //Carga más peso del dato 1 - _addwf(p2^.Hoffs,toW); //Suma más peso del dato 2 + kMOVLW(value1H); //Carga más peso del dato 1 + kADDWF(byte2H, toW); //Suma más peso del dato 2 _movwf(H.offs); //Guarda el resultado - _movlw(p1^.LByte); //Carga menos peso del dato 1 - _addwf(p2^.Loffs,toW); //Suma menos peso del dato 2, deja en W - _btfsc(STATUS,_C); //Hubo acarreo anterior? + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; //Pide un registro libre _movwf(aux.offs); //guarda byte bajo - _movlw(p1^.HByte); //Carga más peso del dato 1 + kMOVLW(value1H); //Carga más peso del dato 1 _addwf(H.offs,toF); //Suma y guarda - _movlw(p1^.LByte); //Carga menos peso del dato 1 + kMOVLW(value1L); //Carga menos peso del dato 1 _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; stVariab_Const: begin SetROBResultExpres_word(Opt); - _MOVLW(p2^.HByte); //Carga más peso del dato 1 - _ADDWF(p1^.Hoffs,toW); //Suma más peso del dato 2 + kMOVLW(value2H); //Carga más peso del dato 1 + kADDWF(byte1H, toW); //Suma más peso del dato 2 _MOVWF(H.offs); //Guarda el resultado - _MOVLW(p2^.LByte); //Carga menos peso del dato 1 - _ADDWF(p1^.Loffs,toW); //Suma menos peso del dato 2, deja en W - _BTFSC(STATUS,_C); //Hubo acarreo anterior? + kMOVLW(value2L); //Carga menos peso del dato 1 + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? _INCF(H.offs, toF); end; stVariab_Variab:begin SetROBResultExpres_word(Opt); - _MOVF(p1^.Hoffs, toW); //Carga mayor peso del dato 1 - _ADDWF(p2^.Hoffs,toW); //Suma mayor peso del dato 2 + kMOVF(byte1H, toW); //Carga mayor peso del dato 1 + kADDWF(byte2H, toW); //Suma mayor peso del dato 2 _MOVWF(H.offs); //Guarda mayor peso del resultado - _MOVF(p1^.Loffs, toW); //Carga menos peso del dato 1 - _ADDWF(p2^.Loffs,toW); //Suma menos peso del dato 2, deja en W - _BTFSC(STATUS,_C); //Hubo acarreo anterior? + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? _INCF(H.offs, toF); end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) @@ -3132,16 +1904,14 @@ procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); aux := GetAuxRegisterByte; //Pide un registro libre _BANKSEL(aux.bank); _movwf(aux.offs); //guarda byte bajo - _BANKSEL(p1^.bank); - _MOVF(p1^.Hoffs, toW); //Carga más peso del dato 1 + kMOVF(byte1H, toW); //Carga más peso del dato 1 _BANKSEL(H.bank); _addwf(H.offs,toF); //Suma y guarda //Siguiente byte - _BANKSEL(p1^.bank); - _MOVF(p1^.Loffs, toW); //Carga menos peso del dato 1 + kMOVF(byte1L, toW); //Carga menos peso del dato 1 _BANKSEL(aux.bank); _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; @@ -3149,11 +1919,11 @@ procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; //Pide un registro libre _movwf(aux.offs); //guarda byte bajo - _movlw(p2^.HByte); //Carga más peso del dato 1 + kMOVLW(value2H); //Carga más peso del dato 1 _addwf(H.offs,toF); //Suma y guarda - _movlw(p2^.LByte); //Carga menos peso del dato 1 + kMOVLW(value2L); //Carga menos peso del dato 1 _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; @@ -3161,16 +1931,14 @@ procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; //Pide un registro libre _movwf(aux.offs); //guarda byte bajo - _BANKSEL(p2^.bank); - _MOVF(p2^.Hoffs, toW); //Carga más peso del dato 1 + kMOVF(byte2H, toW); //Carga más peso del dato 1 _BANKSEL(H.bank); _addwf(H.offs,toF); //Suma y guarda - _BANKSEL(p2^.bank); - _MOVF(p2^.Loffs, toW); //Carga menos peso del dato 1 + kMOVF(byte2L, toW); //Carga menos peso del dato 1 _BANKSEL(aux.bank); _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; @@ -3183,7 +1951,7 @@ procedure TGenCod.ROB_word_add_word(Opt: TxpOperation; SetRes: boolean); FreeStkRegisterWord; //libera pila, obtiene dirección end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); @@ -3192,23 +1960,22 @@ procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); begin case stoOperation of stConst_Const: begin - if p1^.valInt+p2^.valInt <256 then begin + if value1+value2 <256 then begin //Optimiza - SetROBResultConst_byte(p1^.valInt+p2^.valInt); + SetROBResultConst_byte(value1+value2); end else begin - SetROBResultConst_word(p1^.valInt+p2^.valInt); + SetROBResultConst_word(value1+value2); end; end; stConst_Variab: begin SetROBResultExpres_word(Opt); //versión más corta que solo usa _H, por validar - _movlw(p1^.HByte); //Carga más peso del dato 1 + kMOVLW(value1H); //Carga más peso del dato 1 _BANKSEL(H.bank); _movwf(H.offs); - _movlw(p1^.LByte); //Carga menos peso del dato 1 - _BANKSEL(p2^.bank); - _addwf(p2^.Loffs,toW); //Suma menos peso del dato 2, deja en W - _btfsc(STATUS,_C); //Hubo acarreo anterior? + kMOVLW(value1L); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en (W) @@ -3216,42 +1983,37 @@ procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); aux := GetAuxRegisterByte; //Pide un registro libre _BANKSEL(aux.bank); _movwf(aux.offs); //guarda byte bajo - _movlw(p1^.HByte); //Carga más peso del dato 1 + kMOVLW(value1H); //Carga más peso del dato 1 _BANKSEL(H.bank); _movwf(H.offs); - _movlw(p1^.LByte); //Carga menos peso del dato 1 + kMOVLW(value1L); //Carga menos peso del dato 1 _BANKSEL(aux.bank); _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; stVariab_Const: begin SetROBResultExpres_word(Opt); - _BANKSEL(p1^.bank); //se cambia primero el banco por si acaso - _MOVF(p1^.Hoffs, toW); //Carga más peso del dato 1 + kMOVF(byte1H, toW); //Carga más peso del dato 1 _BANKSEL(H.bank); //se cambia primero el banco por si acaso _MOVWF(H.offs); //Guarda el resultado - _MOVLW(p2^.LByte); - _BANKSEL(p1^.bank); //se cambia primero el banco por si acaso - _ADDWF(p1^.Loffs,toW); //Suma menos peso del dato 2, deja en W + kMOVLW(value2L); + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _BTFSC(STATUS,_C); //Hubo acarreo anterior? + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? _INCF(H.offs, toF); end; stVariab_Variab:begin SetROBResultExpres_word(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.Hoffs, toW); //Carga más peso del dato 1 + kMOVF(byte1H, toW); //Carga más peso del dato 1 _BANKSEL(H.bank); _MOVWF(H.offs); - _BANKSEL(p1^.bank); - _MOVF(p1^.Loffs, toW); //Carga menos peso del dato 1 - _BANKSEL(p2^.bank); - _ADDWF(p2^.Loffs,toW); //Suma menos peso del dato 2, deja en W + kMOVF(byte1L, toW); //Carga menos peso del dato 1 + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _BTFSC(STATUS,_C); //Hubo acarreo anterior? + _BTFSC(_STATUS,_C); //Hubo acarreo anterior? _INCF(H.offs, toF); end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en (_H,W) @@ -3259,32 +2021,29 @@ procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); aux := GetAuxRegisterByte; //Pide un registro libre _BANKSEL(aux.bank); _movwf(aux.offs); //guarda byte de expresión - _BANKSEL(p1^.bank); - _movf(p1^.Hoffs, toW); //Carga Hbyte del dato 1 + kMOVF(byte1H, toW); //Carga Hbyte del dato 1 _BANKSEL(H.bank); _movwf(H.offs); //Lo deja para devolver en H _BANKSEL(aux.bank); _MOVF(aux.offs,toW); //recupera byte de expresión - _BANKSEL(p1^.bank); - _addwf(p1^.Loffs,toW); //Suma menos peso del dato 2, deja en W + kADDWF(byte1L, toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); aux.used := false; end; stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) SetROBResultExpres_word(Opt); - _addlw(p2^.LByte); //Suma menos peso del dato 2, deja en W + kADDLW(value2); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); end; stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) SetROBResultExpres_word(Opt); - _BANKSEL(p2^.bank); - _addwf(p2^.Loffs,toW); //Suma menos peso del dato 2, deja en W + kADDWF(byte2L, toW); //Suma menos peso del dato 2, deja en W _BANKSEL(H.bank); //se cambia primero el banco, por si acaso. - _btfsc(STATUS,_C); //Hubo acarreo anterior? + _btfsc(_STATUS,_C); //Hubo acarreo anterior? _incf(H.offs, toF); end; stExpres_Expres:begin @@ -3296,72 +2055,74 @@ procedure TGenCod.ROB_word_add_byte(Opt: TxpOperation; SetRes: boolean); FreeStkRegisterWord; //libera pila end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); var aux: TPicRegister; begin - if (p1^.Sto = stVarRefExp) and (p2^.Sto = stVarRefExp) then begin + if (p1^.Sto = stExpRef) and (p2^.Sto = stExpRef) then begin GenError('Too complex pointer expression.'); exit; end; if not ChangePointerToExpres(p1^) then exit; if not ChangePointerToExpres(p2^) then exit; case stoOperation of stConst_Const: begin - if p1^.valInt-p2^.valInt < 0 then begin + if value1-value2 < 0 then begin genError('Numeric value exceeds a word range.'); exit; end; - if p1^.valInt-p2^.valInt <256 then begin + if value1-value2 <256 then begin //Optimiza - SetROBResultConst_byte(p1^.valInt-p2^.valInt); + SetROBResultConst_byte(value1-value2); end else begin - SetROBResultConst_word(p1^.valInt-p2^.valInt); + SetROBResultConst_word(value1-value2); end; end; stConst_Variab: begin SetROBResultExpres_word(Opt); - _movf (p2^.Hoffs,toW); //p2->w - _SUBLW(p1^.HByte); //p1 - W -W - _movwf(H.offs); - _movf (p2^.Loffs,toW); //p2-W - _SUBLW(p1^.LByte); //p1-W->w - _btfss(STATUS, _C); - _decf(H.offs,toF); + kMOVF (byte2H, toW); //p2->w + kSUBLW(value1H); //p1 - W -W + kMOVWF(H.addr); + kMOVF (byte2L, toW); //p2-W + kSUBLW(value1L); //p1-W->w + _BANKSEL(H.bank); //Para fijar el banco de salida de la condicional + _BTFSS(_STATUS, _C); + _DECF (H.offs, toF); end; stConst_Expres: begin //la expresión p2 se evaluó y esta en (H,W) SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; - _MOVWF(aux.offs); - _movf (H.offs,toW); //p2->w - _SUBLW(p1^.HByte); //p1 - W -W - _movwf(H.offs); - _movf (aux.offs,toW); //p2-W - _SUBLW(p1^.LByte); //p1-W->w - _btfss(STATUS, _C); - _decf(H.offs,toF); + kMOVWF(aux.addr); + kMOVF(H.addr, toW); //p2->w + kSUBLW(value1H); //p1 - W -W + kMOVWF(H.addr); + kMOVF (aux.addr, toW); //p2-W + kSUBLW(value1L); //p1-W->w + _BANKSEL(H.bank); //Para fijar el banco de salida de la condicional + _BTFSS(_STATUS, _C); + _DECF (H.offs, toF); aux.used := false; end; stVariab_Const: begin SetROBResultExpres_word(Opt); - _movlw(p2^.HByte); - _subwf(p1^.Hoffs,toW); + kMOVLW(value2H); + kSUBWF(byte1H,toW); _movwf(H.offs); - _movlw(p2^.LByte); - _subwf(p1^.Loffs,toW); - _btfss(STATUS, _C); + kMOVLW(value2L); + kSUBWF(byte1L, toW); + _btfss(_STATUS, _C); _decf(H.offs,toF); end; stVariab_Variab:begin //p1 - p2 SetROBResultExpres_word(Opt); - _movf (p2^.Hoffs,toW); - _subwf(p1^.Hoffs,toW); + kMOVF (byte2H, toW); + kSUBWF(byte1H,toW); _movwf(H.offs); - _movf (p2^.Loffs,toW); - _subwf(p1^.Loffs,toW); - _btfss(STATUS, _C); + kMOVF (byte2L, toW); + kSUBWF(byte1L,toW); + _btfss(_STATUS, _C); _decf(H.offs,toF); end; stVariab_Expres:begin //la expresión p2 se evaluó y esta en (H,W) @@ -3369,11 +2130,11 @@ procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); _movf (H.offs,toW); - _subwf(p1^.Hoffs,toW); + kSUBWF(byte1H,toW); _movwf(H.offs); _movf (aux.offs,toW); - _subwf(p1^.Loffs,toW); - _btfss(STATUS, _C); + kSUBWF(byte1L, toW); + _btfss(_STATUS, _C); _decf(H.offs,toF); aux.used := false; end; @@ -3381,11 +2142,11 @@ procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); - _movlw(p2^.HByte); + kMOVLW(value2H); _subwf(H.offs, toF); - _movlw(p2^.LByte); + kMOVLW(value2L); _subwf(aux.offs,toW); - _btfss(STATUS, _C); + _btfss(_STATUS, _C); _decf(H.offs,toF); aux.used := false; end; @@ -3393,11 +2154,11 @@ procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); SetROBResultExpres_word(Opt); aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); - _movf(p2^.Hoffs, toW); + kMOVF(byte2H, toW); _subwf(H.offs, toF); - _movf(p2^.Loffs, toW); + kMOVF(byte2L, toW); _subwf(aux.offs,toW); - _btfss(STATUS, _C); + _btfss(_STATUS, _C); _decf(H.offs,toF); aux.used := false; end; @@ -3410,7 +2171,7 @@ procedure TGenCod.ROB_word_sub_word(Opt: TxpOperation; SetRes: boolean); FreeStkRegisterWord; //libera pila, obtiene dirección end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.word_mul_word_16(fun: TxpEleFun); @@ -3441,546 +2202,28 @@ procedure TGenCod.word_mul_word_16(fun: TxpEleFun); _MOVF (SYSTMP01.offs,toW); _ADDWF (SYSTMP00.offs,toF); _MOVF (SYSTMP02.offs,toW); - _BTFSC (STATUS,0 ); + _BTFSC (_STATUS,0 ); _ADDLW (1); _ADDWF (H.offs,toF); // END_IF_1: - _BCF (STATUS, 0); //STATUS.C := 0 + _BCF (_STATUS, 0); //STATUS.C := 0 _RRF (E.offs, toF ); //OP_B>>1 _RRF (U.offs, toF ); - _BCF (STATUS, 0); //STATUS.C := 0 + _BCF (_STATUS, 0); //STATUS.C := 0 _RLF (SYSTMP01.offs,toF); //OP_A<<1 _RLF (SYSTMP02.offs,toF); _MOVF (E.offs, toW); //Si (OP_B>0) then goto MUL16LOOP _IORWF (U.offs, toW); - _BTFSS (STATUS, 2); + _BTFSS (_STATUS, 2); _GOTO (MUL16LOOP); //OP_B>0 - _MOVF (SYSTMP00.offs, toW); //Return RES.LOW to toW + _MOVF (SYSTMP00.offs, toW); //i_RETURN RES.LOW to toW SYSTMP00.used := false; SYSTMP01.used := false; SYSTMP02.used := false; EndCodeSub; //termina codificación end; -procedure TGenCod.ROB_word_umulword_word(Opt: TxpOperation; SetRes: boolean); -begin - case stoOperation of - stConst_Const:begin //producto de dos constantes. Caso especial - SetROBResultConst_word((p1^.valInt*p2^.valInt) and $FFFF); //puede generar error - exit; //sale aquí, porque es un caso particular - end; -// stConst_Variab: begin -// SetROBResultExpres_word(Opt); -// _BANKSEL(p2^.bank); -// _MOVF(p2^.offs, toW); -// _BANKSEL(H.bank); -// _MOVWF(H.offs); -// _MOVLW(p1^.valInt); -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stConst_Expres: begin //la expresión p2 se evaluó y esta en W -// _BANKSEL(H.bank); -// _MOVWF(H.offs); -// _MOVLW(p1^.valInt); -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stVariab_Const: begin -// SetROBResultExpres_byte(Opt); -// _BANKSEL(p1^.bank); -// _MOVF(p1^.offs, toW); -// _BANKSEL(H.bank); -// _MOVWF(H.offs); -// _MOVLW(p2^.valInt); -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stVariab_Variab:begin -// SetROBResultExpres_byte(Opt); -// _BANKSEL(p1^.bank); -// _MOVF(p1^.offs, toW); -// _BANKSEL(H.bank); -// _MOVWF(H.offs); -// _BANKSEL(p2^.bank); -// _MOVF(p2^.offs, toW); -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stVariab_Expres:begin //la expresión p2 se evaluó y esta en W -// _BANKSEL(H.bank); -// _MOVWF(H.offs); //p2 -> H -// _BANKSEL(p1^.bank); -// _MOVF(p1^.offs, toW); //p1 -> W -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stExpres_Const: begin //la expresión p1 se evaluó y esta en W -// _MOVWF(H.offs); //p1 -> H -// _MOVLW(p2^.valInt); //p2 -> W -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stExpres_Variab:begin //la expresión p1 se evaluó y esta en W -// _BANKSEL(H.bank); -// _MOVWF(H.offs); //p1 -> H -// _BANKSEL(p2^.bank); -// _MOVF(p2^.offs, toW); //p2 -> W -// _CALL(f_byteXbyte_byte.adrr); -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; -// stExpres_Expres:begin -// SetROBResultExpres_byte(Opt); -// //la expresión p1 debe estar salvada y p2 en el acumulador -// FreeStkRegisterByte(r); //libera pila porque se usará el dato ahí contenido -// _BANKSEL(H.bank); -// _MOVWF(H.offs); //p2 -> H -// _BANKSEL(r.bank); -// _MOVF(r.offs, toW); //p1 -> W -// _CALL(f_byteXbyte_byte.adrr); -// {Se podría ahorrar el paso de mover la variable de la pila a W (y luego a una -// variable) temporal, si se tuviera una rutina de multiplicación que compilara a -// partir de la direccion de una variable (en este caso de la pila, que se puede -// modificar), pero es un caso puntual, y podría no reutilizar el código apropiadamente.} -// if FirstPass then f_byteXbyte_byte.AddCaller; -// end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_word_and_byte(Opt: TxpOperation; SetRes: boolean); -begin - case stoOperation of - stConst_Const: begin - //Optimiza - SetROBResultConst_byte(p1^.valInt and p2^.valInt); - end; - stConst_Variab: begin - SetROBResultExpres_byte(Opt); - _movlw(p1^.LByte); //Carga menos peso del dato 1 - _BANKSEL(p2^.bank); - _andwf(p2^.Loffs,toW); //deja en W - end; - stConst_Expres: begin //la expresión p2 se evaluó y esta en (W) - SetROBResultExpres_byte(Opt); - _andlw(p1^.LByte); //Deja en W - end; - stVariab_Const: begin - SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.Loffs, toW); - _ANDLW(p2^.LByte); - end; - stVariab_Variab:begin - SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _MOVF(p1^.Loffs, toW); - _BANKSEL(p2^.bank); - _ANDWF(p2^.Loffs, toW); - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en (_H,W) - SetROBResultExpres_byte(Opt); - _BANKSEL(p1^.bank); - _ANDWF(p1^.Loffs, toW); - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en (H,W) - SetROBResultExpres_byte(Opt); - _ANDLW(p2^.LByte); - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en (H,W) - SetROBResultExpres_byte(Opt); - _BANKSEL(p2^.bank); - _ANDWF(p2^.Loffs, toW); - end; - stExpres_Expres:begin - SetROBResultExpres_byte(Opt); - //p1 está salvado en pila y p2 en (W) - p1^.SetAsVariab(GetVarWordFromStk); //Convierte a variable - //Luego el caso es similar a stVariab_Expres - _BANKSEL(p1^.bank); - _ANDWF(p1^.Loffs, toW); - FreeStkRegisterWord; //libera pila - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROU_addr_word(Opr: TxpOperator; SetRes: boolean); -{Devuelve la dirección de una variable.} -begin - case p1^.Sto of - stConst : begin - genError('Cannot obtain address of constant.'); - end; - stVariab: begin - //Es una variable normal - //La dirección de una variable es constante - SetResultConst(typByte); - //No se usa p1^.offs, porque solo retorna 7 bits; - res.valInt := p1^.rVar.addr and $ff; - end; - stExpres: begin //ya está en STATUS.Z - genError('Cannot obtain address of an expression.'); - end; - else - genError('Cannot obtain address of this operand.'); - end; -end; //////////// Operaciones con Dword -procedure TGenCod.ROB_dword_asig_byte(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto <> stVariab then begin //validación - GenError('Only variables can be assigned.'); exit; - end; - case p2^.Sto of - stConst : begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - if p2^.valInt = 0 then begin - //caso especial - _CLRF(p1^.Loffs); - _CLRF(p1^.Hoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Uoffs); - end else begin; - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Hoffs); - _MOVLW(p2^.valInt); - _MOVWF(p1^.Loffs); - end; - end; - stVariab: begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Hoffs); - _MOVF(p2^.Loffs, toW); - _MOVWF(p1^.Loffs); - end; - stExpres: begin //se asume que está en w - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Hoffs); - _MOVWF(p1^.offs); - end; - else - GenError('No soportado'); exit; - end; -end; -procedure TGenCod.ROB_dword_asig_word(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto <> stVariab then begin //validación - GenError('Only variables can be assigned.'); exit; - end; - case p2^.Sto of - stConst : begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - if p2^.valInt = 0 then begin - //caso especial - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Hoffs); - _CLRF(p1^.Loffs); - end else begin; - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _MOVLW(p2^.HByte); - _MOVWF(p1^.Hoffs); - _MOVLW(p2^.LByte); - _MOVWF(p1^.Loffs); - end; - end; - stVariab: begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _MOVF(p2^.Hoffs, toW); - _MOVWF(p1^.Hoffs); - _MOVF(p2^.Loffs, toW); - _MOVWF(p1^.Loffs); - end; - stExpres: begin //se asume que está en w - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _MOVWF(p1^.Loffs); - _MOVF(H.offs, toW); - _MOVWF(p1^.Hoffs); - end; - else - GenError('No soportado'); exit; - end; -end; -procedure TGenCod.ROB_dword_asig_dword(Opt: TxpOperation; SetRes: boolean); -begin - if p1^.Sto <> stVariab then begin //validación - GenError('Only variables can be assigned.'); exit; - end; - case p2^.Sto of - stConst : begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - if p2^.valInt = 0 then begin - //caso especial - _BANKSEL(p1^.bank); - _CLRF(p1^.Uoffs); - _CLRF(p1^.Eoffs); - _CLRF(p1^.Hoffs); - _CLRF(p1^.Loffs); - end else begin; - _BANKSEL(p1^.bank); - _MOVLW(p2^.UByte); - _MOVWF(p1^.Uoffs); - _MOVLW(p2^.EByte); - _MOVWF(p1^.Eoffs); - _MOVLW(p2^.HByte); - _MOVWF(p1^.Hoffs); - _MOVLW(p2^.LByte); - _MOVWF(p1^.Loffs); - end; - end; - stVariab: begin - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _BANKSEL(p2^.bank); - _MOVF(p2^.Uoffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Uoffs); - _BANKSEL(p2^.bank); - _MOVF(p2^.Eoffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Eoffs); - _BANKSEL(p2^.bank); - _MOVF(p2^.Hoffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Hoffs); - _BANKSEL(p2^.bank); - _MOVF(p2^.Loffs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Loffs); - end; - stExpres: begin //se asume que está en w - SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _MOVWF(p1^.Loffs); - _BANKSEL(H.bank); - _MOVF(H.offs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Hoffs); - _BANKSEL(E.bank); - _MOVF(E.offs, toW); - _BANKSEL(p1^.bank); - _MOVWF(p1^.Eoffs); - _BANKSEL(U.bank); - _MOVF(U.offs, toW); - _MOVWF(p1^.Uoffs); - end; - else - GenError('No soportado'); exit; - end; -end; -procedure TGenCod.ROB_dword_equal_dword(Opt: TxpOperation; SetRes: boolean); -var - sale1, sale2, sale3: integer; -begin - case stoOperation of - stConst_Const: begin //compara constantes. Caso especial - SetROBResultConst_bool(p1^.valInt = p2^.valInt); - end; - stConst_Variab: begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //Compara byte U - if p1^.UByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Uoffs, toW); //p2=0? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - end else if p1^.UByte = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Uoffs, toW); //p2=1? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - end else if p1^.UByte = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Uoffs, toW); //p2=255? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - end else begin //caso general - _MOVLW(p1^.UByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Uoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - end; - //Compara byte E - if p1^.EByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Eoffs, toW); //p2=0? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - end else if p1^.EByte = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Eoffs, toW); //p2=1? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - end else if p1^.EByte = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Eoffs, toW); //p2=255? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - end else begin //caso general - _MOVLW(p1^.EByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Eoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - end; - //Compara byte H - if p1^.HByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Hoffs, toW); //p2=0? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - end else if p1^.HByte = 1 then begin - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Hoffs, toW); //p2=1? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - end else if p1^.HByte = 255 then begin - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Hoffs, toW); //p2=255? - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - end else begin //caso general - _MOVLW(p1^.HByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - end; - //Son iguales, comparar el byte bajo - if p1^.LByte = 0 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.Loffs,toW); //p2=0? - end else if p1^.LByte = 1 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _DECF(p2^.Loffs,toW); //p2=1? - end else if p1^.LByte = 255 then begin //caso especial - _BANKSEL(p2^.bank); //verifica banco destino - _INCF(p2^.Loffs,toW); //p2=255? - end else begin //caso general - _MOVLW(p1^.LByte); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 - end; -_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. -_LABEL(sale2); -_LABEL(sale3); - end; - stConst_Expres: begin //la expresión p2 se evaluó y está en UEHW - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //Compara byte L - _SUBLW(p1^.LByte); //p2^.L está en W - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - //Compara byte H - _MOVLW(p1^.HByte); - _SUBWF(H.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - //Compara byte E - _MOVLW(p1^.EByte); - _SUBWF(E.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - //Comparar el byte U - _MOVLW(p1^.UByte); - _SUBWF(U.offs,toW); //p2-p1 -_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. -_LABEL(sale2); -_LABEL(sale3); - end; - stVariab_Const: begin - ExchangeP1_P2; //Convierte a stConst_Variab - ROB_dword_equal_dword(Opt, SetRes); - end; - stVariab_Variab:begin - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //Compara byte U - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Uoffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Uoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - //Compara byte E - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Eoffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Eoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - //Compara byte alto - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Hoffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Hoffs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - //Son iguales, comparar el byte bajo - _BANKSEL(p1^.bank); //verifica banco destino - _MOVF(p1^.Loffs, toW); - _BANKSEL(p2^.bank); //verifica banco destino - _SUBWF(p2^.Loffs,toW); //p2-p1 -_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. -_LABEL(sale2); -_LABEL(sale3); - end; - stVariab_Expres:begin //la expresión p2 se evaluó y esta en W - SetROBResultExpres_bool(Opt, false); //Se pide Z para el resultado - //Compara byte L - _SUBWF(p1^.Loffs, toW); //p2^.L ya está en W - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale1); //no son iguales - //Compara byte H - _MOVF(p1^.Hoffs, toW); - _SUBWF(H.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale2); //no son iguales - //Compara byte E - _MOVF(p1^.Eoffs, toW); - _SUBWF(E.offs, toW); //p2-p1 - _BTFSS(Z.offs, Z.bit); - _GOTO_PEND(sale3); //no son iguales - //Comparar el byte U - _MOVF(p1^.Uoffs, toW); - _SUBWF(U.offs,toW); //p2-p1 -_LABEL(sale1); //Si p1=p2 -> Z=1. Si p1>p2 -> C=0. -_LABEL(sale2); -_LABEL(sale3); - end; - stExpres_Const: begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte a stConst_Expres; - ROB_dword_equal_dword(Opt, SetRes); - end; - stExpres_Variab:begin //la expresión p1 se evaluó y esta en W - ExchangeP1_P2; //Convierte a stVariab_Expres; - ROB_dword_equal_dword(Opt, SetRes); - end; - stExpres_Expres:begin - //La expresión p1, debe estar salvada y p2 en (H,W,E,U) - p1^.SetAsVariab(GetVarDWordFromStk); - //Luego el caso es similar a variable-expresión - ROB_dword_equal_dword(Opt, SetRes); - FreeStkRegisterdWord; - end; - else - genError('Cannot Compile: "%s"', [Opt.OperationString]); - end; -end; -procedure TGenCod.ROB_dword_difer_dword(Opt: TxpOperation; SetRes: boolean); -begin - ROB_dword_equal_dword(Opt, SetRes); - res.Invert; -end; procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); var aux: TPicRegister; @@ -3988,38 +2231,38 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); begin case stoOperation of stConst_Const: begin - if p1^.valInt+p2^.valInt < $FF then begin + if value1+value2 < $FF then begin //Optimiza - SetROBResultConst_byte(p1^.valInt+p2^.valInt); - end else if p1^.valInt+p2^.valInt < $FFFF then begin + SetROBResultConst_byte(value1+value2); + end else if value1+value2 < $FFFF then begin //Optimiza - SetROBResultConst_word(p1^.valInt+p2^.valInt); + SetROBResultConst_word(value1+value2); end else begin - SetROBResultConst_dword(p1^.valInt+p2^.valInt); + SetROBResultConst_dword(value1+value2); end; end; stConst_Variab: begin SetROBResultExpres_dword(Opt); aux := GetAuxRegisterByte; //Pide un registro libre if HayError then exit; - _movf (p2^.Loffs,toW); - _ADDLW (p1^.LByte); //Cambia C + kMOVF (byte2L, toW); + _ADDLW (value1L); //Cambia C _movwf (aux.offs); //Guarda Byte L de resultado - _movf (p2^.Hoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2H, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Hoffs,toW); - _ADDLW (p1^.HByte); //Cambia C + _ADDLW (value1H); //Cambia C _movwf (H.offs); //Guarda Byte H de resultado - _movf (p2^.Eoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2E, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Eoffs,toW); _ADDLW (p1^.EByte); //Cambia C _movwf (E.offs); //Guarda Byte E de resultado - _movf (p2^.Uoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2U, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Uoffs,toW); _ADDLW (p1^.UByte); _movwf (U.offs); //Guarda Byte U de resultado @@ -4033,7 +2276,7 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); //K + WHEU -> WHEU, se puede manejar como asignación con sums aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); //guarda W - varTmp := NewTmpVarDword(aux, H, E, U); //Crea variable temporal, con los RT + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal, con los RT p2^.SetAsVariab(varTmp); //Convierte p2 a variable ExchangeP1_P2; //Convierte a p1 := p1 + K; ROB_dword_aadd_dword(Opt, false); //compila como autosuma @@ -4050,47 +2293,47 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); // Este algoritmo Falla // aux := GetAuxRegisterByte; //Pide un registro libre // if HayError then exit; -// _movf (p2^.Loffs,toW); -// _addwf(p1^.Loffs,toW); +// _movf (byte2L,toW); +// _addwf(byte1L,toW); // _movwf(aux.offs); -// _movf (p2^.Hoffs,toW); +// _movf (byte2H,toW); // _btfsc(STATUS, _C); // _addlw(1); -// _addwf(p1^.Hoffs,toW); +// _addwf(byte1H,toW); // _movwf(H.offs); -// _movf (p2^.Eoffs,toW); +// _movf (byte2E,toW); // _btfsc(STATUS, _C); // _addlw(1); -// _addwf(p1^.Eoffs,toW); +// _addwf(byte1E,toW); // _movwf(E.offs); -// _movf (p2^.Uoffs,toW); +// _movf (byte2U,toW); // _btfsc(STATUS, _C); // _addlw(1); -// _addwf(p1^.Uoffs,toW); +// _addwf(byte1U,toW); // _movwf(U.offs); // _movf (aux.offs, toW); // aux.used := false; aux := GetAuxRegisterByte; //Pide un registro libre if HayError then exit; - _movf (p2^.Loffs,toW); - _addwf (p1^.Loffs,toW); //Cambia C + kMOVF (byte2L, toW); + kADDWF (byte1L, toW); //Cambia C _movwf (aux.offs); //Guarda Byte L de resultado - _movf (p2^.Hoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2H, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Hoffs,toW); _addwf (p1^.Hoffs,toW); //Cambia C _movwf (H.offs); //Guarda Byte H de resultado - _movf (p2^.Eoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2E, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Eoffs,toW); _addwf (p1^.Eoffs,toW); //Cambia C _movwf (E.offs); //Guarda Byte E de resultado - _movf (p2^.Uoffs,toW); //Prepara sumando. Altera Z, pero no toca C - _btfsc (STATUS,_C); //Mira acarreo de operación anterior + kMOVF (byte2U, toW); //Prepara sumando. Altera Z, pero no toca C + _btfsc (_STATUS,_C); //Mira acarreo de operación anterior _incfsz (p2^.Uoffs,toW); _addwf (p1^.Uoffs,toW); _movwf (U.offs); //Guarda Byte U de resultado @@ -4107,12 +2350,12 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); // _BANKSEL(aux.bank); // _movwf(aux.offs); //guarda byte bajo // _BANKSEL(p1^.bank); -// _MOVF(p1^.Hoffs, toW); //Carga más peso del dato 1 +// _MOVF(byte1H, toW); //Carga más peso del dato 1 // _BANKSEL(H.bank); // _addwf(H.offs,toF); //Suma y guarda // //Siguiente byte // _BANKSEL(p1^.bank); -// _MOVF(p1^.Loffs, toW); //Carga menos peso del dato 1 +// _MOVF(byte1L, toW); //Carga menos peso del dato 1 // _BANKSEL(aux.bank); // _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W // _btfsc(STATUS,_C); //Hubo acarreo anterior? @@ -4124,7 +2367,7 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); //WHEU + K -> WHEU, se puede manejar como asignación con suma aux := GetAuxRegisterByte; //Pide un registro libre _MOVWF(aux.offs); //gaurda W - varTmp := NewTmpVarDword(aux, H, E, U); //Crea variable temporal + varTmp := NewTmpVarDword(aux.addr, H.addr, E.addr, U.addr); //Crea variable temporal p1^.SetAsVariab(varTmp); //Convierte p1 a variable ROB_dword_aadd_dword(Opt, false); //compila como autosuma _MOVF(aux.offs, toW); //devuelve byet bajo en W @@ -4137,11 +2380,11 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); // if HayError then exit; // _movwf(aux.offs); //guarda byte bajo // _BANKSEL(p2^.bank); -// _MOVF(p2^.Hoffs, toW); //Carga más peso del dato 1 +// _MOVF(byte2H, toW); //Carga más peso del dato 1 // _BANKSEL(H.bank); // _addwf(H.offs,toF); //Suma y guarda // _BANKSEL(p2^.bank); -// _MOVF(p2^.Loffs, toW); //Carga menos peso del dato 1 +// _MOVF(byte2L, toW); //Carga menos peso del dato 1 // _BANKSEL(aux.bank); // _addwf(aux.offs,toW); //Suma menos peso del dato 2, deja en W // _BANKSEL(H.bank); @@ -4161,7 +2404,7 @@ procedure TGenCod.ROB_dword_add_dword(Opt: TxpOperation; SetRes: boolean); // FreeStkRegisterByte(spL); //libera pila, obtiene dirección // end; else - genError('Cannot Compile: "%s"', [Opt.OperationString]); + genError(MSG_CANNOT_COMPL, [OperationStr(Opt)]); end; end; procedure TGenCod.ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); @@ -4172,80 +2415,80 @@ procedure TGenCod.ROB_dword_aadd_dword(Opt: TxpOperation; SetRes: boolean); case p2^.Sto of stConst : begin if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - if p2^.valInt = 0 then begin + if value2 = 0 then begin //No cambia - end else if p2^.valInt <= $FF then begin - _movlw (p2^.LByte); - _addwf (p1^.Loffs,toF); - _btfsc (STATUS,_C); + end else if value2 <= $FF then begin + kMOVLW (value2L); + kADDWF (byte1L,toF); + _btfsc (_STATUS,_C); _INCF (p1^.Hoffs,toF); - _btfsc (STATUS,_Z); + _btfsc (_STATUS,_Z); _INCF (p1^.Eoffs,toF); - _btfsc (STATUS,_Z); + _btfsc (_STATUS,_Z); _INCF (p1^.Uoffs,toF); - end else if p2^.valInt <= $FFFF then begin - _movlw (p2^.LByte); - _addwf (p1^.Loffs,toF); - _movlw (p2^.HByte); - _btfsc (STATUS,_C); + end else if value2 <= $FFFF then begin + kMOVLW (value2L); + kADDWF (byte1L,toF); + kMOVLW (value2H); + _btfsc (_STATUS,_C); _ADDLW (1); - _addwf (p1^.Hoffs,toF); - _btfsc (STATUS,_C); + kADDWF (byte1H, toF); + _btfsc (_STATUS,_C); _INCF (p1^.Eoffs,toF); - _btfsc (STATUS,_Z); + _btfsc (_STATUS,_Z); _INCF (p1^.Uoffs,toF); end else begin - _movlw (p2^.LByte); - _addwf (p1^.Loffs,toF); - _movlw (p2^.HByte); - _btfsc (STATUS,_C); + kMOVLW (value2L); + kADDWF (byte1L, toF); + kMOVLW (value2H); + _btfsc (_STATUS,_C); _ADDLW (1); - _addwf (p1^.Hoffs,toF); - _movlw (p2^.EByte); - _btfsc (STATUS,_C); + kADDWF (byte1H, toF); + kMOVLW (p2^.EByte); + _btfsc (_STATUS,_C); _ADDLW (1); - _addwf (p1^.Eoffs,toF); - _movlw (p2^.UByte); - _btfsc (STATUS,_C); + kADDWF (byte1E, toF); + kMOVLW (p2^.UByte); + _btfsc (_STATUS,_C); _ADDLW (1); - _addwf (p1^.Uoffs,toF); + kADDWF (byte1U,toF); end; end; stVariab: begin if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _movf (p2^.Loffs,toW); - _addwf (p1^.Loffs,toF); - _movf (p2^.Hoffs,toW); - _btfsc (STATUS,_C); + kMOVF (byte2L, toW); + kADDWF (byte1L, toF); + kMOVF (byte2H, toW); + _btfsc (_STATUS,_C); _incfsz (p2^.Hoffs,toW); _addwf (p1^.Hoffs,toF); - _movf (p2^.Eoffs,toW); - _btfsc (STATUS,_C); + kMOVF (byte2E, toW); + _btfsc (_STATUS,_C); _incfsz (p2^.Eoffs,toW); _addwf (p1^.Eoffs,toF); - _movf (p2^.Uoffs,toW); - _btfsc (STATUS,_C); + kMOVF (byte2U, toW); + _btfsc (_STATUS,_C); _incfsz (p2^.Uoffs,toW); _addwf (p1^.Uoffs,toF); end; stExpres: begin //Se asume que está en U,E,H,w if SetRes then SetROBResultExpres_dword(Opt); //Realmente, el resultado no es importante - _addwf (p1^.Loffs,toF); //p2 ya está en W + kADDWF (byte1L, toF); //p2 ya está en W _movf (H.offs,toW); - _btfsc (STATUS,_C); + _btfsc (_STATUS,_C); _incfsz (H.offs,toW); _addwf (p1^.Hoffs,toF); _movf (E.offs,toW); - _btfsc (STATUS,_C); + _btfsc (_STATUS,_C); _incfsz (E.offs,toW); _addwf (p1^.Eoffs,toF); _movf (U.offs,toW); - _btfsc (STATUS,_C); + _btfsc (_STATUS,_C); _incfsz (U.offs,toW); _addwf (p1^.Uoffs,toF); end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; end; //////////// Operaciones con Char @@ -4257,30 +2500,25 @@ procedure TGenCod.ROB_char_asig_char(Opt: TxpOperation; SetRes: boolean); case p2^.Sto of stConst : begin SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante - if p2^.valInt=0 then begin + if value2=0 then begin //caso especial - _BANKSEL(p1^.bank); //verifica banco destino - _CLRF(p1^.offs); + kCLRF(byte1); end else begin - _MOVLW(p2^.valInt); //Los chars se manejan como números - _BANKSEL(p1^.bank); //verifica banco destino - _MOVWF(p1^.offs); + kMOVLW(value2); //Los chars se manejan como números + kMOVWF(byte1); end; end; stVariab: begin SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante - _BANKSEL(p2^.bank); //verifica banco destino - _MOVF(p2^.offs, toW); - _BANKSEL(p1^.bank); //verifica banco destino - _MOVWF(p1^.offs); + kMOVF(byte2, toW); + kMOVWF(byte1); end; stExpres: begin //ya está en w SetROBResultExpres_char(Opt); //Realmente, el resultado no es importante - _BANKSEL(p1^.bank); //verifica banco destino - _MOVWF(p1^.offs); + kMOVWF(byte1); end; else - GenError('No soportado'); exit; + GenError(MSG_UNSUPPORTED); exit; end; end; procedure TGenCod.ROB_char_equal_char(Opt: TxpOperation; SetRes: boolean); @@ -4341,7 +2579,7 @@ procedure TGenCod.ROU_derefPointer(Opr: TxpOperator; SetRes: boolean); //Caso especial. Cuando se tenga algo como: TPunteroAByte($FF)^ //Se asume que devuelve una variable de tipo Byte. tmpVar := CreateTmpVar('', typByte); - tmpVar.addr0 := p1^.valInt; //Fija dirección de constante + tmpVar.addr0 := value1; //Fija dirección de constante SetROUResultVariab(tmpVar); end; stVariab: begin @@ -4363,47 +2601,47 @@ procedure TGenCod.codif_1mseg; begin PutFwdComm(';1 msec routine.'); if _CLOCK = 1000000 then begin - _MOVLW(62); //contador de iteraciones + kMOVLW(62); //contador de iteraciones _ADDLW(255); //lazo de 4 ciclos - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 1MHz.'); end else if _CLOCK = 2000000 then begin - _MOVLW(125); //contador de iteraciones + kMOVLW(125); //contador de iteraciones _ADDLW(255); //lazo de 4 ciclos - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 2MHz.'); end else if _CLOCK = 4000000 then begin //rtuina básica para 4MHz - _MOVLW(250); //contador de iteraciones + kMOVLW(250); //contador de iteraciones _ADDLW(255); //lazo de 4 ciclos - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-2); PutComm(';fin rutina 1 mseg a 4MHz.'); end else if _CLOCK = 8000000 then begin - _MOVLW(250); + kMOVLW(250); _ADDLW(255); //lazo de 8 ciclos _GOTO(_PC+1); //introduce 4 ciclos más de retardo _GOTO(_PC+1); - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-4); PutComm(';fin rutina 1 mseg a 8Mhz.'); end else if _CLOCK = 10000000 then begin - _MOVLW(250); + kMOVLW(250); _ADDLW(255); //lazo de 10 ciclos _GOTO(_PC+1); //introduce 6 ciclos más de retardo _GOTO(_PC+1); _GOTO(_PC+1); - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-5); PutComm(';fin rutina 1 mseg a 10MHz.'); end else if _CLOCK = 12000000 then begin - _MOVLW(250); + kMOVLW(250); _ADDLW(255); //lazo de 12 ciclos _GOTO(_PC+1); //introduce 8 ciclos más de retardo _GOTO(_PC+1); _GOTO(_PC+1); _GOTO(_PC+1); - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-6); PutComm(';fin rutina 1 mseg a 12MHz.'); end else if _CLOCK = 16000000 then begin - _MOVLW(250); + kMOVLW(250); _ADDLW(255); //lazo de 16 ciclos _GOTO(_PC+1); //introduce 12 ciclos más de retardo _GOTO(_PC+1); @@ -4411,10 +2649,10 @@ procedure TGenCod.codif_1mseg; _GOTO(_PC+1); _GOTO(_PC+1); _GOTO(_PC+1); - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-8); PutComm(';fin rutina 1 mseg a 12MHz.'); end else if _CLOCK = 20000000 then begin - _MOVLW(250); + kMOVLW(250); _ADDLW(255); //lazo de 20 ciclos _GOTO(_PC+1); //introduce 16 ciclos más de retardo _GOTO(_PC+1); @@ -4424,7 +2662,7 @@ procedure TGenCod.codif_1mseg; _GOTO(_PC+1); _GOTO(_PC+1); _GOTO(_PC+1); - _BTFSS(STATUS,_Z); + _BTFSS(_STATUS,_Z); _GOTO(_PC-10); PutComm(';fin rutina 1 mseg a 12MHz.'); end else begin GenError('Clock frequency %d not supported for delay_ms().', [_CLOCK]); @@ -4437,12 +2675,10 @@ procedure TGenCod.codif_delay_ms(fun: TxpEleFun); aux: TPicRegister; begin StartCodeSub(fun); //inicia codificación -// PutLabel('__delay_ms'); PutTopComm(' ;delay routine.'); - typWord.DefineRegister; //Se asegura de que se exista y lo marca como "usado". //aux := GetAuxRegisterByte; //Pide un registro libre + //if HayError then exit; aux := FSR; //Usa el FSR como registro auxiliar - if HayError then exit; {Esta rutina recibe los milisegundos en los registros en (H,w) o en (w) En cualquier caso, siempre usa el registros H , el acumulador "w" y un reg. auxiliar. Se supone que para pasar los parámetros, ya se requirió H, así que no es necesario @@ -4463,28 +2699,39 @@ procedure TGenCod.codif_delay_ms(fun: TxpEleFun); EndCodeSub; //termina codificación //aux.used := false; //libera registro end; -procedure TGenCod.fun_delay_ms(fun: TxpEleFun); +procedure TGenCod.codif_delay_ms2(fun: TxpEleFun); +//Code the routine for delay in miliseconds for word parameter. +var + aux: TPicRegister; + delay: Word; begin - if not CaptureTok('(') then exit; - GetExpressionE(0, pexPARSY); //captura parámetro - if HayError then exit; //aborta - //Se terminó de evaluar un parámetro - LoadToRT(res); //Carga en registro de trabajo - if HayError then exit; - if res.Typ = typByte then begin - //El parámetro byte, debe estar en W - _CALL(fun.adrr); - end else if res.Typ = typWord then begin - //El parámetro word, debe estar en (H, W) - _CALL(fun.adrr+1); + if f_delay_msB.linked THEN begin + {This is something weird, because we really don't generate code, but point the + function to an existing code.} + fun.adrr := f_delay_msB.adrr+1; //At the entry for word parameter end else begin - GenError('Invalid parameter type: %s', [res.Typ.name]); - exit; + //It's not used f_delay_ms(). We use a simplified version of the loop + StartCodeSub(fun); //inicia codificación + PutTopComm(' ;delay routine.'); + aux := FSR; //Usa el FSR como registro auxiliar + + + _MOVWF(aux.offs); + _INCF(H.offs,toF); + _INCF(aux.offs,toF); //corrección + delay:= _PC; + _DECFSZ(aux.offs, toF); + _GOTO(_PC+2); + _DECFSZ(H.offs, toF); + _GOTO(_PC+2); + _RETURN(); + codif_1mseg; //codifica retardo 1 mseg + if HayError then exit; + _GOTO(delay); + EndCodeSub; //termina codificación end; - //Verifica fin de parámetros - if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Exit(fun: TxpEleFun); +procedure TGenCod.fun_Exit(fun: TxpEleFunBase; out AddrUndef: boolean); {Se debe dejar en los registros de trabajo, el valor del parámetro indicado.} var curFunTyp: TxpEleType; @@ -4516,7 +2763,7 @@ procedure TGenCod.fun_Exit(fun: TxpEleFun); end else begin //Se espera el valor devuelto if not CaptureTok('(') then exit; - GetExpressionE(0, pexPARSY); //captura parámetro + res := GetExpression(0); //captura parámetro if HayError then exit; //aborta //Verifica fin de parámetros if not CaptureTok(')') then exit; @@ -4525,7 +2772,7 @@ procedure TGenCod.fun_Exit(fun: TxpEleFun); GenError('Expected a "%s" expression.', [curFunTyp.name]); exit; end; - LoadToRT(res, true); //Carga expresión en RT y genera RETURN o RETLW + LoadToRT(res, true); //Carga expresión en RT y genera i_RETURN o i_RETLW end; end else begin //Faltaría implementar en cuerpo de TxpEleUni @@ -4533,12 +2780,12 @@ procedure TGenCod.fun_Exit(fun: TxpEleFun); end; //Lleva el registro de las llamadas a exit() if FirstPass then begin - //CurrBank debe ser el banco con el que se llamó al RETURN. + //CurrBank debe ser el banco con el que se llamó al i_RETURN. parentNod.AddExitCall(posExit, parentNod.CurrBlockID, CurrBank); end; res.SetAsNull; //No es función end; -procedure TGenCod.fun_Inc(fun: TxpEleFun); +procedure TGenCod.fun_Inc(fun: TxpEleFunBase; out AddrUndef: boolean); begin if not CaptureTok('(') then exit; res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate @@ -4554,23 +2801,23 @@ procedure TGenCod.fun_Inc(fun: TxpEleFun); end else if res.Typ = typWord then begin _BANKSEL(res.bank); _INCF(res.Loffs, toF); - _BTFSC(STATUS, _Z); + _BTFSC(_STATUS, _Z); _INCF(res.Hoffs, toF); end else if res.Typ = typDWord then begin _BANKSEL(res.bank); _INCF(res.Loffs, toF); - _BTFSC(STATUS, _Z); + _BTFSC(_STATUS, _Z); _INCF(res.Hoffs, toF); - _BTFSC(STATUS, _Z); + _BTFSC(_STATUS, _Z); _INCF(res.Eoffs, toF); - _BTFSC(STATUS, _Z); + _BTFSC(_STATUS, _Z); _INCF(res.Uoffs, toF); end else if res.Typ.catType = tctPointer then begin //Es puntero corto _BANKSEL(res.bank); _INCF(res.offs, toF); end else begin - GenError('Invalid parameter type: %s', [res.Typ.name]); + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); exit; end; end; @@ -4597,7 +2844,7 @@ procedure TGenCod.fun_Inc(fun: TxpEleFun); // _BANKSEL(res.bank); // _INCF(res.offs, toF); // end else begin -// GenError('Invalid parameter type: %s', [res.Typ.name]); +// GenError(MSG_INVAL_PARTYP, [res.Typ.name]); // exit; // end; // end; @@ -4611,7 +2858,7 @@ procedure TGenCod.fun_Inc(fun: TxpEleFun); //Verifica fin de parámetros if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Dec(fun: TxpEleFun); +procedure TGenCod.fun_Dec(fun: TxpEleFunBase; out AddrUndef: boolean); begin if not CaptureTok('(') then exit; res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate @@ -4627,25 +2874,25 @@ procedure TGenCod.fun_Dec(fun: TxpEleFun); end else if res.Typ = typWord then begin _BANKSEL(res.bank); _MOVF(res.Loffs, toW); - _BTFSC(STATUS, _Z); + _BTFSC(_STATUS, _Z); _DECF(res.Hoffs, toF); _DECF(res.Loffs, toF); end else if res.Typ = typDWord then begin _BANKSEL(res.bank); - _MOVLW(1); + kMOVLW(1); _subwf(res.Loffs, toF); - _BTFSS(STATUS, _C); + _BTFSS(_STATUS, _C); _subwf(RES.Hoffs, toF); - _BTFSS(STATUS, _C); + _BTFSS(_STATUS, _C); _subwf(RES.Eoffs, toF); - _BTFSS(STATUS, _C); + _BTFSS(_STATUS, _C); _subwf(RES.Uoffs, toF); end else if res.Typ.catType = tctPointer then begin //Es puntero corto _BANKSEL(res.bank); _DECF(res.offs, toF); end else begin - GenError('Invalid parameter type: %s', [res.Typ.name]); + GenError(MSG_INVAL_PARTYP, [res.Typ.name]); exit; end; end; @@ -4659,7 +2906,7 @@ procedure TGenCod.fun_Dec(fun: TxpEleFun); //Verifica fin de parámetros if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Ord(fun: TxpEleFun); +procedure TGenCod.fun_Ord(fun: TxpEleFunBase; out AddrUndef: boolean); var tmpVar: TxpEleVar; begin @@ -4698,7 +2945,7 @@ procedure TGenCod.fun_Ord(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Chr(fun: TxpEleFun); +procedure TGenCod.fun_Chr(fun: TxpEleFunBase; out AddrUndef: boolean); var tmpVar: TxpEleVar; begin @@ -4737,7 +2984,7 @@ procedure TGenCod.fun_Chr(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Bit(fun: TxpEleFun); +procedure TGenCod.fun_Bit(fun: TxpEleFunBase; out AddrUndef: boolean); {Convierte byte, o boolean a bit} var tmpVar: TxpEleVar; @@ -4782,7 +3029,8 @@ procedure TGenCod.fun_Bit(fun: TxpEleFun); if res.Typ = typByte then begin SetResultExpres(typBit); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ res.Inverted := true; - _ADDLW(0); //el resultado aparecerá en Z, invertido + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW end else begin GenError('Cannot convert to bit.'); exit; end; @@ -4792,7 +3040,7 @@ procedure TGenCod.fun_Bit(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Bool(fun: TxpEleFun); +procedure TGenCod.fun_Bool(fun: TxpEleFunBase; out AddrUndef: boolean); {Convierte byte, o bit a boolean} var tmpVar: TxpEleVar; @@ -4837,7 +3085,8 @@ procedure TGenCod.fun_Bool(fun: TxpEleFun); if res.Typ = typByte then begin SetResultExpres(typBool); //No se usa SetROUResultExpres_bit, porque no se tiene el operando en p1^ res.Inverted := true; - _ADDLW(0); //el resultado aparecerá en Z, invertido + _IORLW(0); //El resultado aparecerá en Z, invertido + //Se usa _IORLW en lugar de _ADDLW para poder usar esta rutina en modelos que no cuenten con _ADDLW end else begin GenError('Cannot convert to boolean.'); exit; end; @@ -4847,7 +3096,7 @@ procedure TGenCod.fun_Bool(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Byte(fun: TxpEleFun); +procedure TGenCod.fun_Byte(fun: TxpEleFunBase; out AddrUndef: boolean); var tmpVar: TxpEleVar; begin @@ -4878,7 +3127,7 @@ procedure TGenCod.fun_Byte(fun: TxpEleFun); SetResultExpres(typByte); _CLRW; _BTFSC(res.Boffs, res.bit); - _MOVLW(1); //devuelve 1 + kMOVLW(1); //devuelve 1 //Es lo mismo end else if res.Typ = typChar then begin //Crea varaible que apunte al byte bajo @@ -4915,9 +3164,9 @@ procedure TGenCod.fun_Byte(fun: TxpEleFun); //Ya está en W el byet bajo res.SetAsExpres(typByte); //Cambia el tipo end else if (res.Typ = typBool) or (res.Typ = typBit) then begin - _MOVLW(0); //Z -> W - _BTFSC(STATUS, _Z); - _MOVLW(1); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); res.SetAsExpres(typByte); //Cambia el tipo end else begin GenError('Cannot convert to byte.'); exit; @@ -4928,7 +3177,7 @@ procedure TGenCod.fun_Byte(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_Word(fun: TxpEleFun); +procedure TGenCod.fun_Word(fun: TxpEleFunBase; out AddrUndef: boolean); var tmpVar: TxpEleVar; begin @@ -4974,9 +3223,9 @@ procedure TGenCod.fun_Word(fun: TxpEleFun); end else if (res.Typ = typBool) or (res.Typ = typBit) then begin SetResultExpres(typWord); //Devolvemo expresión _CLRF(H.offs); - _MOVLW(0); - _BTFSC(STATUS, _Z); - _MOVLW(1); + kMOVLW(0); + _BTFSC(_STATUS, _Z); + kMOVLW(1); end else begin GenError('Cannot convert this variable to word.'); exit; end; @@ -4999,9 +3248,9 @@ procedure TGenCod.fun_Word(fun: TxpEleFun); end else if (res.Typ = typBool) or (res.Typ = typBit) then begin res.SetAsExpres(typWord); _CLRF(H.offs); - _MOVLW(0); //Z -> W - _BTFSC(STATUS, _Z); - _MOVLW(1); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); end else begin GenError('Cannot convert expression to word.'); exit; end; @@ -5011,7 +3260,7 @@ procedure TGenCod.fun_Word(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_DWord(fun: TxpEleFun); +procedure TGenCod.fun_DWord(fun: TxpEleFunBase; out AddrUndef: boolean); begin if not CaptureTok('(') then exit; res := GetExpression(0); //Captura parámetro. No usa GetExpressionE, para no cambiar RTstate @@ -5061,9 +3310,9 @@ procedure TGenCod.fun_DWord(fun: TxpEleFun); _CLRF(U.offs); _CLRF(E.offs); _CLRF(H.offs); - _MOVLW(0); //Z -> W - _BTFSC(STATUS, _Z); - _MOVLW(1); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); end else begin GenError('Cannot convert this variable to Dword.'); exit; end; @@ -5094,9 +3343,9 @@ procedure TGenCod.fun_DWord(fun: TxpEleFun); _CLRF(U.offs); _CLRF(E.offs); _CLRF(H.offs); - _MOVLW(0); //Z -> W - _BTFSC(STATUS, _Z); - _MOVLW(1); + kMOVLW(0); //Z -> W + _BTFSC(_STATUS, _Z); + kMOVLW(1); end else begin GenError('Cannot convert expression to Dword.'); exit; end; @@ -5106,10 +3355,10 @@ procedure TGenCod.fun_DWord(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_SetAsInput(fun: TxpEleFun); +procedure TGenCod.fun_SetAsInput(fun: TxpEleFunBase; out AddrUndef: boolean); begin if not CaptureTok('(') then exit; - GetExpressionE(0, pexPARSY); //captura parámetro + res := GetExpression(0); //captura parámetro if HayError then exit; //aborta case res.Sto of //el parámetro debe estar en "res" stConst : begin @@ -5118,7 +3367,7 @@ procedure TGenCod.fun_SetAsInput(fun: TxpEleFun); stVariab: begin if res.Typ = typByte then begin //Se asume que será algo como PORTA, PORTB, ... - _MOVLW($FF); //todos como entradas + kMOVLW($FF); //todos como entradas _BANKSEL(1); //los registros TRIS, están en el banco 1 _MOVWF(res.offs); //escribe en TRIS end else if res.Typ = typBit then begin @@ -5138,10 +3387,10 @@ procedure TGenCod.fun_SetAsInput(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_SetAsOutput(fun: TxpEleFun); +procedure TGenCod.fun_SetAsOutput(fun: TxpEleFunBase; out AddrUndef: boolean); begin if not CaptureTok('(') then exit; - GetExpressionE(0, pexPARSY); //captura parámetro + res := GetExpression(0); //captura parámetro if HayError then exit; //aborta case res.Sto of //el parámetro debe estar en "res" stConst : begin @@ -5169,11 +3418,11 @@ procedure TGenCod.fun_SetAsOutput(fun: TxpEleFun); end; if not CaptureTok(')') then exit; end; -procedure TGenCod.fun_SetBank(fun: TxpEleFun); +procedure TGenCod.fun_SetBank(fun: TxpEleFunBase; out AddrUndef: boolean); {Define el banco actual} begin if not CaptureTok('(') then exit; - GetExpressionE(0, pexPARSY); //captura parámetro + res := GetExpression(0); //captura parámetro if HayError then exit; //aborta case res.Sto of //el parámetro debe estar en "res" stConst : begin @@ -5231,7 +3480,7 @@ procedure TGenCod.StartSyntax; //tipos predefinidos xLex.AddIdentSpecList('bit boolean byte word char dword', tnType); //funciones del sistema - xLex.AddIdentSpecList('exit delay_ms Inc Dec Ord Chr', tnSysFunct); + xLex.AddIdentSpecList('exit Inc Dec Ord Chr', tnSysFunct); xLex.AddIdentSpecList('SetAsInput SetAsOutput SetBank', tnSysFunct); //símbolos especiales xLex.AddSymbSpec('+', tnOperator); @@ -5285,6 +3534,83 @@ procedure TGenCod.DefCompiler; OnExprStart := @expr_start; OnExprEnd := @expr_End; + ///////////Crea tipos + ClearSystemTypes; + ///////////////// Tipo Bit //////////////// + typBit := CreateSysType('bit', t_uinteger,-1); //de 1 bit + typBit.OnLoadToRT := @bit_LoadToRT; + typBit.OnDefRegister:= @bit_DefineRegisters; + typBit.OnSaveToStk := @bit_SaveToStk; +// opr:=typBit.CreateUnaryPreOperator('@', 6, 'addr', @Oper_addr_bit); + + ///////////////// Tipo Booleano //////////////// + typBool := CreateSysType('boolean',t_boolean,-1); //de 1 bit + typBool.OnLoadToRT := @bit_LoadToRT; //es lo mismo + typBool.OnDefRegister:= @bit_DefineRegisters; //es lo mismo + typBool.OnSaveToStk := @bit_SaveToStk; //es lo mismo + + //////////////// Tipo Byte ///////////// + typByte := CreateSysType('byte',t_uinteger,1); //de 1 byte + typByte.OnLoadToRT := @byte_LoadToRT; + typByte.OnDefRegister:= @byte_DefineRegisters; + typByte.OnSaveToStk := @byte_SaveToStk; + //typByte.OnReadFromStk := + //Campos de bit + typByte.CreateField('bit0', @byte_bit0, @byte_bit0); + typByte.CreateField('bit1', @byte_bit1, @byte_bit1); + typByte.CreateField('bit2', @byte_bit2, @byte_bit2); + typByte.CreateField('bit3', @byte_bit3, @byte_bit3); + typByte.CreateField('bit4', @byte_bit4, @byte_bit4); + typByte.CreateField('bit5', @byte_bit5, @byte_bit5); + typByte.CreateField('bit6', @byte_bit6, @byte_bit6); + typByte.CreateField('bit7', @byte_bit7, @byte_bit7); + //Campos de bit (se mantienen por compatibilidad) + typByte.CreateField('0', @byte_bit0, @byte_bit0); + typByte.CreateField('1', @byte_bit1, @byte_bit1); + typByte.CreateField('2', @byte_bit2, @byte_bit2); + typByte.CreateField('3', @byte_bit3, @byte_bit3); + typByte.CreateField('4', @byte_bit4, @byte_bit4); + typByte.CreateField('5', @byte_bit5, @byte_bit5); + typByte.CreateField('6', @byte_bit6, @byte_bit6); + typByte.CreateField('7', @byte_bit7, @byte_bit7); + + //////////////// Tipo Char ///////////// + //Tipo caracter + typChar := CreateSysType('char',t_uinteger,1); //de 1 byte. Se crea como uinteger para leer/escribir su valor como número + typChar.OnLoadToRT := @byte_LoadToRT; //Es lo mismo + typChar.OnDefRegister:= @byte_DefineRegisters; //Es lo mismo + typChar.OnSaveToStk := @byte_SaveToStk; //Es lo mismo + + //////////////// Tipo Word ///////////// + //Tipo numérico de dos bytes + typWord := CreateSysType('word',t_uinteger,2); //de 2 bytes + typWord.OnLoadToRT := @word_LoadToRT; + typWord.OnDefRegister:= @word_DefineRegisters; + typWord.OnSaveToStk := @word_SaveToStk; + + typWord.CreateField('Low' , @word_Low , @word_Low ); + typWord.CreateField('High', @word_High, @word_High); + + //////////////// String type ///////////// + {Se crea el tipo String, solo para permitir inicializar arreglos de + caracteres. Por ahora no se implementan otras funcionalidades.} + typString := CreateSysType('string', t_string, 0); //tamaño variable + { TODO : String debería definirse mejor como un tipo común, no del sistema } + + //////////////// Tipo DWord ///////////// + //Tipo numérico de cuatro bytes + typDWord := CreateSysType('dword',t_uinteger,4); //de 4 bytes + typDWord.OnLoadToRT := @dword_LoadToRT; + typDWord.OnDefRegister:= @dword_DefineRegisters; + typDWord.OnSaveToStk := @dword_SaveToStk; + + typDWord.CreateField('Low' , @dword_Low , @dword_Low ); + typDWord.CreateField('High' , @dword_High , @dword_High ); + typDWord.CreateField('Extra' , @dword_Extra , @dword_Extra ); + typDWord.CreateField('Ultra' , @dword_Ultra , @dword_Ultra ); + typDWord.CreateField('LowWord' , @dword_LowWord , @dword_LowWord ); + typDWord.CreateField('HighWord', @dword_HighWord, @dword_HighWord); + {Los operadores deben crearse con su precedencia correcta Precedencia de operadores en Pascal: 6) ~, not, signo "-" (mayor precedencia) @@ -5361,6 +3687,8 @@ procedure TGenCod.DefCompiler; opr.CreateOperation(typByte,@ROB_byte_sub_byte); opr:=typByte.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word opr.CreateOperation(typByte,@ROB_byte_mul_byte); + opr.CreateOperation(typWord,@ROB_byte_mul_word); + opr:=typByte.CreateBinaryOperator('DIV',5,'div'); //byte / byte ->byte opr.CreateOperation(typByte,@ROB_byte_div_byte); opr:=typByte.CreateBinaryOperator('MOD',5,'mod'); //byte mod byte ->byte @@ -5377,7 +3705,7 @@ procedure TGenCod.DefCompiler; opr.CreateOperation(typBit,@ROB_byte_xor_bit); opr:=typByte.CreateUnaryPreOperator('NOT', 6, 'not', @ROU_not_byte); - opr:=typByte.CreateUnaryPreOperator('@', 6, 'addr', @ROU_addr_byte); + opr:=typByte.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); opr:=typByte.CreateBinaryOperator('=',3,'equal'); opr.CreateOperation(typByte,@ROB_byte_equal_byte); @@ -5431,13 +3759,17 @@ procedure TGenCod.DefCompiler; opr:=typWord.CreateBinaryOperator('-',4,'subs'); //suma opr.CreateOperation(typWord,@ROB_word_sub_word); + opr:=typWord.CreateBinaryOperator('*',5,'mult'); //byte*byte -> word + opr.CreateOperation(typByte,@ROB_word_mul_byte); + opr.CreateOperation(typWord,@ROB_word_mul_word); + opr:=typWord.CreateBinaryOperator('AND', 5, 'and'); //AND opr.CreateOperation(typByte, @ROB_word_and_byte); opr:=typWord.CreateBinaryOperator('UMULWORD',5,'umulword'); //suma opr.CreateOperation(typWord,@ROB_word_umulword_word); - opr:=typWord.CreateUnaryPreOperator('@', 6, 'addr', @ROU_addr_word); + opr:=typWord.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); ////////////////////////////////////////// //////// Operaciones con DWord //////////// @@ -5459,6 +3791,11 @@ procedure TGenCod.DefCompiler; opr.CreateOperation(typDWord,@ROB_dword_add_dword); // opr.CreateOperation(typByte,@ROB_word_add_byte); + //////// Operaciones con String //////////// + opr:=typString.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); + opr:=typString.CreateBinaryOperator('+',4,'add'); //add + opr.CreateOperation(typString,@ROB_string_add_string); + opr.CreateOperation(typChar,@ROB_string_add_char); end; procedure TGenCod.DefPointerArithmetic(etyp: TxpEleType); {Configura ls operaciones que definen la aritmética de punteros.} @@ -5479,27 +3816,115 @@ procedure TGenCod.DefPointerArithmetic(etyp: TxpEleType); opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta opr.CreateOperation(typByte, @ROB_pointer_sub_byte); end; +procedure TGenCod.DefinePointer(etyp: TxpEleType); +{Set operations that defines pointers aritmethic.} +var + opr: TxpOperator; +begin + //Asignación desde Byte y Puntero +// opr:=etyp.CreateBinaryOperator(':=',2,'asig'); +// opr.CreateOperation(typWord, @ROB_word_asig_word); +// opr.CreateOperation(etyp , @ROB_word_asig_word); +// //Agrega a los word, la posibilidad de ser asignados por punteros +// typWord.operAsign.CreateOperation(etyp, @ROB_word_asig_word); +// +// opr:=etyp.CreateBinaryOperator('=',3,'equal'); //asignación +// opr.CreateOperation(typWord, @ROB_word_equal_word); +// opr:=etyp.CreateBinaryOperator('+',4,'add'); //suma +// opr.CreateOperation(typWord, @ROB_pointer_add_word); +// opr:=etyp.CreateBinaryOperator('-',4,'add'); //resta +// opr.CreateOperation(typWord, @ROB_pointer_sub_word); +// +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +// etyp.CreateUnaryPostOperator('^',6, 'deref', @ROU_derefPointer); //dereferencia +end; +procedure TGenCod.DefineArray(etyp: TxpEleType); +begin +// etyp.CreateField('length', @arrayLength, nil); +// etyp.CreateField('high' , @arrayHigh, nil); +// etyp.CreateField('low' , @arrayLow, nil); +// etyp.CreateField('item' , @GenCodArrayGetItem, @GenCodArraySetItem); +// etyp.CreateField('clear' , @GenCodArrayClear, nil); +// etyp.CreateUnaryPreOperator('@', 6, 'addr', @ROU_address); //defined in all types +end; +procedure TGenCod.ValidRAMaddr(addr: integer); +{Validate a physical RAM address. If error generate error.} +begin + if (addr<0) or (addr>$ffff) then begin + //Debe set Word + GenError(ER_INV_MEMADDR); + exit; + end; + if not pic.ValidRAMaddr(addr) then begin + GenError(ER_INV_MAD_DEV); + exit; + end; +end; procedure TGenCod.CreateSystemElements; {Inicia los elementos del sistema. Se ejecuta cada vez que se compila.} + procedure AddParam(var pars: TxpParFuncArray; parName: string; const srcPos: TSrcPos; + typ0: TxpEleType; adicDec: TxpAdicDeclar); + //Create a new parameter to the function. + var + n: Integer; + begin + //Add record to the array + n := high(pars)+1; + setlength(pars, n+1); + pars[n].name := parName; //Name is not important + pars[n].srcPos := srcPos; + pars[n].typ := typ0; //Agrega referencia + pars[n].adicVar.hasAdic := adicDec; + pars[n].adicVar.hasInit := false; + end; + function CreateSystemFunction(name: string; retType: TxpEleType; const srcPos: TSrcPos; + const pars: TxpParFuncArray; + compile: TProcExecFunction): TxpEleFun; + {Create a new system function in the current element of the Syntax Tree. + Returns the reference to the function created.} + var + fundec: TxpEleFunDec; + bod: TxpEleBody; + begin + //Add declaration + curLocation := locInterface; + fundec := AddFunctionDEC(name, retType, srcPos, pars, false); + //Implementation + {Note that implementation is added always after declarartion. It's not the usual + in common units, where all declarations are first} + curLocation := locImplement; + Result := AddFunctionIMP(name, retType, srcPos, fundec); + //Here varaibles can be added + {Create a body, to be uniform with normal function and for have a space where + compile code and access to posible variables or other elements.} + bod := CreateBody; + bod.srcDec := srcPos; + TreeElems.AddElement(bod); //Add Body (not need to open) + Result.compile := compile; //Set routine to geenrate code + TreeElems.CloseElement; //Close function implementation + end; var f: TxpEleFun; //índice para funciones + uni: TxpEleUnit; + pars: TxpParFuncArray; //Array of parameters + srcPos: TSrcPos; begin //////// Funciones del sistema //////////// {Notar que las funciones del sistema no crean espacios de nombres.} - f := CreateSysFunction('delay_ms', nil, @fun_delay_ms); - f.adrr:=$0; - f.compile := @codif_delay_ms; //rutina de compilación +// f := CreateSysFunction('delay_ms', nil, @fun_delay_ms); +// f.adrr:=$0; +// f.compile := @codif_delay_ms; //rutina de compilación //Funciones INLINE f := CreateSysFunction('exit' , nil, @fun_Exit); f := CreateSysFunction('Inc' , nil, @fun_Inc); f := CreateSysFunction('Dec' , nil, @fun_Dec); - f := CreateSysFunction('Ord' , @callParam, @fun_Ord); - f := CreateSysFunction('Chr' , @callParam, @fun_Chr); - f := CreateSysFunction('Bit' , @callParam, @fun_Bit); - f := CreateSysFunction('Boolean' , @callParam, @fun_Bool); - f := CreateSysFunction('Byte' , @callParam, @fun_Byte); - f := CreateSysFunction('Word' , @callParam, @fun_Word); - f := CreateSysFunction('DWord' , @callParam, @fun_DWord); + f := CreateSysFunction('Ord' , @FunctParam, @fun_Ord); + f := CreateSysFunction('Chr' , @FunctParam, @fun_Chr); + f := CreateSysFunction('Bit' , @FunctParam, @fun_Bit); + f := CreateSysFunction('Boolean' , @FunctParam, @fun_Bool); + f := CreateSysFunction('Byte' , @FunctParam, @fun_Byte); + f := CreateSysFunction('Word' , @FunctParam, @fun_Word); + f := CreateSysFunction('DWord' , @FunctParam, @fun_DWord); f := CreateSysFunction('SetAsInput' ,nil, @fun_SetAsInput); f := CreateSysFunction('SetAsOutput',nil, @fun_SetAsOutput); f := CreateSysFunction('SetBank' , nil, @fun_SetBank); @@ -5516,25 +3941,69 @@ procedure TGenCod.CreateSystemElements; f_word_mul_word_16 := CreateSysFunction('word_mul_word_16', nil, nil); f_word_mul_word_16.adrr:=$0; f_word_mul_word_16.compile := @word_mul_word_16; -end; -procedure SetLanguage(lang: string); -begin - case lang of - 'en': begin - dicClear; //it's yet in English - end; - 'es': begin - //Update messages - dicSet('Not implemented.', 'No implementado.'); - dicSet('Invalid value for a bit variable.', 'Valor inválido para una variable bit'); - dicSet('")" expected.', 'Se esperaba ")"'); - dicSet('Invalid parameter type: %s','Tipo de parámetro inválido: %s'); - end; - // ER_NOT_IMPLEM_ := trans('Cannot increase a constant.', 'No se puede incrementar una constante.','',''); - // ER_NOT_IMPLEM_ := trans('Cannot increase an expression.','No se puede incrementar una expresión.','',''); - // ER_NOT_IMPLEM_ := trans('Cannot decrease a constant.', 'No se puede disminuir una constante.','',''); - // ER_NOT_IMPLEM_ := trans('Cannot decrease an expression.','No se puede disminuir una expresión.','',''); - end; + //Inicializa eventos y funciones del compilador + callDefinePointer:= @DefinePointer; + callDefineArray := @DefineArray; + callValidRAMaddr := @ValidRAMaddr; + callStartProgram := @Cod_StartProgram; + callEndProgram := @Cod_EndProgram; + //Create "System" Unit. Must be done once in First Pass + {Originally system functions were created in a special list and has a special treatment + but it implied a lot of work for manage the memory, linking, use of variables, and + optimization. Now we create a "system unit" like a real unit (more less) and we create + the system fucntion here, so we use the same code for linking, calling and optimization + that we use in common fucntions. Moreover, we can create private functions.} + uni := CreateUnit('-'); + TreeElems.AddElementAndOpen(uni); //Open Unit + //Create a fictional position + srcPos.fil := ''; + srcPos.row := 1; + srcPos.col := 1; + {Create variables for aditional Working register. Note that this variables are + accesible (and usable) from the code, because the name assigned is a common variable.} + //Create register H as variable + H := AddVariable('__H', typByte, srcPos); + H.adicPar.hasAdic := decNone; + H.adicPar.hasInit := false; + H.location := locInterface; //make visible + //Create register E as variable + E := AddVariable('__E', typByte, srcPos); + E.adicPar.hasAdic := decNone; + E.adicPar.hasInit := false; + E.location := locInterface; //make visible + //Create register U as variable + U := AddVariable('__U', typByte, srcPos); + U.adicPar.hasAdic := decNone; + U.adicPar.hasInit := false; + U.location := locInterface; //make visible + + //Create system function "delay_ms" with byte parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typByte, decRegis); //Add parameter + f_delay_msB := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms); + AddCallerTo(H, f.BodyNode); {Adds this dependency because, like this is a system function, + won`t be compiled in the First pass, that is when references are created. + As we need to use W. We declare a call.} + //Create system function "delay_ms" with word parameter + setlength(pars, 0); //Reset parameters + AddParam(pars, 'ms', srcPos, typWord, decRegis); //Add parameter + f_delay_msW := CreateSystemFunction('delay_ms', typNull, srcPos, pars, @codif_delay_ms2); + AddCallerTo(H, f.BodyNode); //Adds this dependency. +// +// //Multiply system function +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'A', srcPos, typByte, decNone); //Add parameter +// AddParam(pars, 'B', srcPos, typByte, decNone); //Add parameter +// f_byte_mul_byte_16 := CreateSystemFunction('byte_mul_byte_16', typWord, srcPos, pars, @byte_mul_byte_16); +// AddCallerTo(H, f_byte_mul_byte_16.BodyNode); //We'll need to return result. +// +// //Word shift left +// setlength(pars, 0); //Reset parameters +// AddParam(pars, 'n', srcPos, typByte, decRegisX); //Parameter counter shift +// f_word_shift_l := CreateSystemFunction('word_shift_l', typWord, srcPos, pars, @word_shift_l); +// AddCallerTo(H, f_word_shift_l.BodyNode); //We'll need to return result. +// + TreeElems.CloseElement; //Close Unit end; end. diff --git a/Source/Globales.pas b/Source/Globales.pas index c8f2a25c..cbce1ebe 100644 --- a/Source/Globales.pas +++ b/Source/Globales.pas @@ -15,12 +15,16 @@ interface //Variables globales MsjError : String; //Bandera - Mensaje de error //Rutas sin "/" final - rutApp : string; //ruta de la aplicación - rutSamples : string; //ruta de la carpeta de scripts - rutUnits : string; //ruta para guardar las sintaxis - rutTemp : string; //ruta para los archivos temporales - rutSyntax : string; //ruta de los archivos de sintaxis - rutThemes : string; //ruta de los archivos de temas + patApp : string; //ruta de la aplicación + patSamples : string; //ruta de la carpeta de scripts + patUnits : string; //ruta para guardar las sintaxis + patTemp : string; //ruta para los archivos temporales + patSyntax : string; //ruta de los archivos de sintaxis + patThemes : string; //ruta de los archivos de temas + patDevices10 : string; //ruta para guardar unidades + patDevices16 : string; //ruta para guardar unidades + patDevices17 : string; //ruta para guardar unidades + patDevices18 : string; //ruta para guardar unidades archivoEnt : string; //archivo de entrada MostrarError: Boolean; //Bandera para mostrar mensajesde error. @@ -39,7 +43,7 @@ // TTranslation = record //const // TestRec: TTranslation = (en: 'Something'; es: 'algo'; ); -function Trans(const strEn, strEs, strQu, strDe, strUk, strRu: string): string; +function Trans(const strEn, strEs, strQu, strDe, strUk, strRu, strFr: string): string; ////////////////////////////////////////////////////// function LeerParametros: boolean; function NombDifArc(nomBase: String): String; @@ -49,7 +53,7 @@ implementation WA_DIR_NOEXIST = 'Directory: %s no found. It will be created'; ER_CANN_READDI = 'Cannot read or create directories.'; -function Trans(const strEn, strEs, strQu, strDe, strUk, strRu: string): string; +function Trans(const strEn, strEs, strQu, strDe, strUk, strRu, strFr: string): string; function ClearLangId(str: string): string; {Limpia la cadena del caracter identificador de lenguaje, de la forma: #en= @@ -83,13 +87,17 @@ function Trans(const strEn, strEs, strQu, strDe, strUk, strRu: string): string; end; //por defecto 'uk': begin Result := ClearLangId(strUk); - if Result = '' then Result := ClearLangId(strEn); - end; //por defecto + if Result = '' then Result := ClearLangId(strEn); //por defecto + end; 'ru': begin Result := ClearLangId(strRu); - if Result = '' then Result := ClearLangId(strEn); - end; //por defecto - else + if Result = '' then Result := ClearLangId(strEn); //por defecto + end; + 'fr': begin + Result := ClearLangId(strFr); + if Result = '' then Result := ClearLangId(strEn); //por defecto + end; + else //Por defecto Inglés Result := ClearLangId(strEn); end; end; @@ -168,34 +176,54 @@ function NombDifArc(nomBase: String): String; initialization //inicia directorios de la aplicación - rutApp := ExtractFilePath(Application.ExeName); //incluye el '\' final - rutSamples := rutApp + 'samples'; - rutUnits := rutApp + 'units'; - rutTemp := rutApp + 'temp'; - rutSyntax := rutApp + 'syntax'; - rutThemes := rutApp + 'themes'; - archivoEnt := ''; //archivo de entrada + patApp := ExtractFilePath(Application.ExeName); //incluye el '\' final + patSamples := patApp + 'samples'; + patUnits := patApp + 'units'; + patTemp := patApp + 'temp'; + patSyntax := patApp + 'syntax'; + patThemes := patApp + 'themes'; + patDevices10 := patApp + 'devices10'; + patDevices16 := patApp + 'devices16'; + patDevices17 := patApp + 'devices17'; + patDevices18 := patApp + 'devices18'; + archivoEnt := ''; //archivo de entrada //verifica existencia de carpetas de trabajo try - if not DirectoryExists(rutSamples) then begin - msgexc(WA_DIR_NOEXIST, [rutSamples]); - CreateDir(rutSamples); + if not DirectoryExists(patSamples) then begin + msgexc(WA_DIR_NOEXIST, [patSamples]); + CreateDir(patSamples); end; - if not DirectoryExists(rutUnits) then begin - msgexc(WA_DIR_NOEXIST, [rutUnits]); - CreateDir(rutUnits); - end; - if not DirectoryExists(rutTemp) then begin - msgexc(WA_DIR_NOEXIST, [rutTemp]); - CreateDir(rutTemp); + if not DirectoryExists(patUnits) then begin + msgexc(WA_DIR_NOEXIST, [patUnits]); + CreateDir(patUnits); + end; + if not DirectoryExists(patDevices10) then begin + msgexc(WA_DIR_NOEXIST, [patDevices10]); + CreateDir(patDevices10); + end; + if not DirectoryExists(patDevices16) then begin + msgexc(WA_DIR_NOEXIST, [patDevices16]); + CreateDir(patDevices16); + end; + if not DirectoryExists(patDevices17) then begin + msgexc(WA_DIR_NOEXIST, [patDevices17]); + CreateDir(patDevices17); + end; + if not DirectoryExists(patDevices18) then begin + msgexc(WA_DIR_NOEXIST, [patDevices18]); + CreateDir(patDevices18); + end; + if not DirectoryExists(patTemp) then begin + msgexc(WA_DIR_NOEXIST, [patTemp]); + CreateDir(patTemp); end; - if not DirectoryExists(rutSyntax) then begin - msgexc(WA_DIR_NOEXIST, [rutSyntax]); - CreateDir(rutSyntax); + if not DirectoryExists(patSyntax) then begin + msgexc(WA_DIR_NOEXIST, [patSyntax]); + CreateDir(patSyntax); end; - if not DirectoryExists(rutThemes) then begin - msgexc(WA_DIR_NOEXIST, [rutThemes]); - CreateDir(rutThemes); + if not DirectoryExists(patThemes) then begin + msgexc(WA_DIR_NOEXIST, [patThemes]); + CreateDir(patThemes); end; except @@ -205,10 +233,14 @@ initialization finalization //Por algún motivo, la unidad HeapTrc indica que hay gotera de memoria si no se liberan //estas cadenas: - rutApp := ''; - rutSamples := ''; - rutUnits := ''; - rutTemp := ''; - rutSyntax := ''; + patApp := ''; + patSamples := ''; + patUnits := ''; + patDevices10 := ''; + patDevices16 := ''; + patDevices17 := ''; + patDevices18 := ''; + patTemp := ''; + patSyntax := ''; end. diff --git a/Source/Parser.pas b/Source/Parser.pas index 3dddc5dd..c99e0a84 100644 --- a/Source/Parser.pas +++ b/Source/Parser.pas @@ -1,371 +1,578 @@ -{Unidad con rutinas del analizador sintáctico. +{Parser + +Esta sería la versión de XpresParser (definida en el framework t-Xpres), orientada +a trabajar con microcontroladores PIC. +La idea es tener aquí todas las rutinas que en lo posible sean independientes del +lenguaje y del modelo de PIC. +Para mayor información sobre el uso del framework Xpres, consultar la documentación +técnica. } +//{$Define LogExpres} unit Parser; -{$mode objfpc}{$H+} interface uses - Classes, SysUtils, lclProc, SynEditHighlighter, types, MisUtils, XpresBas, - XpresTypesPIC, XpresElementsPIC, XpresParserPIC, Pic16Utils, Pic16Devices, - Globales, GenCodPic, GenCod, ParserDirec, FormConfig {Por diseño, parecería que GenCodPic, no debería accederse desde aquí}; + Classes, SysUtils, Forms, LCLType, lclProc, SynFacilHighlighter, SynEditHighlighter, + XpresBas, XpresTypesPIC, XpresElementsPIC, MisUtils, FormConfig, PicCore; +const + TIT_BODY_ELE = 'Body'; type - { TCompiler } - TCompiler = class(TParserDirec) - private //Funciones básicas - function AddType(typName: string; srcPos: TSrcPos): TxpEleType; - function AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos - ): TxpEleVar; - procedure ArrayDeclaration(out itemTyp: TxpEleType; out nEle: integer); - procedure array_high(const OpPtr: pointer); - procedure array_low(const OpPtr: pointer); - procedure CompileTypeDeclar(IsInterface: boolean; typName: string = ''); - function GetAdicVarDeclar(out IsBit: boolean): TAdicVarDec; - procedure cInNewLine(lin: string); - procedure Cod_JumpIfTrue; - function CompileStructBody(GenCode: boolean): boolean; - function CompileConditionalBody(out FinalBank: byte): boolean; - function CompileNoConditionBody(GenCode: boolean): boolean; - procedure CompileFOR; - procedure CompileLastEnd; - procedure CompileProcHeader(out fun: TxpEleFun; ValidateDup: boolean = true); - function GetExpressionBool: boolean; - function getParamType: TxpEleType; - function GetTypeVarDeclar: TxpEleType; - function IsUnit: boolean; - procedure array_length(const OpPtr: pointer); - procedure ProcCommentsNoExec; - function StartOfSection: boolean; - procedure ResetFlashAndRAM; - procedure getListOfIdent(var itemList: TStringDynArray; out - srcPosArray: TSrcPosArray); - procedure CaptureDecParams(fun: TxpEleFun); - procedure CompileIF; - procedure CompileREPEAT; - procedure CompileWHILE; - procedure Tree_AddElement(elem: TxpElement); - function VerifyEND: boolean; - protected //Métodos OVERRIDE - procedure ProcComments; override; - procedure TipDefecNumber(var Op: TOperand; toknum: string); override; - procedure TipDefecString(var Op: TOperand; tokcad: string); override; - procedure TipDefecBoolean(var Op: TOperand; tokcad: string); override; - private //Rutinas para la compilación y enlace - procedure CompileProcBody(fun: TxpEleFun); - private //Compilación de secciones - procedure CompileGlobalConstDeclar; - procedure CompileVarDeclar(IsInterface: boolean = false); - procedure CompileProcDeclar(IsImplementation: boolean); - procedure CompileInstruction; - procedure CompileInstructionDummy; - function OpenContextFrom(filePath: string): boolean; - procedure CompileCurBlock; - procedure CompileCurBlockDummy; - procedure CompileUnit(uni: TxpElement); - procedure CompileUsesDeclaration; - procedure CompileProgram; - procedure CompileLinkProgram; - public - OnAfterCompile: procedure of object; //Al finalizar la compilación. - {Indica que TCompiler, va a acceder a un archivo, peor está pregunatndo para ver - si se tiene un Stringlist, con los datos ya caragdos del archivo, para evitar - tener que abrir nuevamente al archivo.} - OnRequireFileString: procedure(FilePath: string; var strList: TStrings) of object; - function hexFilePath: string; - function mainFilePath: string; - procedure Compile(NombArc: string; Link: boolean = true); - procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); //uso de memoria RAM - procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); //uso de la memoria Flash - function RAMusedStr: string; - function FLASHusedStr: string; - procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); - procedure GenerateListReport(lins: TStrings); - public //Inicialización - constructor Create; override; - destructor Destroy; override; - end; +//Tipo de expresión, de acuerdo a la posición en que aparece +TPosExpres = (pexINDEP, //Expresión independiente + pexASIG, //Expresión de asignación + pexPROC, //Expresión de procedimiento + pexSTRUC, //Expresión de estructura + pexPARAM, //Expresión de parámetro de función + pexPARSY //Expresión de parámetro de función de sistema + ); +TOperType = (operUnary, //Operación Unaria + operBinary //Operación Binaria + ); +{ TOperand } +//Objeto Operando. Para información sobre operandos, ver la documentación técnica. +TOperand = object +private + FSto : TStoOperand; //Almacenamiento del operando + FTyp : TxpEleType; //Tipo del operando, cuando no es stVariab + FVar : TxpEleVar; //Referencia a variable + //FVarOff: TxpEleVar; //Referencia a variable + FVal : TConsValue; //Valores constantes, cuando el operando es constante + function GetTyp: TxpEleType; + procedure SetvalBool(AValue: boolean); + procedure SetvalFloat(AValue: extended); + procedure SetvalInt(AValue: Int64); +public //Campos generales + txt : string; //Texto del operando o expresión, tal como aparece en la fuente + Inverted: boolean; {Este campo se usa para cuando el operando es de tipo Bit o Boolean. + Indica que la lógica debe leerse de forma invertida.} + rVarBase: TxpEleVar; {Referencia a variable base, cuando el operando es de tipo: + ... } + {"Sto", "Typ" y "rVar" se consideran de solo lectura. Para cambiarlos, se han definido + los métodos: SetAsConst(), SetAsVariab(), SetAsExpres() y SetAsNull, que ofrecen una + forma más sencilla y segura que cambiar "Cat", "Typ", y rVar" individualmente (que es + como se hacía en versiones anteriores).} + property Sto : TStoOperand read FSto; //Alamcenamiento de operando + property Typ : TxpEleType read GetTyp; //Tipo del operando + property rVar: TxpEleVar read FVar; //Referencia a la variable. + //property rVarOff: TxpEleVar read FVarOff; //Referencia a la variable. + procedure SetAsConst(xtyp: TxpEleType); + procedure SetAsVariab(xvar: TxpEleVar); + procedure SetAsExpres(xtyp: TxpEleType); + procedure SetAsVarRef(VarBase: TxpEleVar); + procedure SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); + procedure SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); + procedure SetAsNull; + function StoOpStr: string; + function StoOpChr: char; + procedure DefineRegister; inline; + function FindOperator(const oper: string): TxpOperator; //devuelve el objeto operador + procedure Invert; //Invierte la lógica del operando +public //Campos acceso cuando sea variable. + function VarName: string; inline; //nombre de la variable, cuando sea de categ. coVariab + function offs : TVarOffs; //dirección de la variable + function Boffs: TVarOffs; inline; //dirección del byte del bit + function Loffs: TVarOffs; inline; //dirección del byte bajo + function Hoffs: TVarOffs; inline; //dirección del byte alto + function Eoffs: TVarOffs; inline; //dirección del byte alto + function Uoffs: TVarOffs; inline; //dirección del byte alto + function bank : TVarBank; inline; //banco + function addr : TVarOffs; //dirección absoluta de la variable + function Lbank: TVarBank; inline; //banco + function bit : byte; inline; //posición del bit +public //Campos de acceso a los valores constantes + property valInt : Int64 read Fval.ValInt write SetvalInt; + property valFloat: extended read Fval.ValFloat write SetvalFloat; + property valBool : boolean read Fval.ValBool write SetvalBool; + //funciones de ayuda para adaptar los tipos numéricos + function aWord: word; inline; //devuelve el valor en Word + function LByte: byte; inline; //devuelve byte bajo de valor entero + function HByte: byte; inline; //devuelve byte alto de valor entero + function EByte: byte; inline; //devuelve byte bajo de valor entero + function UByte: byte; inline; //devuelve byte bajo de valor entero + //campos para validar el rango de los valores + function CanBeByte: boolean; //indica si cae en el rango de un BYTE + function CanBeWord: boolean; //indica si cae en el rango de un WORD + //métodos para mover valores desde/hacia una constante externa + procedure CopyConsValTo(var c: TxpEleCon); + procedure GetConsValFrom(const c: TxpEleCon); +end; -//procedure Compilar(NombArc: string; LinArc: Tstrings); -var - cxp : TCompiler; +{ TCompilerBase } +{Clase base para crear a los objetos compiladores. +Esta clase debe ser el ancestro común de todos los compialdores a usar en PicPas. +Contiene métodos abstractos que deben ser impleemntados en las clases descendeintes.} +TCompilerBase = class +protected //Variables de expresión. + {Estas variables, se inician al inicio de cada expresión y su valor es válido + hasta el final de la expresión.} + CurrBank : Byte; //Banco RAM actual + //Variables de estado de las expresiones booleanas + InvertedFromC: boolean; {Indica que el resultado de una expresión Booleana o Bit, se + ha obtenido, en la última subexpresion, copaindo el bit C al + bit Z, con inversión lógica. Se usa para opciones de + optimziación de código.} +protected + procedure IdentifyField(xOperand: TOperand); + procedure LogExpLevel(txt: string); + function IsTheSameBitVar(var1, var2: TxpEleVar): boolean; inline; + function AddCallerTo(elem: TxpElement; callerElem: TxpElement = nil): TxpEleCaller; + function AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; +protected //Eventos del compilador + {This is the way the Parser can communicate with the Code Generator, considering this + unit is independent of Code Generation.} + OnExprStart: procedure of object; {Se genera al iniciar la + evaluación de una expresión.} + OnExprEnd : procedure(posExpres: TPosExpres) of object; {Se genera al terminar de + evaluar una expresión.} + OnReqStopCodeGen: procedure of object; //Required stop the Code Generation + OnReqStartCodeGen: procedure of object; //Required start the Code Generation +protected + ExprLevel : Integer; //Nivel de anidamiento de la rutina de evaluación de expresiones + RTstate : TxpEleType; {Estado de los RT. Si es NIL, indica que los RT, no tienen + ningún dato cargado, sino indican el tipo cargado en los RT.} + function CaptureDelExpres: boolean; + procedure ProcComments; virtual; abstract; + procedure TipDefecNumber(var Op: TOperand; toknum: string); virtual; abstract; + procedure TipDefecString(var Op: TOperand; tokcad: string); virtual; abstract; + procedure TipDefecBoolean(var Op: TOperand; tokcad: string); virtual; abstract; + function EOExpres: boolean; + function EOBlock: boolean; + //Manejo de tipos + procedure ClearTypes; + function CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint + ): TxpEleType; + function FindSysEleType(TypName: string): TxpEleType; + //Manejo de constantes + function CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; + //Manejo de variables + function CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; + //Manejo de tipos + function CreateEleType(typName: string): TxpEleType; + //Manejo de funciones + function CreateFunction(funName: string; typ: TxpEleType; procParam, + procCall: TProcExecFunction): TxpEleFun; + function ValidateFunction: boolean; + function CreateSysFunction(funName: string; procParam, + procCall: TProcExecFunction): TxpEleFun; + procedure CaptureParamsFinal(fun: TxpEleFun); + function CaptureTok(tok: string): boolean; + function CaptureStr(str: string): boolean; + procedure CaptureParams(func0: TxpEleFun); + //Manejo del cuerpo del programa + function CreateBody: TxpEleBody; + //Manejo de Unidades + function CreateUnit(uniName: string): TxpEleUnit; + //Manejo de expresiones + procedure GetOperandIdent(var Op: TOperand); + function GetOperand: TOperand; virtual; + function GetOperandPrec(pre: integer): TOperand; + function GetOperator(const Op: Toperand): TxpOperator; + procedure GetExpressionE(const prec: Integer; posExpres: TPosExpres = pexINDEP); +public //Contenedores + TreeElems : TXpTreeElements; //Árbol de sintaxis del lenguaje + TreeDirec : TXpTreeElements; //Árbol de sinatxis para directivas + listFunSys : TxpEleFuns; //lista de funciones del sistema + listTypSys : TxpEleTypes; //lista de tipos del sistema +protected + function stoOperation: TStoOperandsROB; inline; + procedure LoadToRT(Op: TOperand; modReturn: boolean = false); + function GetExpression(const prec: Integer): TOperand; + //LLamadas a las rutinas de operación + procedure Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); + procedure OperPre(var Op1: TOperand; opr: TxpOperator); + procedure OperPost(var Op1: TOperand; opr: TxpOperator); +public //Referencias a los tipos predefinidos de tokens. + tnEol : integer; + tnSymbol : integer; + tnSpace : integer; + tnIdentif : integer; + tnNumber : integer; + tnKeyword : integer; + tnString : integer; + tnComment : integer; + //Atributos + tkEol : TSynHighlighterAttributes; + tkSymbol : TSynHighlighterAttributes; + tkSpace : TSynHighlighterAttributes; + tkIdentif : TSynHighlighterAttributes; + tkNumber : TSynHighlighterAttributes; + tkKeyword : TSynHighlighterAttributes; + tkString : TSynHighlighterAttributes; + tkComment : TSynHighlighterAttributes; + //otras referencias + tnOperator: integer; + tnBoolean : integer; + tnSysFunct: integer; + tnType : integer; + //Atributos + tkOperator: TSynHighlighterAttributes; + tkBoolean : TSynHighlighterAttributes; + tkSysFunct: TSynHighlighterAttributes; + tkType : TSynHighlighterAttributes; +public //Tipos adicionales de tokens + tnStruct : integer; + tnDirective: integer; + tnAsm : integer; + tnExpDelim : integer; + tnBlkDelim : integer; + tnChar : integer; + tnOthers : integer; +public //Tipos de datos a implementar + {No es obligatorio implementar todos los tipos de datos, para todos los compiladoreslo } + typBit : TxpEleType; + typBool : TxpEleType; + typByte : TxpEleType; + typChar : TxpEleType; + typWord : TxpEleType; + typDWord: TxpEleType; +public + ID : integer; //Identificador para el compilador. + Compiling: boolean; //Bandera para el compilado + FirstPass: boolean; //Indica que está en la primera pasada. + xLex : TSynFacilSyn; //Resaltador - lexer + cIn : TContexts; //Entrada de datos + CompiledUnit: boolean; //Flag to identify a Unit + //Variables públicas del compilador + ejecProg : boolean; //Indica que se está ejecutando un programa o compilando + DetEjec : boolean; //Para detener la ejecución (en intérpretes) -procedure SetLanguage; + p1, p2 : ^TOperand; //Pasa los operandos de la operación actual + res : TOperand; //resultado de la evaluación de la última expresión. + procedure Compile(NombArc: string; Link: boolean); virtual; abstract; + function OperationStr(Opt: TxpOperation): string; +protected //Accesos a propeidades de p1^ y p2^. + function value1: dword; + function value1L: word; + function value1H: word; + function value1U: word; + function value1E: word; + function value2: dword; + function value2L: word; + function value2H: word; + function bit1: TPicRegisterBit; + function bit2: TPicRegisterBit; + function byte1: TPicRegister; + function byte1L: TPicRegister; + function byte1H: TPicRegister; + function byte1E: TPicRegister; + function byte1U: TPicRegister; + function byte2: TPicRegister; + function byte2L: TPicRegister; + function byte2H: TPicRegister; + function byte2E: TPicRegister; + function byte2U: TPicRegister; +public //Manejo de errores y advertencias + HayError: boolean; + OnWarning: procedure(warTxt: string; fileName: string; row, col: integer) of object; + OnError : procedure(errTxt: string; fileName: string; row, col: integer) of object; + OnInfo : procedure(infTxt: string) of object; + procedure ClearError; + //Rutinas de generación de mensajes + procedure GenInfo(msg: string); + //Rutinas de generación de advertencias + procedure GenWarn(msg: string; fil: String; row, col: integer); + procedure GenWarn(msg: string; const Args: array of const; fil: String; row, col: integer); + procedure GenWarn(msg: string); + procedure GenWarn(msg: string; const Args: array of const); + procedure GenWarnPos(msg: string; const Args: array of const; srcPos: TSrcPos); + //Rutinas de generación de error + procedure GenError(msg: string; fil: String; row, col: integer); + procedure GenError(msg: String; const Args: array of const; fil: String; row, col: integer); + procedure GenError(msg: string); + procedure GenError(msg: String; const Args: array of const); + procedure GenErrorPos(msg: String; const Args: array of const; srcPos: TSrcPos); +public //Compiling Options + incDetComm : boolean; //Incluir Comentarios detallados. + ConfigWord : integer; //Bits de configuración + mode : (modPascal, modPicPas); + SetProIniBnk: boolean; //Incluir instrucciones de cambio de banco al inicio de procedimientos + OptBnkAftPro: boolean; //Incluir instrucciones de cambio de banco al final de procedimientos + OptBnkAftIF : boolean; //Optimizar instrucciones de cambio de banco al final de IF + OptReuProVar: boolean; //Optimiza reutilizando variables locales de procedimientos + OptRetProc : boolean; //Optimiza el último exit de los procedimeintos. +protected + mainFile : string; //Archivo inicial que se compila + hexFile : string; //Nombre de archivo de salida + function ExpandRelPathTo(BaseFile, FileName: string): string; + procedure ExchangeP1_P2; +public //Información y acceso a memoria + function hexFilePath: string; + function mainFilePath: string; + function CompilerName: string; virtual; abstract; //Name of the compiler + procedure RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); virtual; abstract; + function RAMusedStr: string; virtual; abstract; + function FLASHusedStr: string; virtual; abstract; + procedure GetResourcesUsed(out ramUse, romUse, stkUse: single); virtual; abstract; + procedure DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); virtual; abstract; + procedure GenerateListReport(lins: TStrings); virtual; abstract; +public //Acceso a campos del objeto PIC + function PICName: string; virtual; abstract; + function PICNameShort: string; virtual; abstract; + function PICnBanks: byte; virtual; abstract; //Number of RAM banks + function PICCurBank: byte; virtual; abstract; //Current RAM bank + function PICBank(i: byte): TPICRAMBank; virtual; abstract; //Return a RAM bank + function PICnPages: byte; virtual; abstract; //Number of FLASH pages + function PICPage(i: byte): TPICFlashPage; virtual; abstract; //Return a FLASH page + function RAMmax: integer; virtual; abstract; +protected //Container lists of registers + listRegAux : TPicRegister_list; //lista de registros de trabajo y auxiliares + listRegStk : TPicRegister_list; //lista de registros de pila + listRegAuxBit: TPicRegisterBit_list; //lista de registros de trabajo y auxiliares + listRegStkBit: TPicRegisterBit_list; + stackTop : integer; //índice al límite superior de la pila + stackTopBit: integer; //índice al límite superior de la pila +public + picCore : TPicCore; //Objeto PIC Core + devicesPath: string; //Ruta de las unidades de dispositivos + property ProplistRegAux: TPicRegister_list read listRegAux; + property ProplistRegAuxBit: TPicRegisterBit_list read listRegAuxBit; +public //Inicialización + constructor Create; virtual; + destructor Destroy; override; +end; implementation -//Funciones básicas -{$I ..\language\tra_Parser.pas} -procedure TCompiler.cInNewLine(lin: string); -//Se pasa a una nueva _Línea en el contexto de entrada +uses Graphics; + +{TCompilerBase} +function TCompilerBase.EOExpres: boolean; inline; +//Indica si se ha llegado al final de una expresión. begin - if Config.IncComment then begin - pic.addTopComm(' ;'+trim(lin)); //agrega _Línea al código ensmblador - end; + Result := cIn.tok = ';'; //en este caso de ejemplo, usamos punto y coma + {En la práctica, puede ser conveniente definir un tipo de token como "tkExpDelim", para + mejorar el tiempo de respuesta del procesamiento, de modo que la condición sería: + Result := cIn.tokType = tkExpDelim; + } +end; +function TCompilerBase.EOBlock: boolean; inline; +//Indica si se ha llegado el final de un bloque +begin + Result := cIn.tokType = tnBlkDelim; + {No está implementado aquí, pero en la práctica puede ser conveniente definir un tipo de token + como "tnBlkDelim", para mejorar el tiempo de respuesta del procesamiento, de modo que la + condición sería: + Result := cIn.tokType = tnBlkDelim;} end; -function TCompiler.StartOfSection: boolean; +function TCompilerBase.CaptureDelExpres: boolean; +//Verifica si sigue un delimitador de expresión. Si encuentra devuelve false. begin - Result := (cIn.tokL ='var') or (cIn.tokL ='const') or - (cIn.tokL ='type') or (cIn.tokL ='procedure'); + cIn.SkipWhites; + if EOExpres then begin //encontró + cIn.Next; //pasa al siguiente + exit(true); + end else begin //es un error + GenError('";" expected.'); + exit(false); //sale con error + end; + end; -procedure TCompiler.ResetFlashAndRAM; -{Reinicia el dispositivo, para empezar a escribir en la posición $000 de la FLASH, y -en la posición inicial de la RAM.} +//Manejo de tipos +procedure TCompilerBase.ClearTypes; //Limpia los tipos del sistema begin - pic.iFlash := 0; //Ubica puntero al inicio. - pic.ClearMemRAM; //Pone las celdas como no usadas y elimina nombres. - CurrBank := 0; - StartRegs; //Limpia registros de trabajo, auxiliares, y de pila. + listTypSys.Clear; end; -procedure TCompiler.getListOfIdent(var itemList: TStringDynArray; out srcPosArray: TSrcPosArray); -{Lee una lista de identificadores separados por comas, hasta encontra un caracter distinto -de coma. Si el primer elemento no es un identificador o si después de la coma no sigue un -identificador, genera error. -También devuelve una lista de las posiciones de los identificadores, en el código fuente.} +function TCompilerBase.CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint): TxpEleType; +{Crea un elemento tipo, del sistema. Devuelve referencia al tipo creado.} var - item: String; - n: Integer; -begin - setlength(srcPosArray,0 ); - setlength(itemList, 0); //hace espacio - repeat - ProcComments; - //ahora debe haber un identificador - if cIn.tokType <> tnIdentif then begin - GenError(ER_IDEN_EXPECT); - exit; - end; - //hay un identificador - item := cIn.tok; - //sgrega nombre de ítem - n := high(itemList)+1; - setlength(itemList, n+1); //hace espacio - setlength(srcPosArray, n+1); //hace espacio - itemList[n] := item; //agrega nombre - srcPosArray[n] := cIn.ReadSrcPos; //agrega ubicación de declaración - cIn.Next; //lo toma identificador despues, de guardar ubicación - ProcComments; - if cIn.tok <> ',' then break; //sale - cIn.Next; //toma la coma - until false; -end; -function TCompiler.getParamType: TxpEleType; -{Lee el tipo que acompaña a una declaración de parámetro de un procedimeinto. -Es muy similar a GetTypeVarDeclaration (excepto porque aquí se verifican los tipos -copias), y tal vez debería unificarse.} + eType: TxpEleType; +begin + //Verifica nombre + if FindSysEleType(nom0) <> nil then begin + GenError('Duplicated identifier: "%s"', [nom0]); + exit(nil); //Devuelve tipo nulo + end; + //Crea elemento de tipo + eType := TxpEleType.Create; + eType.name := nom0; + eType.grp := cat0; + eType.size := siz0; + eType.catType := tctAtomic; + listTypSys.Add(eType); + //Devuelve referencia al tipo + Result:=eType; +end; +function TCompilerBase.FindSysEleType(TypName: string): TxpEleType; +{Busca un elemento de tipo por su nombre. Si no encuentra, devuelve NIL.} var - typName: String; - typ: TxpEleType; - ele: TxpElement; + etyp: TxpEleType; begin - ProcComments; - typName := cIn.tok; //lee tipo de parámetro - //Primero verifica si es un tipo del sistema - typ := FindSysEleType(typName); //tipos básicos - if typ <> nil then begin - //Es un tipo del sistema - end else begin - //No es un tipo delñ sistema, debe ser otro tipo - ele := TreeElems.FindFirst(typName); //identifica elemento - if ele = nil then begin - //No identifica a este elemento - GenError('Unknown identifier: %s', [typName]); - exit(nil); - end; - if ele.idClass = eltType then begin - //Es un tipo - typ := TxpEleType(ele); - AddCallerTo(typ); //lleva la cuenta - if typ.copyOf<>nil then typ := typ.copyOf; - end else begin - GenError(ER_IDE_TYP_EXP); - exit(nil); - end; + typName := upcase(typName); + for etyp in listTypSys do begin + if UpCase(etyp.name) = typName then exit(etyp); //devuelve referencia end; - cIn.Next; - Result := typ; -end; -procedure TCompiler.ProcComments; -{Procesa comentarios, directivas y bloques ASM. Los bloques ASM, se processan también -como comentarios o directivas, para poder ubicarlos dentro de instrucciones, y poder -darle mayor poder, en el futuro. -Notar que este procedimiento puede detectar varios errores en el mismo bloque, y que -pasa al siguiente token, aún cuando detecta errores. Esto permite seguir proesando -el texto, después de que ya se han generado errores dentro de este blqoue. Así, no -sería necesario verificar error después de esta rutina, y se podrían detectar errores -adicionales en el código fuente.} + exit(nil); +end; +function TCompilerBase.CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; +{Rutina para crear una constante. Devuelve referencia a la constante creada.} var - ctxChanged: Boolean; //Manejamos variables locales para permitir recursividad + conx : TxpEleCon; begin - cIn.SkipWhites; - while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin - if cIn.tokType = tnAsm then begin - //Es una línea ASM - ProcASMlime(cIn.tok); //procesa línea - if HayError then begin - cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros - cIn.SkipWhites; - continue; - end; - end else begin - //Es una directiva - ProcDIRline(cIn.tok, ctxChanged); //procesa línea - if HayError then begin - cIn.Next; //Pasa, porque es un error ya ubicado, y mejor buscamos otros - cIn.SkipWhites; - continue; - end; - if ctxChanged then begin - {Hubo cambio de contexto. Procesamos nuevamente, porque ahora estamos ya en - otro contexto y se supone que esta llamada a ProcComments(), se hace precisamente - para saltar blancos, comentarios, directivas, o bloques ASM.} -// cIn.SkipWhites; {En el nuevo contexto puede haber nuevos comentarios.} - ProcComments; {En el nuevo contexto puede haber nuevos comentarios o bloques Asm.} - exit; - end; - end; - //Pasa a siguiente - cIn.Next; - cIn.SkipWhites; //limpia blancos - end; + //registra variable en la tabla + conx := TxpEleCon.Create; + conx.name:=consName; + conx.typ := eletyp; //fija referencia a tipo + Result := conx; end; -procedure TCompiler.ProcCommentsNoExec; -{Similar a ProcComments(), pero no ejecuta directivas o bloques ASM.} +//Manejo de variables +function TCompilerBase.CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; +{Rutina para crear una variable. Devuelve referencia a la variable creada.} +var + xVar: TxpEleVar; begin - cIn.SkipWhites; - while (cIn.tokType = tnDirective) or (cIn.tokType = tnAsm) do begin - //Pasa a siguiente - cIn.Next; - cIn.SkipWhites; //limpia blancos - end; + xVar := TxpEleVar.Create; + xVar.name := varName; + xVar.typ := eleTyp; + xVar.havAdicPar := false; + Result := xVar; end; -procedure TCompiler.CompileLastEnd; -{Compila la parte de final de un programa o una unidad} +//Manejo de tipos +function TCompilerBase.CreateEleType(typName: string): TxpEleType; +var + xTyp: TxpEleType; +begin + xTyp := TxpEleType.Create; + xTyp.name := typName; +// xTyp.typ := typ; + Result := xTyp; +end; +//Manejo de funciones +function TCompilerBase.CreateFunction(funName: string; typ: TxpEleType; + procParam, procCall: TProcExecFunction): TxpEleFun; +{Crea una nueva función y devuelve la referecnia a la función.} +var + fun : TxpEleFun; begin - if cIn.Eof then begin - GenError(ER_EOF_END_EXP); - exit; //sale + fun := TxpEleFun.Create; + fun.name:= funName; + fun.typ := typ; + fun.procParam := procParam; + fun.procCall:= procCall; + fun.ClearParams; + Result := fun; +end; +function TCompilerBase.ValidateFunction: boolean; +{Valida la última función introducida, verificando que no haya otra función con el + mismo nombre y mismos parámetros. De ser así devuelve FALSE. + Se debe llamar después de haber leido los parámetros de la función. } +begin + if not TreeElems.ValidateCurElement then begin + GenError('Duplicated function: %s',[TreeElems.CurNodeName]); + exit(false); end; - if cIn.tokL <> 'end' then begin //verifica si termina el programa - if cIn.tokL = 'else' then begin - //Precisa un poco más en el error - GenError(ER_ELS_UNEXPEC); - exit; //sale + exit(true); //validación sin error +end; +function TCompilerBase.CreateSysFunction(funName: string; + procParam, procCall: TProcExecFunction): TxpEleFun; +{Crea una función del sistema. A diferencia de las funciones definidas por el usuario, +una función del sistema se crea, sin crear espacios de nombre. La idea es poder +crearlas rápidamente. "procParam", solo es necesario, cuando la función del sistema +debe devolver valores (No es procedimiento).} +var + fun : TxpEleFun; +begin + fun := TxpEleFun.Create; //Se crea como una función normal + fun.name:= funName; + fun.typ := typNull; + fun.procParam := procParam; + fun.procCall:= procCall; + fun.ClearParams; + listFunSys.Add(fun); //Las funciones de sistema son accesibles siempre + Result := fun; +end; +function TCompilerBase.CaptureTok(tok: string): boolean; +{Toma el token indicado del contexto de entrada. Si no lo encuentra, genera error y +devuelve FALSE.} + procedure GenErrorInLastLine(var p: TSrcPos); + {Genera error posicionando el punto del error, en una línea anterior, que no esté + vacía.} + var + lin: String; + begin + if p.row>1 then begin + //Hay línea anterior + repeat + p.row := p.row - 1; + lin := cIn.curCon.curLines[p.row - 1]; + until (p.row<=1) or (trim(lin)<>''); + //Encontró línea anterior no nula o llegó a la primera línea. +// xlex.ExploreLine(Point(length(lin), p.row), toks, CurTok ); + p.col := length(lin); //mueve al final (antes del EOL) + GenErrorPos('"%s" expected.', [tok], p); //Genera error end else begin - GenError(ER_END_EXPECTE); - exit; //sale + //No hay línea anterior + p.col := 1; //mueve al inicio + GenErrorPos('"%s" expected.', [tok], p); //Genera error end; end; - cIn.Next; //coge "end" - //Debería seguir el punto - if not CaptureTok('.') then exit; - //no debe haber más instrucciones - ProcComments; - if not cIn.Eof then begin - GenError(ER_NOT_AFT_END); - exit; //sale - end; -end; -function TCompiler.AddVariable(varName: string; eleTyp: TxpEleType; srcPos: TSrcPos - ): TxpEleVar; -{Crea un elemento variable y lo agrega en el nodo actual del árbol de sintaxis. -Si no hay errores, devuelve la referencia a la variable. En caso contrario, -devuelve NIL. -Notar que este método, no asigna RAM a la variable. En una creación completa de -variables, se debería llamar a CreateVarInRAM(), después de agregar la variable.} + var - xvar: TxpEleVar; -begin - //Inicia parámetros adicionales de declaración - xvar := CreateVar(varName, eleTyp); - xvar.srcDec := srcPos; //Actualiza posición - Result := xvar; - if not TreeElems.AddElement(xvar) then begin - GenErrorPos(ER_DUPLIC_IDEN, [xvar.name], xvar.srcDec); - xvar.Destroy; //Hay una variable creada - exit(nil); + x: integer; + lin: String; + p: TSrcPos; +begin + //Debe haber parámetros + if cIn.tok<>tok then begin + //No se encontró el token. Muestra mensaje de error. + {Pero el error, debe estar antes, así que hacemos la magia de explorar hacia atrás, + hasta encontrar el token involucrado.} + p := cIn.ReadSrcPos; //posición actual + x := p.col; //lee posición actual + if x>1 then begin + //Hay algo antes del token + lin := cIn.curCon.CurLine; + repeat + dec(x); + until (x<=1) or (lin[x] <> ' '); + if x<=1 then begin + //Está lleno de espacios, hasta el inicio. + //Es muy probable que el error esté en la línea anterior. + GenErrorInLastLine(p); + end else begin + //Encontró, en la misma línea un caracter diferente de espacio + GenErrorPos('"%s" expected.', [tok], p); //Genera error ahí mismo + end; + end else begin + //Está al inicio de la línea. El error debe estar antes + GenErrorInLastLine(p); + end; + exit(false); end; + cin.Next; + exit(true); end; -function TCompiler.AddType(typName: string; srcPos: TSrcPos): TxpEleType; -{Crea un elemento tipo y lo agrega en el nodo actual del árbol de sintaxis. -Si no hay errores, devuelve la referencia al tipo. En caso contrario, -devuelve NIL.} -var - xtyp: TxpEleType; -begin - //Inicia parámetros adicionales de declaración - xtyp := CreateEleType(typName); - xtyp.srcDec := srcPos; //Actualiza posición - Result := xtyp; - if not TreeElems.AddElement(xtyp) then begin - GenErrorPos(ER_DUPLIC_IDEN, [xtyp.name], xtyp.srcDec); - xtyp.Destroy; //Hay una variable creada - exit(nil); +function TCompilerBase.CaptureStr(str: string): boolean; +//Similar a CaptureTok(), pero para cadenas. Se debe dar el texto en minúscula. +begin + //Debe haber parámetros + if cIn.tokL<>str then begin + GenError('"%s" expected.', [str]); + exit(false); end; + cin.Next; + exit(true); end; -procedure TCompiler.CaptureDecParams(fun: TxpEleFun); -//Lee la declaración de parámetros de una función. -var - typ: TxpEleType; - xvar: TxpEleVar; - IsRegister: Boolean; - itemList: TStringDynArray; - srcPosArray: TSrcPosArray; - i: Integer; +procedure TCompilerBase.CaptureParams(func0: TxpEleFun); +//Lee los parámetros de una función en la función interna funcs[0] begin - cIn.SkipWhites; - if EOBlock or EOExpres or (cIn.tok = ':') then begin + //func0.ClearParams; + if EOBlock or EOExpres then begin //no tiene parámetros end else begin //Debe haber parámetros - if not CaptureTok('(') then exit; - cin.SkipWhites; + if cIn.tok <> '(' then begin + //Si no sigue '(', significa que no hay parámetros. + exit; + end; + cIn.Next; //Toma paréntesis repeat - IsRegister := false; - if cIn.tokL = 'register' then begin - IsRegister := true; - cin.Next; - cin.SkipWhites; - end; - getListOfIdent(itemList, srcPosArray); - if HayError then begin //precisa el error - GenError(ER_IDEN_EXPECT); - exit; - end; - if not CaptureTok(':') then exit; - typ := getParamType; //lee tipo - if HayError then exit; - //Ya tiene los nombres y el tipo - //Crea el parámetro como una varaible local - for i:= 0 to high(itemList) do begin - //Crea los parámetros de la lista. - if IsRegister then begin - //Parámetro REGISTER. Solo puede haber uno - if high(itemList)>0 then begin - GenErrorPos(ER_ONLY_ONE_REG, [], srcPosArray[1]); - exit; - end; - {Crea como variable absoluta a una posición cualquiera porque esta variable, - no debería estar mapeada.} - xvar := AddVariable({fun.name + '_' + }itemList[i], typ, srcPosArray[i]); - xvar.IsParameter := true; //Marca bandera - xvar.IsRegister := true; - //CreateVarInRAM(xvar); //Crea la variable - if HayError then exit; - end else begin - //Parámetro normal - xvar := AddVariable({fun.name + '_' + }itemList[i], typ, srcPosArray[i]); - xvar.IsParameter := true; //Marca bandera - xvar.IsRegister := false; - //CreateVarInRAM(xvar); //Crea la variable - if HayError then exit; - end; - //Ahora ya tiene la variable - fun.CreateParam(itemList[i], typ, xvar); - if HayError then exit; - end; - //Busca delimitador - if cIn.tok = ';' then begin + GetExpressionE(0, pexPARAM); //captura parámetro + if HayError then exit; //aborta + //guarda tipo de parámetro + func0.CreateParam('',res.Typ, nil); + if cIn.tok = ',' then begin cIn.Next; //toma separador cIn.SkipWhites; end else begin - //no sigue separador de parámetros, + //No sigue separador de parámetros, //debe terminar la lista de parámetros //¿Verificar EOBlock or EOExpres ? break; @@ -375,2342 +582,1233 @@ procedure TCompiler.CaptureDecParams(fun: TxpEleFun); if not CaptureTok(')') then exit; end; end; -function TCompiler.CompileStructBody(GenCode: boolean): boolean; -{Compila el cuerpo de un THEN, ELSE, WHILE, ... considerando el modo del compilador. -Si se genera error, devuelve FALSE. } +procedure TCompilerBase.CaptureParamsFinal(fun: TxpEleFun); +{Captura los parámetros asignándolos a las variables de la función que representan a los +parámetros. No hace falta verificar, no debería dar error, porque ya se verificó con +CaptureParams. } +var + i: Integer; + par: TxpParFunc; + Op1, Op2: TOperand; + op: TxpOperator; begin - if GenCode then begin - //Este es el modo normal. Genera código. - if mode = modPascal then begin - //En modo Pascal se espera una instrucción - CompileInstruction; - end else begin - //En modo normal - CompileCurBlock; + if EOBlock or EOExpres then exit; //sin parámetros + CaptureTok('('); //No debe dar error porque ya se verificó + for i := 0 to high(fun.pars) do begin + par := fun.pars[i]; + {Ya sirvió "RTstate", ahora lo limpiamos, no vaya a pasar que las rutinas de + asignación, piensen que los RT están ocupados, cuando la verdad es que han sido + liberados, precisamente para ellas.} + RTstate := nil; + //Evalúa parámetro + Inc(ExprLevel); //cuenta el anidamiento + Op2 := GetExpression(0); //llama como sub-expresión + Dec(ExprLevel); + if HayError then exit; //aborta + if cIn.tok = ',' then begin + cIn.Next; + cIn.SkipWhites; end; - if HayError then exit(false); - end else begin - //Este modo no generará instrucciones - cIn.SkipWhites; - GenWarn(ER_INST_NEV_EXE); - if mode = modPascal then begin - //En modo Pascal se espera una instrucción - CompileInstructionDummy //solo para mantener la sintaxis + //Genera código para la asignación + if par.pvar.IsRegister then begin + {Cuando es parámetro registro, no se asigna, se deja en el registro(s) de + trabajo.} + LoadToRT(Op2); end else begin - //En modo normal - CompileCurBlockDummy; //solo para mantener la sintaxis + //Crea un operando-variable para generar código de asignación + Op1.SetAsVariab(par.pvar); //Apunta a la variable + AddCallerTo(par.pvar); //Agrega la llamada + op := Op1.Typ.operAsign; + Oper(Op1, op, Op2); //Codifica la asignación end; - if HayError then exit(false); end; - //Salió sin errores - exit(true); -end; -function TCompiler.CompileConditionalBody(out FinalBank: byte): boolean; -{Versión de CompileStructBody(), para bloques condicionales. -Se usa para bloque que se ejecutarán de forma condicional, es decir, que no se -garantiza que se ejecute siempre. "FinalBank" indica el banco en el que debería -terminar el bloque.} -begin - Result := CompileStructBody(true); //siempre genera código - FinalBank := CurrBank; //Devuelve banco + if not CaptureTok(')') then exit; end; -function TCompiler.CompileNoConditionBody(GenCode: boolean): boolean; -{Versión de CompileStructBody(), para bloques no condicionales. -Se usa para bloques no condicionales, es decir que se ejecutará siempre (Si GenCode -es TRUE) o nunca (Si GenCode es FALSE); -} +function TCompilerBase.CreateBody: TxpEleBody; +var + body: TxpEleBody; begin - //"BankChanged" sigue su curso normal - Result := CompileStructBody(GenCode); + body := TxpEleBody.Create; + body.name := TIT_BODY_ELE; + Result := body; end; -function TCompiler.VerifyEND: boolean; -{Compila la parte final de la estructura, que en el modo PicPas, debe ser el - delimitador END. Si encuentra error, devuelve FALSE.} +function TCompilerBase.CreateUnit(uniName: string): TxpEleUnit; +var + uni: TxpEleUnit; begin - Result := true; //por defecto - if mode = modPicPas then begin - //En modo PicPas, debe haber un delimitador de bloque - if not CaptureStr('end') then exit(false); - end; + uni := TxpEleUnit.Create; + uni.name := uniName; + Result := uni; end; -function TCompiler.GetExpressionBool: boolean; -{Lee una expresión booleana. Si hay algún error devuelve FALSE.} +procedure TCompilerBase.IdentifyField(xOperand: TOperand); +{Identifica el campo de una variable. Si encuentra algún problema genera error. +Notar que el parámetro es por valor, es decir, se crea una copia, por seguridad. +Puede generar código de evaluación. Devuelve el resultado en "res". } +var + field: TTypField; + identif: String; begin - GetExpressionE(0); - if HayError then exit(false); - if res.Typ <> typBool then begin - GenError(ER_BOOL_EXPECT); - exit(false); - end; - ProcComments; - exit(true); //No hay error -end; -procedure TCompiler.CompileIF; -{Compila una extructura IF} - procedure SetFinalBank(bnk1, bnk2: byte); - {Fija el valor de CurrBank, de acuerdo a dos bancos finales.} - begin - if OptBnkAftIF then begin - //Optimizar banking - if bnk1 = bnk2 then begin - //Es el mismo banco (aunque sea 255). Lo deja allí. - end else begin - CurrBank := 255; //Indefinido + if cIn.tok = '[' then begin + //Caso especial de llamada a Item(). + for field in xOperand.Typ.fields do begin + if LowerCase(field.Name) = 'item' then begin + field.proc(@xOperand); //Devuelve resultado en "res" + if cIn.tok = '.' then begin + //Aún hay más campos, seguimos procesando + //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado + IdentifyField(res); + end; + exit; end; - end else begin - //Sin optimización - _BANKRESET; end; + //No encontró setitem() + GenError('Cannot access to index in: %s', [xOperand.txt]); + exit; end; -var - jFALSE, jEND_TRUE: integer; - bnkExp, bnkTHEN, bnkELSE: Byte; -begin - if not GetExpressionBool then exit; - bnkExp := CurrBank; //Guarda el banco inicial - if not CaptureStr('then') then exit; //toma "then" - //Aquí debe estar el cuerpo del "if" - case res.Sto of - stConst: begin //la condición es fija - if res.valBool then begin - //Es verdadero, siempre se ejecuta - if not CompileNoConditionBody(true) then exit; - //Compila los ELSIF que pudieran haber - while cIn.tokL = 'elsif' do begin - cIn.Next; //toma "elsif" - if not GetExpressionBool then exit; - if not CaptureStr('then') then exit; //toma "then" - //Compila el cuerpo pero sin código - if not CompileNoConditionBody(false) then exit; - end; - //Compila el ELSE final, si existe. - if cIn.tokL = 'else' then begin - //Hay bloque ELSE, pero no se ejecutará nunca - cIn.Next; //toma "else" - if not CompileNoConditionBody(false) then exit; - if not VerifyEND then exit; - end else begin - VerifyEND; - end; - end else begin - //Es falso, nunca se ejecuta - if not CompileNoConditionBody(false) then exit; - if cIn.tokL = 'else' then begin - //hay bloque ELSE, que sí se ejecutará - cIn.Next; //toma "else" - if not CompileNoConditionBody(true) then exit; - VerifyEND; - end else if cIn.tokL = 'elsif' then begin - cIn.Next; - CompileIF; //más fácil es la forma recursiva - if HayError then exit; - //No es necesario verificar el END final. - end else begin - VerifyEND; - end; - end; + cIn.Next; //Toma el "." + if (cIn.tokType<>tnIdentif) and (cIn.tokType<>tnNumber) then begin + GenError('Identifier expected.'); + cIn.Next; //Pasa siempre + exit; end; - stVariab, stExpres:begin - Cod_JumpIfTrue; - _GOTO_PEND(jFALSE); //salto pendiente - //Compila la parte THEN - if not CompileConditionalBody(bnkTHEN) then exit; - //Verifica si sigue el ELSE - if cIn.tokL = 'else' then begin - //Es: IF ... THEN ... ELSE ... END - cIn.Next; //toma "else" - _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE - _LABEL(jFALSE); //termina de codificar el salto - CurrBank := bnkExp; //Fija el banco inicial antes de compilar - if not CompileConditionalBody(bnkELSE) then exit; - _LABEL(jEND_TRUE); //termina de codificar el salto - SetFinalBank(bnkTHEN, bnkELSE); //Manejo de bancos - VerifyEND; //puede salir con error - end else if cIn.tokL = 'elsif' then begin - //Es: IF ... THEN ... ELSIF ... - cIn.Next; - _GOTO_PEND(jEND_TRUE); //llega por aquí si es TRUE - _LABEL(jFALSE); //termina de codificar el salto - CompileIF; //más fácil es la forma recursiva - if HayError then exit; - _LABEL(jEND_TRUE); //termina de codificar el salto - SetFinalBank(bnkTHEN, CurrBank); //Manejo de bancos - //No es necesario verificar el END final. - end else begin - //Es: IF ... THEN ... END. (Puede ser recursivo) - _LABEL(jFALSE); //termina de codificar el salto - SetFinalBank(bnkExp, bnkTHEN); //Manejo de bancos - VerifyEND; //puede salir con error + //Hay un identificador + identif := cIn.tokL; + //Prueba con campos del tipo + for field in xOperand.Typ.fields do begin + if LowerCase(field.Name) = identif then begin + //Encontró el campo + field.proc(@xOperand); //Devuelve resultado en "res" + //cIn.Next; //Coge identificador + if cIn.tok = '.' then begin + //Aún hay más campos, seguimos procesando + //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado + IdentifyField(res); + end; + exit; end; end; - end; + //No encontró + GenError('Unknown identifier: %s', [identif]); end; -procedure TCompiler.Cod_JumpIfTrue; -{Codifica una instrucción de salto, si es que el resultado de la última expresión es -verdadera. Se debe asegurar que la expresión es de tipo booleana y de almacenamiento -stVariab o stExpres.} +//Manejo de expresiones +procedure TCompilerBase.GetOperandIdent(var Op: TOperand); +{Lee un operando de tipo identificador, devuelve en "Op". Esta rutina era inicialmente +parte de GetOperand(), pero se separó porque: +* Es una rutina larga y se piensa agregar más código, aún. +* Porque se piensa usarla también, de forma independiente. +Se declara como procedimiento, en lugar de función, para evitar crear copias del +operando y mejorar así el desempeño. Incluso se espera que GetOperand(), se declare +luego de la misma forma.} +var + ele : TxpElement; + xvar : TxpEleVar; + xcon : TxpEleCon; + posCall : TSrcPos; + posPar : TPosCont; + RTstate0: TxpEleType; + xfun : TxpEleFun; + Found : Boolean; + func0 : TxpEleFun; //función interna para almacenar parámetros begin - if res.Sto = stVariab then begin - //Las variables booleanas, pueden estar invertidas - if res.Inverted then begin - _BANKSEL(res.bank); - _BTFSC(res.offs, res.bit); //verifica condición +//cIn.ShowCurContInformat; +//debugln(' ++CurNode:' + TreeElems.curNode.Path); + ele := TreeElems.FindFirst(cIn.tok); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenError('Unknown identifier: %s', [cIn.tok]); + exit; + end; +//debugln(' --Element ' + cIn.tok + ':' + ele.Path); + if ele.idClass = eltVar then begin + //Es una variable + xvar := TxpEleVar(ele); //Referencia con tipo + //Lleva la cuenta de la llamada. + {Notar que se agrega la referencia a la variable, pero que finalmente el operando + puede apuntar a otra variable, si es que se tiene la forma: . } + AddCallerTo(xvar); + cIn.Next; //Pasa al siguiente + if xvar.IsRegister then begin + //Es una variables REGISTER + Op.SetAsExpres(xvar.typ); + //Faltaría asegurarse de que los registros estén disponibles + Op.DefineRegister; end else begin - _BANKSEL(res.bank); - _BTFSS(res.offs, res.bit); //verifica condición + //Es una variable común + Op.SetAsVariab(xvar); //Guarda referencia a la variable (y actualiza el tipo). + {$IFDEF LogExpres} Op.txt:= xvar.name; {$ENDIF} //toma el texto + //Verifica si tiene referencia a campos con "." + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op); + Op := res; //notar que se usa "res". + if HayError then exit; + {Como este operando es de tipo .... , actualizamos el campo + "rVarBase", y se hace al final porque los métodos Op.SetAsXXXX() } + Op.rVarBase := xvar; //Fija referencia a la variable base + end; end; - end else if res.Sto = stExpres then begin - //Los resultados de expresión, pueden optimizarse - if InvertedFromC then begin - //El resultado de la expresión, está en Z, pero a partir una copia negada de C - //Se optimiza, eliminando las instrucciones de copia de C a Z - pic.iFlash := pic.iFlash-2; - //La lógica se invierte - if res.Inverted then begin //_Lógica invertida - _BTFSS(C.offs, C.bit); //verifica condición + end else if ele.idClass = eltCons then begin //es constante + //es una constante + xcon := TxpEleCon(ele); + AddCallerTo(xcon);//lleva la cuenta + cIn.Next; //Pasa al siguiente + Op.SetAsConst(xcon.typ); //fija como constante + Op.GetConsValFrom(xcon); //lee valor + {$IFDEF LogExpres} Op.txt:= xcon.name; {$ENDIF} //toma el texto + //Verifica si tiene referencia a campos con "." + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op); + Op := res; //notar que se usa "res". + if HayError then exit;; + end; + end else if ele.idClass = eltFunc then begin //es función + {Se sabe que es función, pero no se tiene la función exacta porque puede haber + versiones, sobrecargadas de la misma función.} + posCall := cIn.ReadSrcPos; //gaurda la posición de llamada. + cIn.Next; //Toma identificador + cIn.SkipWhites; //Quita posibles blancos + posPar := cIn.PosAct; //Guarda porque va a pasar otra vez por aquí + OnReqStopCodeGen(); + RTstate0 := RTstate; //Guarda porque se va a alterar con CaptureParams(). + {Crea func0 localmente, para permitir la recursividad en las llamadas a las funciones. + Adicionalmenet, deberái plantearse otor método en la exploración de parámetros, tal + vez la creeación de un árbol de funciones sobrecargdas. Y así se podría incluso + implementar más fácilmente la adpatación de parámetros como byte->word.} + try + func0 := TxpEleFun.Create; //crea la función 0, para uso interno + CaptureParams(func0); //primero lee parámetros + if HayError then begin + exit; + end; + //Aquí se identifica la función exacta, que coincida con sus parámetros + xfun := TxpEleFun(ele); + //Primero vemos si la primera función encontrada, coincide: + if func0.SameParams(xfun) then begin + //Coincide + Found := true; end else begin - _BTFSC(C.offs, C.bit); //verifica condición + //No es, es una pena. Ahora tenemos que seguir buscando en el árbol de sintaxis. + repeat + //Usar FindNextFunc, es la forma es eficiente, porque retoma la búsqueda anterior. + xfun := TreeElems.FindNextFunc; + until (xfun = nil) or func0.SameParams(xfun); + Found := (xfun <> nil); end; - end else begin - //El resultado de la expresión, está en Z. Caso normal - if res.Inverted then begin //Lógica invertida - _BTFSC(Z.offs, Z.bit); //verifica condición + if Found then begin + //Ya se identificó a la función que cuadra con los parámetros + {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto + {Ahora que ya sabe cúal es la función referenciada, captura de nuevo los + parámetros, pero asignándola al parámetro que corresponde.} + cIn.PosAct := posPar; + OnReqStartCodeGen(); + RTstate := RTstate0; + xfun.procParam(xfun); //Antes de leer los parámetros + if high(func0.pars)+1>0 then + CaptureParamsFinal(xfun); //evalúa y asigna + //Se hace después de leer parámetros, para tener información del banco. + AddCallerTo(xfun, posCall); {Corrige posición de llamada, sino estaría apuntando + al final de los parámetros} + xfun.procCall(xfun); //codifica el "CALL" + RTstate := xfun.typ; //para indicar que los RT están ocupados + Op.SetAsExpres(xfun.typ); + exit; end else begin - _BTFSS(Z.offs, Z.bit); //verifica condición + //Encontró la función, pero no coincidió con los parámetros + GenError('Type parameters error on %s', [ele.name + '()']); + exit; end; + finally + func0.Destroy; end; +// end else if DefinedMacro(cIn.tok) then begin //verifica macro +// //Es una macro + end else begin + GenError('Not implemented.'); + exit; end; end; -procedure TCompiler.CompileREPEAT; -{Compila uan extructura WHILE} +function TCompilerBase.GetOperand: TOperand; +{Parte de la funcion analizadora de expresiones que genera codigo para leer un operando. +Debe devolver el tipo del operando y también el valor. En algunos casos, puede modificar +"res".} var - l1: Word; + xfun : TxpEleFun; + tmp, oprTxt: String; + Op : TOperand; + posAct: TPosCont; + opr : TxpOperator; + cod : Longint; begin - l1 := _PC; //guarda dirección de inicio - CompileCurBlock; - if HayError then exit; - cIn.SkipWhites; - if not CaptureStr('until') then exit; //toma "until" - if not GetExpressionBool then exit; - case res.Sto of - stConst: begin //la condición es fija - if res.valBool then begin - //lazo nulo - end else begin - //lazo infinito - _GOTO(l1); + //cIn.SkipWhites; + ProcComments; + Result.Inverted := false; //inicia campo + if cIn.tokType = tnNumber then begin //constantes numéricas + {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto + TipDefecNumber(Result, cIn.tok); //encuentra tipo de número, tamaño y valor + if HayError then exit; //verifica + cIn.Next; //Pasa al siguiente + end else if cIn.tokType = tnChar then begin //constante caracter + {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto + if not TryStrToInt(copy(cIn.tok, 2), cod) then begin + GenError('Error in character.'); //tal vez, sea muy grande + exit; end; - end; - stVariab, stExpres: begin - Cod_JumpIfTrue; - _GOTO(l1); - //sale cuando la condición es verdadera - end; - end; -end; -procedure TCompiler.CompileWHILE; -{Compila una extructura WHILE} -var - l1: Word; - dg: Integer; - bnkEND, bnkExp1, bnkExp2: byte; -begin - l1 := _PC; //guarda dirección de inicio - bnkExp1 := CurrBank; //Guarda el banco antes de la expresión - if not GetExpressionBool then exit; //Condición - bnkExp2 := CurrBank; //Guarda el banco antes de la expresión - if not CaptureStr('do') then exit; //toma "do" - //Aquí debe estar el cuerpo del "while" - case res.Sto of - stConst: begin //la condición es fija - if res.valBool then begin - //Lazo infinito - if not CompileNoConditionBody(true) then exit; - if not VerifyEND then exit; - _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen - _GOTO(l1); - end else begin - //Lazo nulo. Compila sin generar código. - if not CompileNoConditionBody(false) then exit; - if not VerifyEND then exit; + if (cod<0) or (cod>255) then begin + GenError('Invalid code for char.'); + exit; end; + Result.SetAsConst(typChar); + Result.valInt := cod; + cIn.Next; //Pasa al siguiente + end else if cIn.tokType = tnString then begin //constante cadena + if length(cIn.tok)=2 then begin //Es '' + GenError('Char expected.'); + exit; + end else if length(cIn.tok)>3 then begin //Es 'aaaa...' + GenError('Too long string for a Char.'); + exit; + end; + {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto + Result.SetAsConst(typChar); + Result.valInt := ord(cIn.tok[2]); + cIn.Next; //Pasa al siguiente + end else if (cIn.tokType = tnSysFunct) or //función del sistema + (cIn.tokL = 'bit') or //"bit" es de tipo "tnType" + (cIn.tokL = 'boolean') or //"boolean" es de tipo "tnType" + (cIn.tokL = 'byte') or //"byte" es de tipo "tnType" + (cIn.tokL = 'word') or //"word" es de tipo "tnType" + (cIn.tokL = 'dword') then begin //"dword" es de tipo "tnType" + {Se sabe que es función, pero no se tiene la función exacta porque puede haber + versiones, sobrecargadas de la misma función.} + tmp := UpCase(cIn.tok); //guarda nombre de función + cIn.Next; //Toma identificador + //Busca la función + for xfun in listFunSys do begin + if (Upcase(xfun.name) = tmp) then begin + {Encontró. Llama a la función de procesamiento, quien se encargará de + extraer los parámetros y analizar la sintaxis.} + if xfun.compile<>nil then begin + {LLeva la cuenta de llamadas, solo cuando hay subrutinas. Para funciones + INLINE, no vale la pena, gastar recursos.} + AddCallerTo(xfun); + end; + xfun.procCall(xfun); //Para que devuelva el tipo y codifique el _CALL o lo implemente + //Puede devolver typNull, si no es una función. + Result := res; //copia tipo, almacenamiento y otros campos relevantes + {$IFDEF LogExpres} Result.txt:= tmp; {$ENDIF} //toma el texto + exit; + end; + end; + GenError('Not implemented.'); + end else if cIn.tokType = tnIdentif then begin //puede ser variable, constante, función + GetOperandIdent(Result); + //Puede salir con error. + end else if cIn.tokType = tnBoolean then begin //true o false + {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto + TipDefecBoolean(Result, cIn.tok); //encuentra tipo y valor + if HayError then exit; //verifica + cIn.Next; //Pasa al siguiente + end else if cIn.tok = '(' then begin //"(" + cIn.Next; + Inc(ExprLevel); //cuenta el anidamiento + Result := GetExpression(0); + Dec(ExprLevel); + if HayError then exit; + If cIn.tok = ')' Then begin + cIn.Next; //lo toma + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Result); + Result := res; //notar que se usa "res". + if HayError then exit;; + end; + end Else begin + GenError('Error in expression. ")" expected.'); + Exit; //error + end; +{ end else if (cIn.tokType = tkString) then begin //constante cadena + Result.Sto:=stConst; //constante es Mono Operando + TipDefecString(Result, cIn.tok); //encuentra tipo de número, tamaño y valor + if pErr.HayError then exit; //verifica + if Result.typ = nil then begin + GenError('No hay tipo definido para albergar a esta constante cadena'); + exit; + end; + cIn.Next; //Pasa al siguiente +} + end else if cIn.tokType = tnOperator then begin + {Si sigue un operador puede ser un operador Unario. + El problema que tenemos, es que no sabemos de antemano el tipo, para saber si el + operador aplica a ese tipo como operador Unario Pre. Así que asumiremos que es así, + sino retrocedemos.} + posAct := cIn.PosAct; //Esto puede ser pesado en términos de CPU + oprTxt := cIn.tok; //guarda el operador + cIn.Next; //pasa al siguiente + Op := GetOperand(); //toma el operando. ¡¡¡Importante los peréntesis!!! + if HayError then exit; + //Ahora ya tenemos el tipo. Hay que ver si corresponde el operador + opr := Op.Typ.FindUnaryPreOperator(oprTxt); + if opr = nullOper then begin + {Este tipo no permite este operador Unario (a lo mejor ni es unario)} + cIn.PosAct := posAct; + GenError('Cannot apply the operator "%s" to type "%s"', [oprTxt, Op.Typ.name]); + exit; + end; + //Sí corresponde. Así que apliquémoslo + OperPre(Op, opr); + Result := res; + end else begin + //No se reconoce el operador + GenError('Operand expected.'); end; - stVariab, stExpres: begin - Cod_JumpIfTrue; - _GOTO_PEND(dg); //salto pendiente - if not CompileConditionalBody(bnkEND) then exit; - _BANKSEL(bnkExp1); //asegura que el lazo se ejecutará en el mismo banco de origen - _GOTO(l1); //salta a evaluar la condición - if not VerifyEND then exit; - //ya se tiene el destino del salto - _LABEL(dg); //termina de codificar el salto - end; - end; - CurrBank := bnkExp2; //Este es el banco con que se sale del WHILE end; -procedure TCompiler.CompileFOR; -{Compila uan extructura WHILE} +procedure TCompilerBase.LogExpLevel(txt: string); +{Genera una cadena de registro , considerando el valor de "ExprLevel"} +begin + debugln(space(3*ExprLevel)+ txt ); +end; +function TCompilerBase.IsTheSameBitVar(var1, var2: TxpEleVar): boolean; inline; +{Indica si dos variables bit son la misma, es decir que apuntan, a la misma dirección +física} +begin + Result := (var1.addr0 = var2.addr0) and (var1.bit0 = var2.bit0); +end; +function TCompilerBase.AddCallerTo(elem: TxpElement; callerElem: TxpElement=nil): TxpEleCaller; +{Agregar una llamada a un elemento de la sintaxis. +Agrega información sobre el elemento "llamador", es decir, el elemento que hace +referencia a este elemento. +El elemento llamador es "callerElem". Si no se especifica se asumirá un elemento +llamador por defecto, que debería ser la función/cuerpo desde donde se hace la llamada. +Devuelve la referencia al elemento llamador, cuando es efectiva al agregación.} var - l1: Word; - dg: Integer; - Op1, Op2: TOperand; - opr1: TxpOperator; - bnkFOR: byte; + fc: TxpEleCaller; begin - Op1 := GetOperand; - if Op1.Sto <> stVariab then begin - GenError(ER_VARIAB_EXPEC); - exit; - end; - if HayError then exit; - if (Op1.Typ<>typByte) and (Op1.Typ<>typWord) then begin - GenError(ER_ONL_BYT_WORD); - exit; - end; - cIn.SkipWhites; - opr1 := GetOperator(Op1); //debe ser ":=" - if opr1.txt <> ':=' then begin - GenError(ER_ASIG_EXPECT); + if not FirstPass then begin + //Solo se agregan llamadas en la primera pasada + Result := nil; exit; end; - GetExpressionE(0); - if HayError then exit; - //Ya se tiene la asignación inicial - Oper(Op1, opr1, res); //codifica asignación - if HayError then exit; - if not CaptureStr('to') then exit; - //Toma expresión Final - GetExpressionE(0); - if HayError then exit; - cIn.SkipWhites; - if not CaptureStr('do') then exit; //toma "do" - //Aquí debe estar el cuerpo del "for" - if (res.Sto = stConst) or (res.Sto = stVariab) then begin - //Es un for con valor final de tipo constante - //Se podría optimizar, si el valor inicial es también constante - l1 := _PC; //guarda dirección de inicio - //Codifica rutina de comparación, para salir - opr1 := Op1.Typ.FindBinaryOperator('<='); //Busca operador de comparación - if opr1 = nullOper then begin - GenError('Internal: No operator <= defined for %s.', [Op1.Typ.name]); - exit; - end; - Op2 := res; //Copia porque la operación Oper() modificará res - Oper(Op1, opr1, Op2); //"res" mantiene la constante o variable - Cod_JumpIfTrue; - _GOTO_PEND(dg); //salto pendiente - if not CompileConditionalBody(bnkFOR) then exit; - if not VerifyEND then exit; - //Incrementa variable cursor - if Op1.Typ = typByte then begin - _INCF(Op1.offs, toF); - end else if Op1.Typ = typWord then begin - _BANKSEL(oP1.bank); - _INCF(Op1.Loffs, toF); - _BTFSC(STATUS, _Z); - _INCF(Op1.Hoffs, toF); - end; - _GOTO(l1); //repite el lazo - //ya se tiene el destino del salto - _LABEL(dg); //termina de codificar el salto + fc:= TxpEleCaller.Create; + //Carga información del estado actual del parser + if callerElem = nil then begin + {Por defecto se toma el nodo actual que es el ceurpo de alguna función o el cuerpo + del programa principal.} + fc.caller := TreeElems.curNode; end else begin - GenError('Last value must be Constant or Variable'); - exit; + fc.caller := callerElem; end; + fc.curBnk := CurrBank; + fc.curPos := cIn.ReadSrcPos; + elem.lstCallers.Add(fc); + Result := fc; end; -procedure TCompiler.Tree_AddElement(elem: TxpElement); +function TCompilerBase.AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; +{Versión de AddCallerTo() que agrega además la posición de la llamada, en lugar de usar +la posición actual.} begin - if FirstPass then begin - //Caso normal. Solo aquí dede modificarse el árbol de sintaxis. - end else begin - //Solo se permiet agregar elementos en la primera pasada - GenError('Internal Error: Syntax Tree modified on linking.'); - end; + Result := AddCallerTo(elem); + if Result = nil then exit; + Result.curPos := curPos; //Corrige posición de llamada end; -//Métodos OVERRIDE -procedure TCompiler.TipDefecNumber(var Op: TOperand; toknum: string); -{Procesa constantes numéricas, ubicándolas en el tipo de dato apropiado (byte, word, ... ) - Si no logra ubicar el tipo de número, o no puede leer su valor, generará un error.} +procedure TCompilerBase.Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); +{Ejecuta una operación con dos operandos y un operador. "opr" es el operador de Op1. +El resultado debe devolverse en "res". En el caso de intérpretes, importa el +resultado de la Operación. +En el caso de compiladores, lo más importante es el tipo del resultado, pero puede +usarse también "res" para cálculo de expresiones constantes. +} var - n: int64; //para almacenar a los enteros -// f: extended; //para almacenar a reales -begin - if pos('.',toknum) <> 0 then begin //es flotante - GenError('Unvalid float number.'); //No hay soporte aún para flotantes -// try -// f := StrToFloat(toknum); //carga con la mayor precisión posible -// except -// Op.typ := nil; -// GenError('Unvalid float number.'); -// exit; -// end; -// //busca el tipo numérico más pequeño que pueda albergar a este número -// Op.size := 4; //se asume que con 4 bytes bastará -// {Aquí se puede decidir el tamaño de acuerdo a la cantidad de decimales indicados} -// -// Op.valFloat := f; //debe devolver un extended -// menor := 1000; -// for i:=0 to typs.Count-1 do begin -// { TODO : Se debería tener una lista adicional TFloatTypes, para acelerar la -// búsqueda} -// if (typs[i].cat = t_float) and (typs[i].size>=Op.size) then begin -// //guarda el menor -// if typs[i].size < menor then begin -// imen := i; //guarda referencia -// menor := typs[i].size; -// end; -// end; -// end; -// if menor = 1000 then //no hubo tipo -// Op.typ := nil -// else //encontró -// Op.typ:=typs[imen]; -// - end else begin //es entero - //Intenta convertir la cadena. Notar que se reconocen los formatos $FF y %0101 - if not TryStrToInt64(toknum, n) then begin - //Si el lexer ha hecho bien su trabajo, esto solo debe pasar, cuando el - //número tiene mucHos dígitos. - GenError('Error in number.'); + Operation: TxpOperation; + tmp: String; +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+', Op2='+Op2.txt+' --'); + {$ENDIF} + //Busca si hay una operación definida para: -opr- +//debugln('Op1: cat=%s, typ=%s',[Op1.StoOpStr, Op1.Typ.name]); +//debugln('Op2: cat=%s, typ=%s',[Op2.StoOpStr, Op2.Typ.name]); + Operation := opr.FindOperation(Op2.Typ); + if Operation = nil then begin + tmp := '(' + Op1.Typ.name + ') '+ opr.txt; + tmp := tmp + ' ('+Op2.Typ.name+')'; + GenError('Illegal Operation: %s', + [tmp]); exit; end; - Op.valInt := n; //copia valor de constante entera - {Asigna un tipo, de acuerdo al rango. Notar que el tipo más pequeño, usado - es el byte, y no el bit.} - if (n>=0) and (n<=255) then begin - Op.SetAsConst(typByte); - end else if (n>= 0) and (n<=$FFFF) then begin - Op.SetAsConst(typWord); - end else if (n>= 0) and (n<=$FFFFFFFF) then begin - Op.SetAsConst(typDWord); - end else begin //no encontró - GenError(ER_NOTYPDEF_NU); - Op.SetAsNull; + {Llama al evento asociado con p1 y p2 como operandos. } + p1 := @Op1; p2 := @Op2; { Se usan punteros por velocidad. De otra forma habría que + copiar todo el objeto.} + {Ejecuta la operación. + Los parámetros de entrada se dejan en p1 y p2. El resultado debe dejarse en "res"} + Operation.proc(Operation, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+Op1.catOpChr + ' ' + opr.txt + ' ' + Op2.catOpChr+') -> ' + + res.catOpChr); + res.txt := Op1.txt + ' ' + opr.txt + ' ' + Op2.txt; //texto de la expresión + {$ENDIF} +End; +procedure TCompilerBase.OperPre(var Op1: TOperand; opr: TxpOperator); +{Ejecuta una operación con un operando y un operador unario de tipo Pre. "opr" es el +operador de Op1. +El resultado debe devolverse en "res".} +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+' --'); + {$ENDIF} + if opr.OperationPre = nil then begin + GenError('Illegal Operation: %s', + [opr.txt + '('+Op1.Typ.name+')']); + exit; end; - end; + {Llama al evento asociado con p1 como operando. } + p1 := @Op1; {Solo hay un parámetro} + {Ejecuta la operación. El resultado debe dejarse en "res"} + opr.OperationPre(opr, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+ opr.txt + ' ' + Op1.catOpChr+ ') -> ' + res.catOpChr); + res.txt := opr.txt + Op1.txt; + {$ENDIF} end; -procedure TCompiler.TipDefecString(var Op: TOperand; tokcad: string); -//Devuelve el tipo de cadena encontrado en un token -//var -// i: Integer; -begin -{ Op.catTyp := t_string; //es cadena - Op.size:=length(tokcad); - //toma el texto - Op.valStr := copy(cIn.tok,2, length(cIn.tok)-2); //quita comillas - //////////// Verifica si hay tipos string definidos //////////// - if length(Op.valStr)=1 then begin - Op.typ := tipChr; - end else - Op.typ :=nil; //no hay otro tipo} -end; -procedure TCompiler.TipDefecBoolean(var Op: TOperand; tokcad: string); -//Devuelve el tipo de cadena encontrado en un token -begin - //convierte valor constante - Op.SetAsConst(typBool); - Op.valBool:= (tokcad[1] in ['t','T']); -end; -//Rutinas para la compilación y enlace -procedure TCompiler.CompileProcBody(fun: TxpEleFun); -{Compila el cuerpo de un procedimiento} -begin - StartCodeSub(fun); //Inicia codificación de subrutina - CompileInstruction; - if HayError then exit; - if fun.IsInterrupt then begin - //Las interrupciones terminan así - _RETFIE - end else begin - //Para los procedimeintos, podemos terminar siemrpe con un RETURN u optimizar, - if OptRetProc then begin - //Verifica es que ya se ha incluido exit(). - if fun.ObligatoryExit<>nil then begin - //Ya tiene un exit() obligatorio y en el final (al menos eso se espera) - //No es necesario incluir el RETURN(). - end else begin - //No hay un exit(), seguro - _RETURN(); //instrucción de salida - end; - end else begin - _RETURN(); //instrucción de salida +procedure TCompilerBase.OperPost(var Op1: TOperand; opr: TxpOperator); +{Ejecuta una operación con un operando y un operador unario de tipo Post. "opr" es el +operador de Op1. +El resultado debe devolverse en "res".} +begin + {$IFDEF LogExpres} + LogExpLevel('-- Op1='+Op1.txt+' --'); + {$ENDIF} + if opr.OperationPost = nil then begin + GenError('Illegal Operation: %s', + ['('+Op1.Typ.name+')' + opr.txt]); + exit; end; - end; - EndCodeSub; //termina codificación - {Fija banco al terminar de codificar. Si no se modificó el banco en la compilación - (como en un procedimiento vacío) CurrBank, contiene el banco que se fijó antes de - llamar a CompileProcBody(), que es: - Siemrpe 0 -> en la primera pasada. - Un valor calculado -> en la segund pasada.} - fun.finBnk := CurrBank; //Banco al terminar de codificar - //Calcula tamaño - fun.srcSize := pic.iFlash - fun.adrr; -end; -function TCompiler.OpenContextFrom(filePath: string): boolean; -{Abre un contexto con el archivo indicado. Si lo logra abrir, devuelve TRUE.} + {Llama al evento asociado con p1 como operando. } + p1 := @Op1; {Solo hay un parámetro} + {Ejecuta la operación. El resultado debe dejarse en "res"} + opr.OperationPost(opr, true); //Llama normalmente + //Completa campos de "res", si es necesario + {$IFDEF LogExpres} + LogExpLevel('Oper('+Op1.catOpChr+ ' ' +opr.txt +') -> ' + res.catOpChr); + res.txt := Op1.txt + opr.txt; //indica que es expresión + {$ENDIF} +end; +function TCompilerBase.OperationStr(Opt: TxpOperation): string; +{Devuelve una cadena indicando los tipos/alacenamiento y la operación, que se tiene +en "p1", "p2" y "Opt".} var - strList: TStrings; -begin - //Primero ve si puede obteenr acceso directo al contenido del archivo - if OnRequireFileString<>nil then begin - //Hace la consulta a través del evento - strList := nil; - OnRequireFileString(filePath, strList); - if strList=nil then begin - //No hay acceso directo al contenido. Carga de disco - //debugln('>disco:'+filePath); - cIn.MsjError := ''; - cIn.NewContextFromFile(filePath); - Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. - end else begin - //Nos están dando el acceso al contenido. Usamos "strList" - cIn.NewContextFromFile(filePath, strList); - Result := true; - end; - end else begin - //No se ha establecido el evento. Carga de disco - //debugln('>disco:'+filePath); - cIn.MsjError := ''; - cIn.NewContextFromFile(filePath); - Result := cIn.MsjError=''; //El único error es cuando no se encuentra el archivo. - end; + type1, type2: TxpEleType; + Operat: TxpOperator; +begin + type1 := Opt.parent.parent; + type2 := Opt.ToType; + Operat:= Opt.parent; + Result := p1^.StoOpStr+' '+type1.name + ' ' + Operat.txt + ' ' + p2^.StoOpStr+' '+type2.name; +end; +function TCompilerBase.stoOperation: TStoOperandsROB; +begin + //Combinación de los almacenamientos de los operandos + Result := TStoOperandsROB((Ord(p1^.Sto) << 3) or ord(p2^.Sto)); end; -//Compilación de secciones -procedure TCompiler.CompileGlobalConstDeclar; +function TCompilerBase.GetOperandPrec(pre: integer): TOperand; +//Toma un operando realizando hasta encontrar un operador de precedencia igual o menor +//a la indicada var - consNames: array of string; //nombre de variables - cons: TxpEleCon; - srcPosArray: TSrcPosArray; - i: integer; -begin - //procesa lista de constantes a,b,cons ; - getListOfIdent(consNames, srcPosArray); - if HayError then begin //precisa el error - GenError(ER_IDE_CON_EXP); - exit; - end; - //puede seguir "=" o identificador de tipo - if cIn.tok = '=' then begin - cIn.Next; //pasa al siguiente - //Debe seguir una expresiócons constante, que no genere consódigo - GetExpressionE(0); - if HayError then exit; - if res.Sto <> stConst then begin - GenError(ER_CON_EXP_EXP); - end; - //Hasta aquí todo bien, crea la(s) constante(s). - for i:= 0 to high(consNames) do begin - //crea constante - cons := CreateCons(consNames[i], res.Typ); - cons.srcDec := srcPosArray[i]; //guarda punto de declaración - if not TreeElems.AddElement(cons) then begin - GenErrorPos(ER_DUPLIC_IDEN, [cons.name], cons.srcDec); - cons.Destroy; //hay una constante creada - exit; - end; - res.CopyConsValTo(cons); //asigna valor - end; -// end else if cIn.tok = ':' then begin - end else begin - GenError(ER_EQU_COM_EXP); + Op1: TOperand; + Op2: TOperand; + opr: TxpOperator; + pos: TPosCont; +begin + {$IFDEF LogExpres} +// LogExpLevel('GetOperandP('+IntToStr(pre)+')'); + {$ENDIF} + Op1 := GetOperand; //toma el operador + if HayError then exit; + //verifica si termina la expresion + pos := cIn.PosAct; //Guarda por si lo necesita + cIn.SkipWhites; + opr := GetOperator(Op1); + if opr = nil then begin //no sigue operador + Result:=Op1; + end else if opr=nullOper then begin //hay operador pero, .. + //no está definido el operador siguente para el Op1, (no se puede comparar las + //precedencias) asumimos que aquí termina el operando. + cIn.PosAct := pos; //antes de coger el operador + GenError('Undefined operator: %s for type: %s', [opr.txt, Op1.Typ.name]); exit; - end; - if not CaptureDelExpres then exit; - ProcComments; - //puede salir con error -end; -function TCompiler.GetAdicVarDeclar(out IsBit: boolean): TAdicVarDec; -{Verifica si lo que sigue es la sintaxis ABSOLUTE ... . Si esa así, procesa el texto, -pone "IsAbs" en TRUE y actualiza los valores "absAddr" y "absBit". } - function ReadAddres(tok: string): word; - {Lee una dirección de RAM a partir de una cadena numérica. - Puede generar error.} - var - n: LongInt; - begin - //COnvierte cadena (soporta binario y hexadecimal) - if not TryStrToInt(tok, n) then begin - //Podría fallar si es un número muy grande - GenError(ER_INV_MEMADDR); - {%H-}exit; - end; - if (n<0) or (n>$ffff) then begin - //Debe set Word - GenError(ER_INV_MEMADDR); - {%H-}exit; - end; - Result := n; - if not pic.ValidRAMaddr(Result) then begin - GenError(ER_INV_MAD_DEV); - {%H-}exit; - end; - end; - function ReadAddresBit(tok: string): byte; - {Lee la parte del bit de una dirección de RAM a partir de una cadena numérica. - Puede generar error.} - var - n: Longint; - begin - if not TryStrToInt(tok, n) then begin - GenError(ER_INV_MEMADDR); - {%H-}exit; - end; - if (n<0) or (n>7) then begin - GenError(ER_INV_MEMADDR); - {%H-}exit; +// Result:=Op1; + end else begin //si está definido el operador (opr) para Op1, vemos precedencias + If opr.prec > pre Then begin //¿Delimitado por precedencia de operador? + //es de mayor precedencia, se debe Oper antes. + Op2 := GetOperandPrec(pre); //toma el siguiente operando (puede ser recursivo) + if HayError then exit; + Oper(Op1, opr, Op2); //devuelve en "res" + Result:=res; + End else begin //la precedencia es menor o igual, debe salir + cIn.PosAct := pos; //antes de coger el operador + Result:=Op1; end; - Result := n; //no debe fallar end; +end; +function TCompilerBase.GetOperator(const Op: Toperand): TxpOperator; +{Busca la referencia a un operador de "Op", leyendo del contexto de entrada +Si no encuentra un operador en el contexto, devuelve NIL, pero no lo toma. +Si el operador encontrado no se aplica al operando, devuelve nullOper.} +begin + if cIn.tokType <> tnOperator then exit(nil); + //Hay un operador + Result := Op.Typ.FindBinaryOperator(cIn.tok); + if Result = nullOper then begin + //No lo encontró, puede ser oeprador unario + Result := Op.Typ.FindUnaryPostOperator(cIn.tok); + end; + cIn.Next; //toma el token +end; +function TCompilerBase.GetExpression(const prec: Integer): TOperand; //inline; +{Analizador de expresiones. Esta es probablemente la función más importante del + compilador. Procesa una expresión en el contexto de entrada llama a los eventos + configurados para que la expresión se evalúe (intérpretes) o se compile (compiladores). + Devuelve un operando con información sobre el resultado de la expresión.} var - xvar: TxpEleVar; - n: integer; - Op: TOperand; -begin - Result.srcDec := cIn.PosAct; //Posición de inicio de posibles parámetros adic. - Result.isAbsol := false; //Bandera - Result.absVar := nil; //Por defecto - if (cIn.tokL <> 'absolute') and (cIn.tok <> '@') then begin - exit; //no es variable absoluta + Op1, Op2 : TOperand; //Operandos + opr1: TxpOperator; //Operadores + p: TPosCont; +begin + //----------------coger primer operando------------------ + Op1 := GetOperand; + if HayError then exit; + //Verifica si termina la expresion + cIn.SkipWhites; + p := cIn.PosAct; //por si necesita volver + opr1 := GetOperator(Op1); + if opr1 = nil then begin //no sigue operador + //Expresión de un solo operando. Lo carga por si se necesita + //Oper(Op1); + Result:=Op1; + exit; //termina ejecucion + end; + //------- sigue un operador --------- + //verifica si el operador aplica al operando + if opr1 = nullOper then begin + GenError('Undefined operator: %s for type: %s', [opr1.txt, Op1.Typ.name]); + exit; end; - //// Hay especificación de dirección absoluta //// - Result.isAbsol := true; //marca bandera - cIn.Next; - ProcComments; - if cIn.tokType = tnNumber then begin - if (cIn.tok[1]<>'$') and ((pos('e', cIn.tok)<>0) or (pos('E', cIn.tok)<>0)) then begin - //La notación exponencial, no es válida. - GenError(ER_INV_MEMADDR); + //inicia secuencia de lectura: + while opr1<>nil do begin + //¿Delimitada por precedencia? + If opr1.prec<= prec Then begin //es menor que la que sigue, expres. + Result := Op1; //solo devuelve el único operando que leyó + cIn.PosAct := p; //vuelve exit; - end; - n := pos('.', cIn.tok); //no debe fallar - if n=0 then begin - //Número entero sin parte decimal - Result.absAddr := ReadAddres(cIn.tok); - cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." - //Puede que siga la parte de bit - if cIn.tok = '.' then begin - cIn.Next; - IsBit := true; //Tiene parte de bit - Result.absBit := ReadAddresBit(cIn.tok); //Parte decimal - cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." - end else begin - IsBit := false; //No tiene parte de bit + End; + if opr1.OperationPost<>nil then begin //Verifica si es operación Unaria + OperPost(Op1, opr1); + if HayError then exit; + Op1 := res; + cIn.SkipWhites; + //Verificación + if (cIn.tok = '.') or (cIn.tok = '[') then begin + IdentifyField(Op1); + if HayError then exit;; + Op1 := res; //notar que se usa "res". + cIn.SkipWhites; end; - end else begin - //Puede ser el formato ., en un solo token, que es válido. - IsBit := true; //Se deduce que tiene punto decimal - //Ya sabemos que tiene que ser decimal, con punto - Result.absAddr := ReadAddres(copy(cIn.tok, 1, n-1)); - //Puede haber error - Result.absBit := ReadAddresBit(copy(cIn.tok, n+1, 100)); //Parte decimal - cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." - end; - end else if cIn.tokType = tnIdentif then begin - //Puede ser variable - GetOperandIdent(Op); // + p := cIn.PosAct; //actualiza por si necesita volver + //Verifica operador + opr1 := GetOperator(Op1); + continue; + end; + //--------------------coger segundo operando-------------------- +// Op2 := GetOperandPrec(Opr1.prec); //toma operando con precedencia + Op2 := GetExpression(Opr1.prec); //toma operando con precedencia if HayError then exit; - if Op.Sto <> stVariab then begin - GenError(ER_EXP_VAR_IDE); - cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." - exit; - end; - //Mapeado a variable. Notar que puede ser una variable temporal, si se usa: .0 - xvar := Op.rVar; - if Op.rVarBase=nil then begin - Result.absVar := Op.rVar; //Guarda referencia - end else begin - {Es un caso como ".0", conviene devolver la referencia a , - en lugar de a la variable ".0", considerando que: - * GetOperandIdent() usa , para registrar la llamada. - * Esta referencia se usará luego para ver variables no usadas en - TCompiler.CompileLinkProgram().} - Result.absVar := Op.rVarBase; //Guarda referencia - end; - //Ya tiene la variable en "xvar". - if xvar.typ.IsBitSize then begin //boolean o bit - IsBit := true; //Es una dirección de bit - Result.absAddr := xvar.addr; //debe ser absoluta - Result.absBit := xvar.adrBit.bit; - end else begin - //Es cualquier otra variable, que no sea bit. Se intentará - IsBit := false; //Es una dirección normal (byte) - Result.absAddr := xvar.addr; //debe ser absoluta - end; - if Result.absAddr = ADRR_ERROR then begin - //No se puede obtener la dirección. - GenError('Cannot locate variable at: %s', [xvar.name]); -// GenError('Internal Error: TxpEleVar.AbsAddr.'); - exit; - end; - end else begin //error - GenError(ER_NUM_ADD_EXP); - cIn.Next; //pasa siempre - exit; - end; + //prepara siguiente operación + Oper(Op1, opr1, Op2); //evalua resultado en "res" + Op1 := res; + if HayError then exit; + cIn.SkipWhites; + opr1 := GetOperator(Op1); {lo toma ahora con el tipo de la evaluación Op1 (opr1) Op2 + porque puede que Op1 (opr1) Op2, haya cambiado de tipo} + end; //hasta que ya no siga un operador + Result := Op1; //aquí debe haber quedado el resultado end; -procedure TCompiler.array_length(const OpPtr: pointer); -//Devuelve la cantidad de elementos de un arreglo -var - Op: ^TOperand; - xvar: TxpEleVar; -begin - cIn.Next; //Toma identificador de campo - Op := OpPtr; - case Op^.Sto of - stVariab: begin - xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY - //Se devuelve una constante, byte - res.SetAsConst(typByte); - res.valInt := xvar.typ.arrSize; - end; - else - GenError('Syntax error.'); - end; +procedure TCompilerBase.GetExpressionE(const prec: Integer; + posExpres: TPosExpres); +{Se usa para compilar expresiones completas, no subexpresiones. +Toma una expresión del contexto de entrada y devuelve el resultado em "res". +"isParam" indica que la expresión evaluada es el parámetro de una función.} +begin + Inc(ExprLevel); //cuenta el anidamiento + {$IFDEF LogExpres} LogExpLevel('>Inic.expr'); {$ENDIF} + if OnExprStart<>nil then OnExprStart; //llama a evento + res := GetExpression(prec); + if HayError then exit; + if OnExprEnd<>nil then OnExprEnd(posExpres); //llama al evento de salida + {$IFDEF LogExpres} LogExpLevel('>Fin.expr'); {$ENDIF} + Dec(ExprLevel); + {$IFDEF LogExpres} + if ExprLevel = 0 then debugln(''); + {$ENDIF} end; -procedure TCompiler.array_high(const OpPtr: pointer); -//Devuelve el índice máximo de un arreglo -var - Op: ^TOperand; - xvar: TxpEleVar; -begin - cIn.Next; //Toma identificador de campo - Op := OpPtr; - case Op^.Sto of - stVariab: begin - xvar := Op^.rVar; //Se supone que debe ser de tipo ARRAY - //Se devuelve una constante, byte - res.SetAsConst(typByte); - res.valInt {%H-}:= xvar.typ.arrSize-1; - end; - else - GenError('Syntax error.'); +procedure TCompilerBase.LoadToRT(Op: TOperand; modReturn: boolean = false); +{Carga un operando a los Registros de Trabajo (RT). +El parámetrto "modReturn", indica que se quiere generar un RETURN, dejando en ls RT +el valor de la expresión.} +begin + if Op.Typ.OnLoadToRT=nil then begin + //No implementado + GenError('Not implemented.'); + end else begin + Op.Typ.OnLoadToRT(@Op, modReturn); end; end; -procedure TCompiler.array_low(const OpPtr: pointer); -//Devuelve el índice mínimo de un arreglo -var - Op: ^TOperand; -begin - cIn.Next; //Toma identificador de campo - Op := OpPtr; - case Op^.Sto of - stVariab: begin - //Se devuelve una constante, byte - res.SetAsConst(typByte); - res.valInt := 0; //por ahora siempre inicia en 0 - end; - else - GenError('Syntax error.'); - end; +//Accesos a propiedades de p1^ y p2^. +function TCompilerBase.value1: dword; inline; +begin + Result := p1^.valInt; end; -procedure TCompiler.ArrayDeclaration(out itemTyp: TxpEleType; out nEle: integer); -{Compila una declaración de arreglo.} -var - varType: String; +function TCompilerBase.value1L: word; inline; begin - cIn.Next; //lo toma - cIn.SkipWhites; - if not CaptureTok('[') then exit; - cIn.SkipWhites; - if cIn.tokType = tnNumber then begin - //Intenta obtener valor - if not TryStrToInt(cIn.tok, nEle) then begin - //Podría fallar si es un número muy grande o exponencial - GenError(ER_ERR_IN_NUMB); - exit; - end; - cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." - //Verifica si hay memoria para este arreglo - - -// end else if cIn.tokType = tnIdentif then begin -// //Puede ser variable -// GetOperandIdent(Op); -// if HayError then exit; -// if Op.catOp <> stVariab then begin -// GenError(ER_EXP_VAR_IDE); -// cIn.Next; //Pasa con o sin error, porque esta rutina es "Pasa siempre." -// exit; -// end; -// //Es variable. Notar que puede ser una variable temporal, si se usa: .0 -// xvar := Op.rVar; -// //Ya tiene la variable en "xvar". -// if xvar.typ.IsSizeBit then begin //boolean o bit -// IsBit := true; //Es una dirección de bit -// Result.absAddr := xvar.AbsAddr; //debe ser absoluta -// Result.absBit := xvar.adrBit.bit; -// end else begin -// IsBit := false; //Es una dirección normal (byte) -// Result.absAddr := xvar.AbsAddr; //debe ser absoluta -// end; -// if Result.absAddr = ADRR_ERROR then begin -// //No se implemento el tipo. No debería pasar. -// GenError('Internal Error: TxpEleVar.AbsAddr.'); -// exit; -// end; - end else begin //error - GenError(ER_INV_ARR_SIZ); - cIn.Next; //pasa siempre - exit; - end; - if not CaptureTok(']') then exit; - //Ya se tiene el tamaño del arreglo - cIn.SkipWhites; - if not CaptureStr('of') then exit; - cIn.SkipWhites; - if (cIn.tokType <> tnType) then begin - GenError(ER_IDE_TYP_EXP); - exit; - end; - varType := cIn.tok; //lee tipo - cIn.Next; - cIn.SkipWhites; - //Valida el tipo - itemTyp := FindSysEleType(varType); - if itemTyp = nil then begin - GenError(ER_UNDEF_TYPE_, [varType]); - exit; - end; - if (nEle<0) or (nEle>$FF) then begin - //Límite físico - GenError(ER_ARR_SIZ_BIG); - exit; + Result := p1^.LByte; +end; +function TCompilerBase.value1H: word; inline; +begin + Result := p1^.HByte; +end; +function TCompilerBase.value1U: word; inline; +begin + Result := p1^.UByte; +end; +function TCompilerBase.value1E: word; inline; +begin + Result := p1^.EByte; +end; +function TCompilerBase.value2: dword; inline; +begin + Result := p2^.valInt; +end; +function TCompilerBase.value2L: word; inline; +begin + Result := p2^.LByte; +end; +function TCompilerBase.value2H: word; inline; +begin + Result := p2^.HByte; +end; +function TCompilerBase.byte1: TPicRegister; inline; +begin + Result := p1^.rVar.adrByte0; +end; +function TCompilerBase.byte1L: TPicRegister; inline; +begin + Result := p1^.rVar.adrByte0; +end; +function TCompilerBase.byte1H: TPicRegister; inline; +begin + Result := p1^.rVar.adrByte1; +end; +function TCompilerBase.byte1E: TPicRegister; +begin + Result := p1^.rVar.adrByte2; +end; +function TCompilerBase.byte1U: TPicRegister; +begin + Result := p1^.rVar.adrByte3; +end; +function TCompilerBase.byte2: TPicRegister; inline; +begin + Result := p2^.rVar.adrByte0; +end; +function TCompilerBase.byte2L: TPicRegister; inline; +begin + Result := p2^.rVar.adrByte0; +end; +function TCompilerBase.byte2H: TPicRegister; inline; +begin + Result := p2^.rVar.adrByte1; +end; +function TCompilerBase.byte2E: TPicRegister; +begin + Result := p2^.rVar.adrByte2; +end; +function TCompilerBase.byte2U: TPicRegister; +begin + Result := p2^.rVar.adrByte3; +end; +function TCompilerBase.bit1: TPicRegisterBit; inline; +begin + Result := p1^.rVar.adrBit; +end; +function TCompilerBase.bit2: TPicRegisterBit; inline; +begin + Result := p2^.rVar.adrBit; +end; +//Manejo de errores y advertencias +procedure TCompilerBase.ClearError; +{Limpia la bandera de errores. Tomar en cuenta que solo se debe usar para iniciar el +procesamiento de errores. Limpiar errores en medio de la compilación, podría hacer que +se pierda el rastro de errores anteriores, y que inclusive, la compilación termine sin +error, aún cuando haya generado errores intermedios. +Como norma, se podría decir que solo se debe usar, después de haber proecsado un posible +error anterior.} +begin + HayError := false; +end; +procedure TCompilerBase.GenInfo(msg: string); +begin + if OnInfo<>nil then OnInfo(msg); +end; +procedure TCompilerBase.GenWarn(msg: string; fil: String; row, col: integer); +{Genera un mensaje de advertencia en la posición indicada.} +begin + if OnWarning<>nil then OnWarning(msg, fil, row, col); +end; +procedure TCompilerBase.GenWarn(msg: string; const Args: array of const; + fil: String; row, col: integer); +begin + GenWarn(Format(msg, Args), fil, row, col); +end; +procedure TCompilerBase.GenWarn(msg: string); +{Genera un mensaje de Advertencia, en la posición actual del contexto. } +begin + if (cIn = nil) or (cIn.curCon = nil) then begin + GenWarn(msg, '', -1, -1); + end else begin + GenWarn(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); end; - //Ya se tiene el tipo - //¿Y si es bit? -// totSize := nEle * itemTyp.size; //tamaño en bytes - end; -procedure TCompiler.CompileTypeDeclar(IsInterface: boolean; typName: string = ''); -{Compila la sección de declaración de un tipo, y genera un elemento TxpEleType, en el -árbol de sintaxis. -Si se especifica typName, se obvia la extracción de la parte " nombreTipo = ", y se -toma el nombre indicado.} -var - etyp, systyp, itemTyp, reftyp: TxpEleType; - srcpos: TSrcPos; - nEle: integer; +procedure TCompilerBase.GenWarn(msg: string; const Args: array of const); +{Genera un mensaje de Advertencia, en la posición actual del contexto. } begin - ProcComments; - if cIn.tokType <> tnIdentif then begin - GenError(ER_IDEN_EXPECT); + GenWarn(Format(msg, Args)); +end; +procedure TCompilerBase.GenWarnPos(msg: string; const Args: array of const; + srcPos: TSrcPos); +begin + GenWarn(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); +end; +//Rutinas de generación de error +procedure TCompilerBase.GenError(msg: string; fil: String; row, col: integer); +{Genera un mensaje de error en la posición indicada.} +begin + //Protección + if cIn.curCon = nil then begin + HayError := true; exit; end; - //hay un identificador - srcpos := cIn.ReadSrcPos; - typName := cIn.tok; - cIn.Next; - ProcComments; - if not CaptureTok('=') then exit; - ProcComments; - //Analiza el tipo declarado - if (cIn.tokType = tnType) then begin - //Caso normal. Es un tipo del sistema - systyp := FindSysEleType(cIn.tok); //Busca elemento - if systyp = nil then begin - //Esto no debería pasar, porque el lexer indica que es un tipo del sistema. - GenError(ER_NOT_IMPLEM_, [typName]); - exit; - end; - //Encontró al tipo del sistema - cIn.Next; //lo toma - etyp := AddType(typName, srcpos); - if HayError then exit; //Sale para ver otros errores - {Crea la copia del tipo del sistema, que básicamente es el mismo tipo, solo que - con otro nombre y que además, ahora, está en el árbol de sintaxis, por lo tanto - tiene otras reglas de alcance.} - etyp.copyOf := systyp; //Indica que es una copia - etyp.catType := systyp.catType; //tctAtomic. No debería ser necesario - etyp.InInterface := IsInterface; //No debería ser necesario - end else if cIn.tokL = 'array' then begin - //Es un arreglo - ArrayDeclaration(itemTyp, nEle); - if HayError then exit; //Sale para ver otros errores - //Es una declaración de arreglo - etyp := AddType(typName, srcpos); - if HayError then exit; //Sale para ver otros errores - etyp.catType := tctArray; //Tipo arreglo - etyp.arrSize := nEle; //Número de ítems - etyp.refType := itemTyp; //Tipo de dato - etyp.InInterface := IsInterface; //No debería ser necesario - //Crea campos comunes del arreglo - etyp.CreateField('length', @array_length); - etyp.CreateField('high', @array_high); - etyp.CreateField('low', @array_low); - //Campos que dependen del tipo - if itemTyp.OnGetItem=nil then begin - GenError('Cannot declare array of type: %s', [itemTyp.name]); - end; - etyp.CreateField('item', itemTyp.OnGetItem); - if itemTyp.OnClearItems <> nil then begin - etyp.CreateField('clear' , itemTyp.OnClearItems); - end; - end else if cIn.tok = '^' then begin - //Es un puntero - cIn.Next; - //Por ahora solo permitiremos identificadores de tipos - reftyp := FindSysEleType(cIn.tok); //Busca elemento - if reftyp = nil then begin - //No es un tipo del sistema, pero puede ser un tipo prdefinido - reftyp := TreeElems.FindType(cIn.tok); //Busca elemento - if reftyp = nil then begin - GenError('Expected a type identifier.', [typName]); - exit; - end; - end; - //Encontró un tipo - cIn.Next; //lo toma - etyp := AddType(typName, srcpos); //Crae el elemento tipo - if HayError then exit; //Sale para ver otros errores - etyp.catType := tctPointer; //Tipo puntero - etyp.refType := reftyp; //El tipo a donde apunta - etyp.InInterface := IsInterface; //No debería ser necesario - //Fija operaciones para la aritmética del puntero - DefPointerArithmetic(etyp); - etyp.CreateUnaryPostOperator('^',6,'deref', @ROU_derefPointer); //dereferencia + if cIn.curCon.FixErrPos then begin + //El contexto actual, tiene configurado uan posición fija para los errores + msg := cIn.curCon.PreErrorMsg + msg; //completa mensaje + if OnError<>nil then OnError(msg, cIn.curCon.ErrPosition.fil, + cIn.curCon.ErrPosition.row, + cIn.curCon.ErrPosition.col); end else begin - GenError(ER_IDE_TYP_EXP); - exit; + if OnError<>nil then OnError(msg, fil, row, col); end; - - if not CaptureDelExpres then exit; - ProcComments; - //puede salir con error + HayError := true; end; -function TCompiler.GetTypeVarDeclar: TxpEleType; -{Extrae la sección de tipo de la declaración de una variable, y devuelve la referencia -al elemento TxpEleType correspondiente. -Si encuentra algún problema, genera error, y devuelve NIL. -Todas las variables y constantes tienen un tipo asociado. - -* En los casos de tipos simples como: bit, byte o word, se devuelve la referencia, al -tipo del sistema, almacenado en "listTypSys": -VAR - a, b: byte; - c: bit; - -* En los casos de tipos definidos en la declaración, se crea una nueva definición de tipo -y se agrega al árbol de sintaxis: -VAR - a, b: array[0..5] of char; //Se crea nuevo tipo: "array[0..5] of char" - -* Para los casos de tipos con nombre, simplemente se devuelve la referencia al tipo que -debe estar creado en el árbol de sintaxis: -VAR - a, b: MiTipo; -} -var - systyp: TxpEleType; - typName: String; - typ: TxpEleType; - ele: TxpElement; +procedure TCompilerBase.GenError(msg: String; const Args: array of const; + fil: String; row, col: integer); +{Versión con parámetros de GenError.} begin - Result := nil; - ProcComments; - typName := cIn.tok; //Nombre de tipo - //Primero verifica si es un tipo del sistema - systyp := FindSysEleType(typName); //tipos básicos - if systyp<>nil then begin - //Caso normal. Es un tipo del sistema - cIn.Next; //lo toma - ProcComments; - exit(systyp); //devuelve la referencia - end else if cIn.tokType = tnIdentif then begin - //Puede ser identificador de tipo - {Se pensó usar GetOperandIdent(), para identificar al tipo, pero no está preparado - para procesar tipos y no se espera tanta flexibilidad. Así que se hace "a mano".} - ele := TreeElems.FindFirst(cIn.tok); - if ele = nil then begin - //No identifica a este elemento - GenError('Unknown identifier: %s', [cIn.tok]); - exit(nil); - end; - if ele.idClass = eltType then begin - typ := TxpEleType(ele); - AddCallerTo(typ); //lleva la cuenta - cIn.Next; //lo toma - ProcComments; - exit(typ); - end else begin - GenError(ER_IDE_TYP_EXP); - exit(nil); - end; -// end else if cIn.tokL = 'array' then begin -// //Es un arreglo -// ArrayDeclaration(itemTyp, nEle); -// {%H-}exit; //puede salir con error + GenError(Format(msg, Args), fil, row, col); +end; +procedure TCompilerBase.GenError(msg: string); +{Función de acceso rápido para Perr.GenError(). Pasa como posición a la posición +del contexto actual. Realiza la traducción del mensaje también.} +begin + if (cIn = nil) or (cIn.curCon = nil) then begin + GenError(msg, '', -1, -1); end else begin - GenError(ER_IDE_TYP_EXP); - exit(nil); + GenError(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); end; end; -procedure TCompiler.CompileVarDeclar(IsInterface: boolean = false); -{Compila la declaración de variables en el nodo actual. -"IsInterface", indica el valor que se pondrá al as variables, en la bandera "IsInterface" } +procedure TCompilerBase.GenError(msg: String; const Args: array of const); +{Genera un mensaje de error eb la posición actual del contexto.} +begin + GenError(Format(msg, Args)); +end; +procedure TCompilerBase.GenErrorPos(msg: String; const Args: array of const; + srcPos: TSrcPos); +{Genera error en una posición específica del código} +begin + GenError(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); +end; + +function TCompilerBase.ExpandRelPathTo(BaseFile, FileName: string): string; +{Convierte una ruta relativa (FileName), a una absoluta, usnado como base la ruta de +otro archivo (BaseFile)} var - varNames: array of string; //nombre de variables - IsBit: Boolean; - srcPosArray: TSrcPosArray; - i: Integer; - xvar: TxpEleVar; - adicVarDec: TAdicVarDec; - typEleDec: TxpEleType; -begin - //Procesa variables a,b,c : int; - getListOfIdent(varNames, srcPosArray); - if HayError then begin //precisa el error - GenError(ER_EXP_VAR_IDE); - exit; - end; - //usualmente debería seguir ":" - if cIn.tok = ':' then begin - //Debe seguir, el tipo de la variable - cIn.Next; //lo toma - ProcComments; - //Lee el tipo de la variable - typEleDec := GetTypeVarDeclar; - //Lee información aicional de la declaración (ABSOLUTE) - adicVarDec := GetAdicVarDeclar(IsBit); - if HayError then exit; - if adicVarDec.isAbsol then begin //valida tamaño - //Es una declaración ABSOLUTE - if typEleDec.IsBitSize and (not Isbit) then begin - //Se esperaba un bit, en el ABSOLUTE. - GenError(ER_INV_MEMADDR); - end; - if not typEleDec.IsBitSize and IsBit then begin - {En realidad se podría aceptar posicionar un byte en una variable bit, - posicionándolo en su byte contenedor.} - GenError(ER_INV_MEMADDR); - end; - end; - if HayError then exit; - {Elimina la llamada agregada a la variable, porque se van a agregar llamadas más - específicas desde la(s) varaible(s) declaradas.} - if adicVarDec.absVar<>nil then begin - adicVarDec.absVar.RemoveLastCaller; - end; - //Reserva espacio para las variables - for i := 0 to high(varNames) do begin - xvar := AddVariable(varNames[i], typEleDec, srcPosArray[i]); - if HayError then break; //Sale para ver otros errores - xvar.adicPar := adicVarDec; //Actualiza propiedades adicionales - xvar.InInterface := IsInterface; //Actualiza bandera - {Técnicamente, no sería necesario, asignar RAM a la variable aquí (y así se - optimizaría), porque este método, solo se ejecuta en la primera pasada, y no - es vital tener las referencias a memoria, en esta pasada. - Pero se incluye la ásignación de RAM, por: - * Porque el acceso con directivas, a variables del sistema como "CurrBank", - se hace en la primera pasada, y es necesario que estas variables sean válidas. - * Para tener en la primera pasada, un código más similar al código final.} - CreateVarInRAM(xvar); //Crea la variable - //Agrega la llamada, específica, desde esta variable. - if adicVarDec.absVar<>nil then begin - AddCallerTo(adicVarDec.absVar, xvar); - end - end; - end else begin - GenError(ER_SEM_COM_EXP); - exit; - end; - if not CaptureDelExpres then exit; - ProcComments; - //puede salir con error + BasePath: RawByteString; +begin + if pos(DirectorySeparator, FileName)=0 then begin + //Ruta relativa. Se completa + BasePath := ExtractFileDir(BaseFile); + if BasePath = '' then begin + //No hay de donde completar, usa la ruta actual + Result := ExpandFileName(FileName); + end else begin + Result := ExtractFileDir(BaseFile) + DirectorySeparator + FileName; + end; + end else begin + //Tiene "DirectorySeparator", se asume que es ruta absoluta, y no se cambia. + Result := FileName; + end; end; -procedure TCompiler.CompileProcHeader(out fun: TxpEleFun; ValidateDup: boolean = true); -{Hace el procesamiento del encabezado de la declaración de una función/procedimiento. -Devuelve la referencia al objeto TxpEleFun creado, en "fun". -Conviene separar el procesamiento del enzabezado, para poder usar esta rutina, también, -en el procesamiento de unidades.} +procedure TCompilerBase.ExchangeP1_P2; +{Intercambia el orden de los operandos.} var - srcPos: TSrcPos; - procName: String; - typ : TxpEleType; + tmp : ^TOperand; begin - //Toma información de ubicación, al inicio del procedimiento - cIn.SkipWhites; - srcPos := cIn.ReadSrcPos; - //Ahora debe haber un identificador - if cIn.tokType <> tnIdentif then begin - GenError(ER_IDEN_EXPECT); - exit; - end; - //hay un identificador - procName := cIn.tok; - cIn.Next; //lo toma - {Ya tiene los datos mínimos para crear la función. } - fun := CreateFunction(procName, typNull, @callParam, @callFunct); - fun.srcDec := srcPos; //Toma ubicación en el código - TreeElems.AddElementAndOpen(fun); //Se abre un nuevo espacio de nombres + //Invierte los operandos + tmp := p1; + p1 := p2; + p2 := tmp; +end; - CaptureDecParams(fun); - if HayError then exit; - //Recién aquí puede verificar duplicidad, porque ya se leyeron los parámetros - if ValidateDup then begin //Se pide validar la posible duplicidad de la función - if not ValidateFunction then exit; - end; - //Verifica si es función - cIn.SkipWhites; - if cIn.tok = ':' then begin - cIn.Next; - cIn.SkipWhites; - //Es función - typ := getParamType; //lee tipo - if HayError then exit; +function TCompilerBase.hexFilePath: string; +begin + Result := ExpandRelPathTo(mainFile, hexfile); //Convierte a ruta absoluta +end; +function TCompilerBase.mainFilePath: string; +begin + Result := mainFile; +end; +//Inicialización +constructor TCompilerBase.Create; +begin + ClearError; //inicia motor de errores + //Crea arbol de elementos y listas + TreeElems := TXpTreeElements.Create; + TreeDirec := TXpTreeElements.Create; + listFunSys := TxpEleFuns.Create(true); + listTypSys := TxpEleTypes.Create(true); + //inicia la sintaxis + xLex := TSynFacilSyn.Create(nil); //crea lexer -// parType := cIn.tok; //lee tipo de parámetro -// cIn.Next; -// //Valida el tipo -// typ := FindSysEleType(parType); -// if typ = nil then begin -// GenError(ER_UNDEF_TYPE_, [parType]); -// exit; -// end; - //Fija el tipo de la función - fun.typ := typ; - end; - if not CaptureTok(';') then exit; - //Verifica si es INTERRUPT - cIn.SkipWhites; - if cIn.tokL = 'interrupt' then begin - cIn.Next; - fun.IsInterrupt := true; - if not CaptureTok(';') then exit; - end; - ProcComments; //Quita espacios. Puede salir con error + cIn := TContexts.Create(xLex); //Crea lista de Contextos + ejecProg := false; + //Actualiza las referencias a los tipos de tokens existentes en SynFacilSyn + tnEol := xLex.tnEol; + tnSymbol := xLex.tnSymbol; + tnSpace := xLex.tnSpace; + tnIdentif := xLex.tnIdentif; + tnNumber := xLex.tnNumber; + tnKeyword := xLex.tnKeyword; + tnString := xLex.tnString; + tnComment := xLex.tnComment; + //Atributos + tkEol := xLex.tkEol; + tkSymbol := xLex.tkSymbol; + tkSpace := xLex.tkSpace; + tkIdentif := xLex.tkIdentif; + tkNumber := xLex.tkNumber; + tkKeyword := xLex.tkKeyword; + tkString := xLex.tkString; + tkComment := xLex.tkComment; + //Crea nuevos tipos necesarios para el Analizador Sintáctico + tnOperator := xLex.NewTokType('Operator', tkOperator); //necesario para analizar expresiones + tnBoolean := xLex.NewTokType('Boolean', tkBoolean); //constantes booleanas + tnSysFunct := xLex.NewTokType('SysFunct', tkSysFunct); //funciones del sistema + tnType := xLex.NewTokType('Types', tkType); //tipos de datos end; -procedure TCompiler.CompileProcDeclar(IsImplementation: boolean); -{Compila la declaración de procedimientos. Tanto procedimientos como funciones - se manejan internamente como funciones. - IsImplementation, se usa para cuando se está compilando en la sección IMPLEMENTATION.} -var - fun, funcX: TxpEleFun; - bod: TxpEleBody; - Parent: TxpElement; - i: Integer; - Found: Boolean; -begin - {Este método, solo se ejecutará en la primera pasada, en donde todos los procedimientos - se codifican al inicio de la memoria FLASH, y las variables y registros se ubican al - inicio de la memeoria RAM, ya que lo que importa es simplemente recabar información - del procedimiento, y no tanto codificarlo. } - ResetFlashAndRAM; //Limpia RAM y FLASH, y fija CurrBank - if IsImplementation then begin - //Se compila para implementación. - {Este proceso es más complejo. La idea es compilar el enzabezado de cualquier función, - y luego comparar para ver si corresponde a una implementación o no. Si es - implemenatción, se elimina el nodo creado y se trabaja con el de la declaración.} - CompileProcHeader(fun, false); //No verifica la duplicidad por ahora - if HayError then exit; - //Verifica si es implementación de una función en la INTERFACE o no. - Parent := TreeElems.curNode.Parent; //Para comparar - {Se supone que esta exploración solo se hará en la primera pasada, así que no hay - problema, en hacer una exploración común.} - //debugln('Buscando declaración de %s en nodo %s desde 0 hasta %d', [fun.name, Parent.name, Parent.elements.Count-2]); - Found := false; - for i:=0 to Parent.elements.Count-2 do begin //No se considera a el mismo - if not (Parent.elements[i].idClass = eltFunc) then continue; - funcX := TxpEleFun(Parent.elements[i]); - if (UpCase(funcX.name) = Upcase(fun.name)) and - (fun.SameParams(funcX)) then begin - Found := true; - break; - end; - end; - if Found then begin - //Es una implementación. No vale la pena tener otro nodo. - TreeElems.CloseElement; //Cierra Nodo de la función - Parent.elements.Remove(fun); //elimina función - fun := {%H-}funcX; //apunta a la nueva función - TreeElems.OpenElement(fun); //Abre el nodo anterior - fun.Implemented := true; //marca como implementada - end else begin - //Debe ser una función privada - end; +destructor TCompilerBase.Destroy; +begin + cIn.Destroy; //Limpia lista de Contextos + xLex.Free; + listTypSys.Destroy; + listFunSys.Destroy; + TreeDirec.Destroy; + TreeElems.Destroy; + inherited Destroy; +end; + +{ TOperand } +function TOperand.VarName: string; inline; +begin + Result := rVar.name; +end; +function TOperand.offs: TVarOffs; +{Dirección de memoria, cuando es de tipo Char, Byte, Bit o Boolean.} +begin + if FSto = stVarRefVar then begin + //Caso especial, de stVarRefVar +// if FVar = nil then +// Result := FVarOff.offs +// else + Result := FVar.offs; end else begin - //Es una compilación normal - CompileProcHeader(fun); //Procesa el encabezado - if HayError then exit; + //Para todos los otros casos, esto debe funcionar, según la docuemntación. + Result := FVar.offs; end; - //Empiezan las declaraciones VAR, CONST, PROCEDURE, TYPE - while StartOfSection do begin - if cIn.tokL = 'var' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'begin') do begin - CompileVarDeclar; - if HayError then exit;; - end; - end else if cIn.tokL = 'const' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'begin') do begin - CompileGlobalConstDeclar; - if HayError then exit;; - end; -// end else if cIn.tokL = 'procedure' then begin -// cIn.Next; //lo toma -// CompileProcDeclar; - end else begin - GenError('Expected VAR, CONST or BEGIN.'); - exit; - end; - end; - if cIn.tokL <> 'begin' then begin - GenError('Expected "begin", "var", "type" or "const".'); - exit; - end; - //Ahora empieza el cuerpo de la función o las declaraciones - fun.adrr := pic.iFlash; //toma dirección de inicio del código. Es solo referencial. - fun.posCtx := cIn.PosAct; //Guarda posición para la segunda compilación - bod := CreateBody; //crea elemento del cuerpo de la función - bod.srcDec := cIn.ReadSrcPos; - TreeElems.AddElementAndOpen(bod); //Abre nodo Body - CompileProcBody(fun); - TreeElems.CloseElement; //Cierra Nodo Body - TreeElems.CloseElement; //cierra espacio de nombres de la función - bod.srcEnd := cIn.ReadSrcPos; //Fin de cuerpo -// fun.adrReturn := pic.iFlash-1; //Guarda dirección del RETURN - if not CaptureTok(';') then exit; - ProcComments; //Quita espacios. Puede salir con error -end; -procedure TCompiler.CompileInstruction; -{Compila una única instrucción o un bloque BEGIN ... END. Puede generar Error. - Una instrucción se define como: - 1. Un bloque BEGIN ... END - 2. Una estrutura - 3. Una expresión - La instrucción, no incluye al delimitador. - } -var - curCodCon: TxpEleCodeCont; +end; +function TOperand.Boffs: TVarOffs; begin - if TreeElems.curNode.idClass <> eltBody then begin - //No debería pasar, porque las instrucciones solo pueden estar en eltBody - GenError('Syntax error.'); - exit; - end; - curCodCon := TreeElems.CurCodeContainer; - ProcComments; - if cIn.tokL='begin' then begin - //es bloque - cIn.Next; //toma "begin" - CompileCurBlock; //llamada recursiva - if HayError then exit; - if not CaptureStr('end') then exit; - ProcComments; - //puede salir con error + Result := rVar.adrBit.offs; +end; +function TOperand.Loffs: TVarOffs; +{Dirección de memoria baja, cuando es de tipo Word.} +begin + Result := rVar.adrByte0.offs; +end; +function TOperand.Hoffs: TVarOffs; +begin + Result := rVar.adrByte1.offs; +end; +function TOperand.Eoffs: TVarOffs; +begin + Result := rVar.adrByte2.offs; +end; +function TOperand.Uoffs: TVarOffs; +begin + Result := rVar.adrByte3.offs; +end; +function TOperand.bank: TVarBank; +{Banco, del operando. Se supone que si se pide el banoo es porque es stVariab, o también +puede se el caso stVarRefVar. } +begin + if FSto = stVarRefVar then begin + //Caso especial, de stVarRefVar +// if FVar = nil then +// Result := FVarOff.bank +// else + Result := FVar.bank; end else begin - //es una instrucción - if cIn.tokType = tnStruct then begin - if cIn.tokl = 'if' then begin - curCodCon.OpenBlock(sbiIF); - cIn.Next; //pasa "if" - CompileIF; - curCodCon.CloseBlock; - end else if cIn.tokl = 'while' then begin - curCodCon.OpenBlock(sbiWHILE); - cIn.Next; //pasa "while" - CompileWHILE; - curCodCon.CloseBlock; - end else if cIn.tokl = 'repeat' then begin - curCodCon.OpenBlock(sbiREPEAT); - cIn.Next; //pasa "until" - CompileREPEAT; - curCodCon.CloseBlock; - end else if cIn.tokl = 'for' then begin - curCodCon.OpenBlock(sbiFOR); - cIn.Next; //pasa "until" - CompileFOR; - curCodCon.CloseBlock; - end else begin - GenError(ER_UNKN_STRUCT); - exit; - end; - end else begin - //debe ser es una expresión - GetExpressionE(0); - end; - if HayError then exit; - if pic.MsjError<>'' then begin - //El pic también puede dar error - GenError(pic.MsjError); - end; + //Para todos los otros casos, esto debe funcionar, según la docuemntación. + Result := FVar.bank; end; end; -procedure TCompiler.CompileInstructionDummy; -{Compila una instrucción pero sin generar código. } -var - p: Integer; - InvertedFromC0: Boolean; - CurrBank0: Byte; +function TOperand.addr: TVarOffs; begin - p := pic.iFlash; - CurrBank0 := CurrBank; //Guarda estado - InvertedFromC0 := InvertedFromC; //Guarda estado - - CompileInstruction; //Compila solo para mantener la sintaxis - - InvertedFromC := InvertedFromC0; //Restaura - CurrBank := CurrBank0; //Restaura - pic.iFlash := p; //Elimina lo compilado - //puede salir con error - { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } + Result := FVar.addr; end; -procedure TCompiler.CompileCurBlock; -{Compila el bloque de código actual hasta encontrar un delimitador de bloque, o fin -de archivo. } +function TOperand.Lbank: TVarBank; +{Banco del byte bajo, cuando es de tipo Word.} begin - ProcComments; - while not cIn.Eof and (cIn.tokType<>tnBlkDelim) do begin - //se espera una expresión o estructura - CompileInstruction; - if HayError then exit; //aborta - //se espera delimitador - if cIn.Eof then break; //sale por fin de archivo - //busca delimitador - ProcComments; - //Puede terminar con un delimitador de bloque - if cIn.tokType=tnBlkDelim then break; - //Pero lo común es que haya un delimitador de expresión - if not CaptureTok(';') then exit; - ProcComments; //Puede haber Directivas o ASM también - end; -end ; -procedure TCompiler.CompileCurBlockDummy; -{Compila un bloque pero sin geenrar código.} -var - p: Integer; - InvertedFromC0: Boolean; - CurrBank0: Byte; + Result := rVar.adrByte0.bank; +end; +function TOperand.bit: byte; begin - p := pic.iFlash; - CurrBank0 := CurrBank; //Guarda estado - InvertedFromC0 := InvertedFromC; //Guarda estado - - CompileCurBlock; //Compila solo para mantener la sintaxis - - InvertedFromC := InvertedFromC0; //Restaura - CurrBank := CurrBank0; //Restaura - pic.iFlash := p; //Elimina lo compilado - //puede salir con error - { TODO : Debe limpiar la memoria flash que ocupó, para dejar la casa limpia. } -end; -procedure TCompiler.CompileUnit(uni: TxpElement); -{Realiza la compilación de una unidad} -var - fun: TxpEleFun; - elem: TxpElement; + //Si se pide el bit, se asume que es de tipo "Bit". + Result := rVar.adrBit.bit; +end; +procedure TOperand.Invert; begin -//debugln(' Ini Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); - ClearError; - pic.MsjError := ''; - ProcComments; - //Busca UNIT - if cIn.tokL = 'unit' then begin - cIn.Next; //pasa al nombre - ProcComments; - if cIn.Eof then begin - GenError('Name of unit expected.'); - exit; - end; - if UpCase(cIn.tok)<>UpCase(uni.name) then begin - GenError('Name of unit doesn''t match file name.'); - exit; - end; - cIn.Next; //Toma el nombre y pasa al siguiente - if not CaptureDelExpres then exit; + if Sto = stConst then begin + //Para constantes, no se puede negar la lógica, sino el valor + valBool := not valBool; end else begin - GenError('Expected: UNIT'); - exit; - end; - ProcComments; - if cIn.tokL <> 'interface' then begin - GenError('Expected: INTERFACE'); - exit; - end; - cIn.Next; //toma - ProcComments; - if cIn.Eof then begin - GenError('Expected "uses", "var", "type", "const" or "implementation".'); - exit; - end; - ProcComments; - //Busca USES - CompileUsesDeclaration; - if cIn.Eof then begin - GenError('Expected "var", "type" or "const".'); - exit; - end; - ProcComments; -// Cod_StartProgram; //Se pone antes de codificar procedimientos y funciones - if HayError then exit; - //Empiezan las declaraciones - while StartOfSection do begin - if cIn.tokL = 'var' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'implementation') do begin - CompileVarDeclar(true); //marca como "IsInterface" - if HayError then exit;; - end; - end else if cIn.tokL = 'type' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'implementation') do begin - CompileTypeDeclar(true); - if HayError then exit; - end; - end else if cIn.tokL = 'const' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'implementation') do begin - CompileGlobalConstDeclar; - if HayError then exit;; - end; - end else if cIn.tokL = 'procedure' then begin - cIn.Next; //lo toma - CompileProcHeader(fun); //Se ingresa al árbol de sintaxis - if HayError then exit; - fun.InInterface := true; //marca ubicación - TreeElems.CloseElement; //CompileProcHeader, deja abierto el elemento - end else begin - GenError(ER_NOT_IMPLEM_, [cIn.tok]); - exit; - end; - end; - ProcComments; - if cIn.tokL <> 'implementation' then begin - GenError('Expected: IMPLEMENTATION'); - exit; + //Variables y expresiones, sí. + Inverted := not Inverted; //invierte lógica end; - cIn.Next; //toma - ///////////////// IMPLEMENTATION ///////////////////// - ProcComments; - //Explora las declaraciones e implementaciones - //Empiezan las declaraciones - while StartOfSection do begin - if cIn.tokL = 'var' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'end') do begin - CompileVarDeclar; - if HayError then exit;; - end; - end else if cIn.tokL = 'const' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'end') do begin - CompileGlobalConstDeclar; - if HayError then exit;; - end; - end else if cIn.tokL = 'procedure' then begin - cIn.Next; //lo toma - CompileProcDeclar(true); //Compila en IMPLEMENTATION - if HayError then exit; - end else begin - GenError(ER_NOT_IMPLEM_, [cIn.tok]); - exit; - end; - end; - //Verifica si todas las funciones de INTERFACE, se implementaron - for elem in TreeElems.curNode.elements do if elem.idClass = eltFunc then begin - fun := TxpEleFun(elem); - if fun.InInterface and not fun.Implemented then begin - GenErrorPos('Function %s not implemented.', [fun.name], fun.srcDec); - exit; - end; - end; - CompileLastEnd; - if HayError then exit; -// //procesa cuerpo -// ResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio -// también, la flash y memoria, después de algún psoible procedimiento.} -// if cIn.tokL = 'begin' then begin -// bod := CreateBody; -// bod.srcDec := cIn.ReadSrcPos; -// cIn.Next; //coge "begin" -// //Guardamos la ubicación física, real, en el archivo, después del BEGIN -// bod.posCtx := cIn.PosAct; -// //codifica el contenido -// CompileCurBlock; //compila el cuerpo -// if HayError then exit; +end; +function TOperand.aWord: word; inline; +begin + Result := word(valInt); +end; +function TOperand.LByte: byte; inline; +begin + Result := LO(word(valInt)); +end; +function TOperand.HByte: byte; inline; +begin + Result := HI(word(valInt)); +end; +function TOperand.EByte: byte; +begin + Result := (valInt >> 16) and $FF; +end; -// _SLEEP(); //agrega instrucción final -// end else begin -// GenError('Expected "begin", "var", "type" or "const".'); -// exit; -// end; -// Cod_EndProgram; -//debugln(' Fin Unit: %s-%s',[TreeElems.curNode.name, ExtractFIleName(cIn.curCon.arc)]); -end; -procedure TCompiler.CompileUsesDeclaration; -{Compila la unidad indicada.} -var - uni: TxpEleUnit; - uPath: String; - uName: String; - p: TPosCont; +function TOperand.UByte: byte; begin - if cIn.tokL = 'uses' then begin - cIn.Next; //pasa al nombre - //Toma una a una las unidades - repeat - ProcComments; - //ahora debe haber un identificador - if cIn.tokType <> tnIdentif then begin - GenError(ER_IDEN_EXPECT); - exit; - end; - //hay un identificador de unidad - uName := cIn.tok; - uni := CreateUnit(uName); - //Verifica si existe ya el nombre de la unidad - if uni.DuplicateIn(TreeElems.curNode.elements) then begin - GenError('Identifier duplicated: %s.', [uName]); - uni.Destroy; - exit; - end; - uni.srcDec := cIn.ReadSrcPos; //guarda posición de declaración - uName := uName + '.pas'; //nombre de archivo -{----}TreeElems.AddElementAndOpen(uni); - //Ubica al archivo de la unidad - p := cIn.PosAct; //Se debe guardar la posición antes de abrir otro contexto - //Primero busca en la misma ubicación del archivo fuente - uPath := ExtractFileDir(mainFile) + DirectorySeparator + uName; - if OpenContextFrom(uPath) then begin - uni.srcFile := uPath; //Gaurda el archivo fuente - end else begin - //No lo encontró, busca en la carpeta de librerías - uPath := rutUnits + DirectorySeparator + uName; - if OpenContextFrom(uPath) then begin - uni.srcFile := uPath; //Gaurda el archivo fuente - end else begin - //No lo encuentra - GenError(ER_FIL_NOFOUND, [uName]); - exit; - end; - end; - //Aquí ya se puede realizar otra exploración, como si fuera el archivo principal - CompileUnit(uni); - cIn.PosAct := p; - if HayError then exit; //El error debe haber guardado la ubicaicón del error -{----}TreeElems.CloseElement; //cierra espacio de nombres de la función - cIn.Next; //toma nombre - cIn.SkipWhites; - if cIn.tok <> ',' then break; //sale - cIn.Next; //toma la coma - until false; - if not CaptureDelExpres then exit; - end; + Result := (valInt >> 24) and $FF; end; -procedure TCompiler.CompileProgram; -{Compila un programa en el contexto actual. Empieza a codificar el código a partir de -la posición actual de memoria en el PIC (iFlash).} -var - bod: TxpEleBody; +function TOperand.CanBeWord: boolean; +{Indica si el valor constante que contiene, puede ser convertido a un WORD sin pérdida} begin - ClearError; - pic.MsjError := ''; - ProcComments; - //Busca PROGRAM - if cIn.tokL = 'unit' then begin - //Se intenta compilar una unidad - GenError('Expected a program. No a unit.'); - exit; - end; - if cIn.tokL = 'program' then begin - cIn.Next; //pasa al nombre - ProcComments; - if cIn.Eof then begin - GenError(ER_PROG_NAM_EX); - exit; - end; - cIn.Next; //Toma el nombre y pasa al siguiente - if not CaptureDelExpres then exit; - end; - if cIn.Eof then begin - GenError('Expected "program", "begin", "var", "type" or "const".'); - exit; - end; - ProcComments; - //Busca USES - if HayError then exit; //CompileUsesDeclaration, va a limpiar "HayError" - CompileUsesDeclaration; - if cIn.Eof then begin - GenError('Expected "begin", "var", "type" or "const".'); - exit; - end; - ProcComments; - Cod_StartProgram; //Se pone antes de codificar procedimientos y funciones - if HayError then exit; - //Empiezan las declaraciones - while StartOfSection do begin - if cIn.tokL = 'var' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'begin') do begin - CompileVarDeclar; - if HayError then exit; - end; - end else if cIn.tokL = 'type' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'begin') do begin - CompileTypeDeclar(false); - if HayError then exit; - end; - end else if cIn.tokL = 'const' then begin - cIn.Next; //lo toma - while not StartOfSection and (cIn.tokL <>'begin') do begin - CompileGlobalConstDeclar; - if HayError then exit; - end; - end else if cIn.tokL = 'procedure' then begin - cIn.Next; //lo toma - CompileProcDeclar(false); - if HayError then exit; - end else begin - GenError(ER_NOT_IMPLEM_, [cIn.tok]); - exit; - end; - end; - //procesa cuerpo - ResetFlashAndRAM; {No es tan necesario, pero para seguir un orden y tener limpio - también, la flash y memoria, después de algún posible procedimiento.} - if cIn.tokL <> 'begin' then begin - GenError('Expected "begin", "var", "type" or "const".'); - exit; - end; - bod := CreateBody; - bod.srcDec := cIn.ReadSrcPos; - TreeElems.AddElementAndOpen(bod); //Abre nodo Body - cIn.Next; //coge "begin" - //Guardamos popsisicón en contexto para la segunda compilación - bod.posCtx := cIn.PosAct; - //codifica el contenido - CompileCurBlock; //compila el cuerpo - TreeElems.CloseElement; //No debería ser tan necesario. - bod.srcEnd := cIn.ReadSrcPos; - if HayError then exit; - CompileLastEnd; //Compila el "END." final - if HayError then exit; - _SLEEP(); //agrega instrucción final - Cod_EndProgram; -end; -procedure TCompiler.CompileLinkProgram; -{Genera el código compilado final. Usa la información del árbol de sintaxis, para -ubicar a los diversos elementos que deben compilarse. -Se debe llamar después de compilar con CompileProgram. -Esto es lo más cercano a un enlazador, que hay en PicPas.} - function RemoveUnusedFuncReferences: integer; - {Explora las funciones, para quitarle las referencias de funciones no usadas. - Devuelve la cantidad de funciones no usadas. - Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllFuncs". } - var - fun, fun2: TxpEleFun; - begin - Result := 0; - for fun in TreeElems.AllFuncs do begin - if fun.nCalled = 0 then begin - inc(Result); //Lleva la cuenta - //Si no se usa la función, tampoco sus elementos locales - fun.SetElementsUnused; - //También se quita las llamadas que hace a otras funciones - for fun2 in TreeElems.AllFuncs do begin - fun2.RemoveCallsFrom(fun.BodyNode); -// debugln('Eliminando %d llamadas desde: %s', [n, fun.name]); - end; - //Incluyendo a funciones del sistema - for fun2 in listFunSys do begin - fun2.RemoveCallsFrom(fun.BodyNode); - end; - end; - end; - end; - function RemoveUnusedVarReferences: integer; - {Explora las variables de todo el programa, de modo que a cada una: - * Le quita las referencias hechas por variables no usadas. - Devuelve la cantidad de variables no usadas. - Para que esta función trabaje bien, debe estar actualizada "TreeElems.AllVars" y - "TreeElems.AllFuncs", e inclusive "TreeElems.AllVars" debe estar ya filtrada - con las funciones no usadas. } - var - xvar, xvar2: TxpEleVar; - fun: TxpEleFun; - begin - Result := 0; - //Quita las referencias de las varaibles no usadas - for xvar in TreeElems.AllVars do begin - if xvar.nCalled = 0 then begin - //Esta es una variable no usada - inc(Result); //Lleva la cuenta - //Quita las llamadas que hace a otras funciones - for xvar2 in TreeElems.AllVars do begin - xvar2.RemoveCallsFrom(xvar); -// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); - end; - end; - end; - //Ahora quita las referencias de funciones no usadas - for fun in TreeElems.AllFuncs do begin - if fun.nCalled = 0 then begin - //Esta es una función no usada - inc(Result); //Lleva la cuenta - for xvar2 in TreeElems.AllVars do begin - xvar2.RemoveCallsFrom(fun.BodyNode); -// debugln('Eliminando llamada a %s desde: %s', [xvar2.name, xvar.name]); - end; - end; - end; - end; - procedure SetInitialBank(fun: TxpEleFun); - {Define el banco de trabajo para compilar correctamente} - var - cal : TxpEleCaller; - begin - if fun.IsInterrupt then begin - //Para ISR, no se genera código de manejo de bancos - fun.iniBnk := 0; //asume siempre 0 - CurrBank := fun.iniBnk; //configura al compilador - exit; - end; - if SetProIniBnk then begin - _BANKRESET; //Se debe forzar a iniciar en el banco O - fun.iniBnk := 0; //graba - end else begin - //Se debe deducir el banco inicial de la función - //Explora los bancos desde donde se llama - if fun.lstCallers.Count = 1 then begin - //Solo es llamado una vez - fun.iniBnk := fun.lstCallers[0].curBnk; - CurrBank := fun.iniBnk; //configura al compilador - end else begin - fun.iniBnk := fun.lstCallers[0].curBnk; //banco de la primera llamada - //Hay varias llamadas - for cal in fun.lstCallers do begin - if fun.iniBnk <> cal.curBnk then begin - //Hay llamadas desde varios bancos. - _BANKRESET; //Se debe forzar a iniciar en el banco O - fun.iniBnk := 0; //graba - exit; - end; - end; - //Todas las llamadas son del mismo banco - CurrBank := fun.iniBnk; //configura al compilador - end; - end; - end; - procedure UpdateFunLstCalled; - {Actualiza la lista lstCalled de las funciones, para saber, a qué fúnciones llama - cada función.} - var - fun : TxpEleFun; - itCall : TxpEleCaller; - whoCalls: TxpEleBody; - begin - for fun in TreeElems.AllFuncs do begin - if fun.nCalled = 0 then continue; //No usada - //Procesa las llamadas hechas desde otras funciones, para llenar - //su lista "lstCalled", y así saber a quienes llama - for itCall in fun.lstCallers do begin - //Agrega la referencia de la llamada a la función - if itCall.caller.idClass <> eltBody then begin - //Según diseño, itCall.caller debe ser TxpEleBody - GenError('Design error.'); - exit; - end; - whoCalls := TxpEleBody(itCall.caller); - //Se agregan todas las llamadas (así sean al mismo porcedimiento) pero luego - //AddCalled(), los filtra. - whoCalls.Parent.AddCalled(fun); //Agrega al procediminto - end; - end; - {Actualizar la lista fun.lstCalledAll con la totalidad de llamadas a todas - las funciones, sean de forma directa o indirectamente.} - for fun in TreeElems.AllFuncs do begin - fun.UpdateCalledAll; - end; - //Actualiza el programa principal - TreeElems.main.UpdateCalledAll; - if TreeElems.main.maxNesting>8 then begin - GenError('Not enough stack.'); - end; - end; - procedure AssignRAMtoVar(xvar: TxpEleVar; shared: boolean = false); - var - posAct : TPosCont; - adicVarDec: TAdicVarDec; - IsBit : boolean; - begin -//debugln(' Asignando espacio a %s', [xvar.name]); - if xvar.adicPar.isAbsol then begin -//debugln('Abs: xvar=%s at %d', [xvar.name, xvar.adicPar.absAddr]); - {Tiene declaración absoluta. Mejor compilamos de nuevo la declaración, porque - puede haber referencia a variables que han cambiado de ubicación, por - optimización. - Se podría hacer una verificación, para saber si la referencia es a direcciones - absolutas, en lugar de a variables (o a varaibles temporales), y así evitar - tener que compilar de nuevo, la declaración.} - posAct := cIn.PosAct; //guarda posición actual - cIn.PosAct := xVar.adicPar.srcDec; //Posiciona en la declaración adicional - TreeElems.curNode := xvar.Parent; {Posiciona el árbol, tal cual estaría en la - primera pasada, para una correcta resolución - de nombres} - adicVarDec := GetAdicVarDeclar(IsBit); - //No debería dar error, porque ya pasó la primera pasada - xvar.adicPar := adicVarDec; - cIn.PosAct := posAct; - end; - CreateVarInRAM(xVar, shared); //Crea la variable - xvar.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios - //Puede salir error - end; -var - elem : TxpElement; - bod : TxpEleBody; - xvar : TxpEleVar; - fun : TxpEleFun; - iniMain, noUsed, noUsedPrev, xxx: integer; -begin - ExprLevel := 0; - pic.ClearMemFlash; - ResetFlashAndRAM; - ClearError; - pic.MsjError := ''; - //Verifica las constantes usadas. Solo en el nodo principal, para no sobrecargar mensajes. - for elem in TreeElems.main.elements do if elem.idClass = eltCons then begin - if elem.nCalled = 0 then begin - GenWarnPos(WA_UNUSED_CON_, [elem.name], elem.srcDec); - end; - end; - pic.iFlash:= 0; //inicia puntero a Flash - //Explora las funciones, para identifcar a las no usadas - TreeElems.RefreshAllFuncs; - noUsed := 0; - repeat //Explora en varios niveles - noUsedPrev := noUsed; //valor anterior - noUsed := RemoveUnusedFuncReferences; - until noUsed = noUsedPrev; - /////////////////////////////////////////////////////////////////////////////// - //Asigna memoria, primero a las variables locales (y parámetros) de las funciones - /////////////////////////////////////////////////////////////////////////////// - UpdateFunLstCalled; //Actualiza lista "lstCalled" de las funciones usadas - if HayError then exit; - //Explora primero a las funciones terminales - for fun in TreeElems.AllFuncs do if fun.nCalled > 0 then begin - if not fun.IsTerminal2 then continue; - //DebugLn('función terminal: %s con %d var.loc.', [fun.name, fun.nLocalVars]); - //Los parámetros y variables locales aparecen como elementos de la función - for elem in fun.elements do if elem.idClass = eltVar then begin - xvar := TxpEleVar(elem); - if xvar.nCalled>0 then begin - //Asigna una dirección válida para esta variable - AssignRAMtoVar(xvar, true); - if HayError then exit; - end; - end; - if OptReuProVar then pic.SetSharedUnused; //limpia las posiciones usadas - end; - if OptReuProVar then pic.SetSharedUsed; //Ahora marca como usados, porque ya se creó la zona de bytes comaprtidos - //Explora solo a las funciones que no son terminales - for fun in TreeElems.AllFuncs do if fun.nCalled > 0 then begin - if fun.IsTerminal2 then continue; - //Los parámetros y variables locales aparecen como elementos de la función - for elem in fun.elements do if elem.idClass = eltVar then begin - xvar := TxpEleVar(elem); - if xvar.nCalled>0 then begin - //Asigna una dirección válida para esta variable - AssignRAMtoVar(xvar); - if HayError then exit; - end; - end; - end; - /////////////////////////////////////////////////////////////////////////////// - TreeElems.RefreshAllVars; - noUsed := 0; - repeat //Explora en varios niveles - noUsedPrev := noUsed; //valor anterior - noUsed := RemoveUnusedVarReferences; - until noUsed = noUsedPrev; - //Reserva espacio para las variables adicionales usadas - for xvar in TreeElems.AllVars do begin - if xvar.Parent.idClass = eltFunc then continue; //Las variables de funciones ya se crearon - if xvar.nCalled>0 then begin - //Asigna una dirección válida para esta variable - AssignRAMtoVar(xvar); - if HayError then exit; - end else begin - //Variable no usada - xvar.ResetAddress; - if xvar.Parent = TreeElems.main then begin - //Genera mensaje solo para variables del programa principal. - GenWarnPos(WA_UNUSED_VAR_, [xVar.name], xvar.srcDec); - end; - end; - end; - pic.iFlash:= 0; //inicia puntero a Flash - _GOTO_PEND(iniMain); //instrucción de salto inicial - //Codifica la función INTERRUPT, si existe - for fun in TreeElems.AllFuncs do begin - if fun.IsInterrupt then begin - //Compila la función en la dirección 0x04 - pic.iFlash := $04; - fun.adrr := pic.iFlash; //Actualiza la dirección final - fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios - cIn.PosAct := fun.posCtx; //Posiciona escáner - PutLabel('__'+fun.name); - TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación - SetInitialBank(fun); //Configura manejo de bancos RAM - CompileProcBody(fun); - TreeElems.CloseElement; //cierra el body - TreeElems.CloseElement; //cierra la función - if HayError then exit; //Puede haber error - end; + Result := (valInt>=0) and (valInt<=$ffff); +end; +function TOperand.CanBeByte: boolean; +{Indica si el valor constante que contiene, puede ser convertido a un BYTE sin pérdida} +begin + Result := (valInt>=0) and (valInt<=$ff); +end; +procedure TOperand.CopyConsValTo(var c: TxpEleCon); +begin + //hace una copia selectiva por velocidad, de acuerdo al grupo + case Typ.grp of + t_boolean : c.val.ValBool:=Fval.ValBool; + t_integer, + t_uinteger: c.val.ValInt := Fval.ValInt; + t_float : c.val.ValFloat:= Fval.ValFloat; + t_string : c.val.ValStr := Fval.ValStr; + else + MsgErr('Internal PicPas error'); + {En teoría, cualquier valor constante que pueda contener TOperand, debería poder + transferirse a una constante, porque usan el mismo contenedor, así que si pasa esto + solo puede ser que faltó implementar.} end; - //Codifica las funciones del sistema usadas - for fun in listFunSys do begin - xxx := fun.nCalled; - if (xxx > 0) and (fun.compile<>nil) then begin - //Función usada y que tiene una subrutina ASM - fun.adrr := pic.iFlash; //actualiza la dirección final - PutLabel('__'+fun.name); - fun.compile(fun); //codifica - if HayError then exit; //Puede haber error - if pic.MsjError<>'' then begin //Error en el mismo PIC - GenError(pic.MsjError); - exit; - end; - end; +end; +procedure TOperand.GetConsValFrom(const c: TxpEleCon); +{Copia valores constante desde una constante. Primero TOperand, debería tener inicializado + correctamente su campo "catTyp". } +begin + case Typ.grp of + t_boolean : Fval.ValBool := c.val.ValBool; + t_integer, + t_uinteger: Fval.ValInt := c.val.ValInt; + t_float : Fval.ValFloat := c.val.ValFloat; + t_string : Fval.ValStr := c.val.ValStr; + else + MsgErr('Internal PicPas error'); + //faltó implementar. end; - //Codifica las subrutinas usadas - for fun in TreeElems.AllFuncs do begin - if fun.IsInterrupt then continue; - if fun.nCalled>0 then begin - //Compila la función en la dirección actual - fun.adrr := pic.iFlash; //Actualiza la dirección final - fun.typ.DefineRegister; //Asegura que se dispondrá de los RT necesarios - cIn.PosAct := fun.posCtx; //Posiciona escáner - PutLabel('__'+fun.name); - TreeElems.OpenElement(fun.BodyNode); //Ubica el espacio de nombres, de forma similar a la pre-compilación - SetInitialBank(fun); //Configura manejo de bancos RAM - CompileProcBody(fun); - TreeElems.CloseElement; //cierra el body - TreeElems.CloseElement; //cierra la función - if HayError then exit; //Puede haber error +end; +function TOperand.GetTyp: TxpEleType; +{Devuelve el tipo de la variable referenciada. } +begin + if Sto = stVariab then begin + Result := FVar.typ; + end else if Sto = stVarRefVar then begin + //Variable referenciada por variables. + //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sVarRef" + Result := FVar.typ.refType; //¿No debería ser solo FVar.typ? + end else if Sto = stVarRefExp then begin + //Variable referenciada por expresión. + //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sExpRef" + if FVar = nil then begin + //Debe ser puntero. + Result := FTyp.refType; end else begin - //Esta función no se usa. - GenWarnPos(WA_UNUSED_PRO_, [fun.name], fun.srcDec); + //Debe ser arreglo + Result := FVar.typ; end; + end else begin + //Constante o expresión + Result := FTyp; end; - //Compila cuerpo del programa principal - pic.codGotoAt(iniMain, _PC); //termina de codificar el salto - bod := TreeElems.BodyNode; //lee Nodo del cuerpo principal - if bod = nil then begin - GenError('Body program not found.'); - exit; - end; - bod.adrr := pic.iFlash; //guarda la dirección de codificación -// bod.nCalled := 1; //actualiza - cIn.PosAct := bod.posCtx; //ubica escaner - PutLabel('__main_program__'); - TreeElems.OpenElement(bod); - CurrBank := 0; //Se limpia, porque pudo haber cambiado con la compilación de procedimientos - CompileCurBlock; - TreeElems.CloseElement; //cierra el cuerpo principal - PutLabel('__end_program__'); - {No es necesario hacer más validaciones, porque ya se hicieron en la primera pasada} - _SLEEP(); //agrega instrucción final -end; -function TCompiler.hexFilePath: string; +end; +procedure TOperand.SetvalBool(AValue: boolean); begin - Result := ExpandRelPathTo(mainFile, hexfile); //Convierte a ruta absoluta + Fval.ValBool:=AValue; end; -function TCompiler.mainFilePath: string; +procedure TOperand.SetvalFloat(AValue: extended); begin - Result := mainFile; +// if FvalFloat=AValue then Exit; + Fval.ValFloat:=AValue; end; -function TCompiler.IsUnit: boolean; -{Indica si el archivo del contexto actual, es una unidad. Debe llamarse} +procedure TOperand.SetvalInt(AValue: Int64); begin - ProcCommentsNoExec; //Solo es validación, así que no debe ejecutar nada - //Busca UNIT - if cIn.tokL = 'unit' then begin - cIn.curCon.SetStartPos; //retorna al inicio - exit(true); - end; - cIn.curCon.SetStartPos; //retorna al inicio - exit(false); +// if FvalInt=AValue then Exit; + Fval.ValInt:=AValue; end; -procedure TCompiler.Compile(NombArc: string; Link: boolean = true); -//Compila el contenido de un archivo. -var - p: SizeInt; -begin - mode := modPicPas; //Por defecto en sintaxis nueva - mainFile := NombArc; - hexfile := ChangeFileExt(NombArc, '.hex'); //Obtiene nombre - hexfile := hexFilePath; //Expande nombre si es necesario - //se pone en un "try" para capturar errores y para tener un punto salida de salida - //único - if ejecProg then begin - GenError(ER_COMPIL_PROC); - exit; //sale directamente - end; - try - ejecProg := true; //marca bandera - ClearError; - //Genera instrucciones de inicio - cIn.ClearAll; //elimina todos los Contextos de entrada - //Compila el texto indicado - if not OpenContextFrom(NombArc) then begin - //No lo encuentra - GenError(ER_FIL_NOFOUND, [NombArc]); - exit; - end; - {-------------------------------------------------} - TreeElems.Clear; - TreeDirec.Clear; - TreeElems.OnAddElement := @Tree_AddElement; //Se va a modificar el árbol - listFunSys.Clear; - CreateSystemElements; //Crea los elementos del sistema - ClearMacros; //Limpia las macros - //Inicia PIC - ExprLevel := 0; //inicia - GetHardwareInfo(pic, 'DEFAULT'); //configura modelo por defecto - pic.ClearMemFlash; - ResetFlashAndRAM; {Realmente lo que importa aquí sería limpiar solo la RAM, porque - cada procedimiento, reiniciará el puntero de FLASH} - //Compila el archivo actual como programa o como unidad - if IsUnit then begin - //Hay que compilar una unidad - consoleTickStart; -// debugln('*** Compiling unit: Pass 1.'); - TreeElems.main.name := ExtractFileName(mainFile); - p := pos('.',TreeElems.main.name); - if p <> 0 then TreeElems.main.name := copy(TreeElems.main.name, 1, p-1); - FirstPass := true; - CompileUnit(TreeElems.main); - consoleTickCount('** First Pass.'); - end else begin - //Debe ser un programa - {Se hace una primera pasada para ver, a modo de exploración, para ver qué - procedimientos, y varaibles son realmente usados, de modo que solo estos, serán - codificados en la segunda pasada. Así evitamos incluir, código innecesario.} - consoleTickStart; -// debugln('*** Compiling program: Pass 1.'); - pic.iFlash := 0; //dirección de inicio del código principal - FirstPass := true; - CompileProgram; //puede dar error - if HayError then exit; - consoleTickCount('** First Pass.'); - if Link then begin -// debugln('*** Compiling/Linking: Pass 2.'); - {Compila solo los procedimientos usados, leyendo la información del árbol de sintaxis, - que debe haber sido actualizado en la primera pasada.} - FirstPass := false; - CompileLinkProgram; - consoleTickCount('** Second Pass.'); - end; - end; - {-------------------------------------------------} - cIn.ClearAll;//es necesario por dejar limpio - //Genera archivo hexa, en la misma ruta del programa - if Link then begin - pic.GenHex(hexFile, ConfigWord); //CONFIG_NULL; - end; - finally - ejecProg := false; - //Tareas de finalización - if OnAfterCompile<>nil then OnAfterCompile; - end; +procedure TOperand.SetAsConst(xtyp: TxpEleType); +{Fija el almacenamiento del Operando como Constante, del tipo indicado} +begin + FSto := stConst; + FTyp := xtyp; + rVarBase := nil; //Inicia a este valor end; -function AdrStr(absAdr: word): string; -{formatea una dirección en cadena.} +procedure TOperand.SetAsVariab(xvar: TxpEleVar); +{Fija el almacenamiento del Operando como Variable, del tipo de la variable} begin - Result := '0x' + IntToHex(AbsAdr, 3); + FSto := stVariab; + FVar := xvar; //No hace falta actualziar el tipo + rVarBase := nil; //Inicia a este valor end; -procedure TCompiler.RAMusage(lins: TStrings; varDecType: TVarDecType; ExcUnused: boolean); -{Devuelve una cadena con información sobre el uso de la memoria.} -var - adStr: String; - v: TxpEleVar; - nam, subUsed: string; - reg: TPicRegister; - rbit: TPicRegisterBit; -begin - for v in TreeElems.AllVars do begin //Se supone que "AllVars" ya se actualizó. - case varDecType of - dvtDBDb: begin - if ExcUnused and (v.nCalled = 0) then continue; - adStr := v.AddrString; //dirección hexadecimal - if adStr='' then adStr := 'XXXX'; //Error en dirección - if v.typ.IsBitSize then begin - lins.Add(' ' + v.name + ' Db ' + adStr); - end else if v.typ.IsByteSize then begin - lins.Add(' ' + v.name + ' DB ' + adStr); - end else if v.typ.IsWordSize then begin - lins.Add(' ' + v.name + ' DW ' + adStr); - end else begin - lins.Add(' "' + v.name + '"->' + adStr); - end; - end; - dvtEQU: begin; - if ExcUnused and (v.nCalled = 0) then continue; - if v.nCalled = 0 then subUsed := '; ' else subUsed := ''; - if v.typ.IsBitSize then begin - lins.Add('#define ' + v.name + ' ' + AdrStr(v.addr) + ',' + - IntToStr(v.adrBit.bit)+ subUsed); - end else if v.typ.IsByteSize then begin - lins.Add(v.name + ' EQU ' + AdrStr(v.addr)+ subUsed); - end else if v.typ.IsWordSize then begin - lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); - lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); - end else if v.typ.IsDWordSize then begin - lins.Add(v.name+'@0' + ' EQU ' + AdrStr(v.addrL)+ subUsed); - lins.Add(v.name+'@1' + ' EQU ' + AdrStr(v.addrH)+ subUsed); - lins.Add(v.name+'@2' + ' EQU ' + AdrStr(v.addrE)+ subUsed); - lins.Add(v.name+'@3' + ' EQU ' + AdrStr(v.addrU)+ subUsed); - end else begin - lins.Add('"' + v.name + '"->' + AdrStr(v.addr) + subUsed); - end; - end; - end; - end; - //Reporte de registros de trabajo, auxiliares y de pila - if (listRegAux.Count>0) or (listRegAuxBit.Count>0) then begin - lins.Add(';------ Work and Aux. Registers ------'); - for reg in listRegAux do begin - if not reg.assigned then continue; //puede haber registros de trabajo no asignados - nam := pic.NameRAM(reg.offs, reg.bank); //debería tener nombre - adStr := '0x' + IntToHex(reg.addr, 3); - lins.Add(nam + ' EQU ' + adStr); - end; - for rbit in listRegAuxBit do begin - nam := pic.NameRAMbit(rbit.offs, rbit.bank, rbit.bit); //debería tener nombre - adStr := '0x' + IntToHex(rbit.addr, 3); - lins.Add('#define' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); - end; - end; - if (listRegStk.Count>0) or (listRegStkBit.Count>0) then begin - lins.Add(';------ Stack Registers ------'); - for reg in listRegStk do begin - nam := pic.NameRAM(reg.offs, reg.bank); //debería tener nombre - adStr := '0x' + IntToHex(reg.addr, 3); - lins.Add(nam + ' EQU ' + adStr); - end; - for rbit in listRegStkBit do begin - nam := pic.NameRAMbit(rbit.offs, rbit.bank, rbit.bit); //debería tener nombre - adStr := '0x' + IntToHex(rbit.addr, 3); - lins.Add('#define ' + nam + ' ' + adStr + ',' + IntToStr(rbit.bit)); - end; - end; -// lins.Add(';-------------------------'); +procedure TOperand.SetAsExpres(xtyp: TxpEleType); +{Fija el almacenamiento del Operando como Expresión, del tipo indicado} +begin + FSto := stExpres; + FTyp := xtyp; + rVarBase := nil; //Inicia a este valor end; -procedure TCompiler.DumpCode(lins: TSTrings; incAdrr, incCom, incVarNam: boolean); +procedure TOperand.SetAsVarRef(VarBase: TxpEleVar); +{Fija el operando como de tipo stVarRefVar.} begin - pic.DumpCode(lins, incAdrr, incCom, incVarNam); + FSto := stVarRefVar; + FVar := VarBase; + rVarBase := nil; //Inicia a este valor end; -function TCompiler.RAMusedStr: string; -var - usedRAM, totRAM: Word; +procedure TOperand.SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); +{Versión de SetAsVarRef(), con desplazamiento constante.} begin - totRAM := pic.TotalMemRAM; - if totRAM=0 then exit; //protección - usedRAM := pic.UsedMemRAM; - Result := MSG_RAM_USED + IntToStr(usedRAM) +'/'+ IntToStr(totRAM) + 'B (' + - FloatToStrF(100*usedRAM/totRAM, ffGeneral, 1, 3) + '%)'; + FSto := stVarRefVar; + FVar := VarBase; + Fval.ValInt := ValOff; + rVarBase := nil; //Inicia a este valor end; -function TCompiler.FLASHusedStr: string; -var - totROM: Integer; - usedROM: Word; +procedure TOperand.SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); begin - totROM := pic.MaxFlash; - usedROM := pic.UsedMemFlash; - Result := MSG_FLS_USED + IntToStr(usedROM) +'/'+ IntToStr(totROM) + ' (' + - FloatToStrF(100*usedROM/totROM, ffGeneral, 1, 3) + '%)'; + FSto := stVarRefExp; + FVar := VarBase; + FTyp := Etyp; + rVarBase := nil; //Inicia a este valor end; -procedure TCompiler.GetResourcesUsed(out ramUse, romUse, stkUse: single); -var - totROM, usedROM: Word; - usedRAM, totRAM: Word; -begin - //Calcula RAM - ramUse := 0; //valor por defecto - totRAM := pic.TotalMemRAM; - if totRAM = 0 then exit; //protección - usedRAM := pic.UsedMemRAM; - ramUse := usedRAM/ totRAM; - //Calcula ROM - romUse:= 0; //valor por defecto - totROM := pic.MaxFlash; - if totROM = 0 then exit; //protección - usedROM := pic.UsedMemFlash; - romUse := usedROM/totROM; - //Calcula STACK - TreeElems.main.UpdateCalledAll; //Debe haberse llenado TreeElems.main.lstCalled - //No considera el anidamiento por interrupciones - stkUse := TreeElems.main.maxNesting/8; -end; -procedure TCompiler.GenerateListReport(lins: TStrings); -{Genera un reporte detallado de la compialción} -var - curInst, opc: TPIC16Inst; - i: word; - OpCodeCoun: array[low(TPIC16Inst)..high(TPIC16Inst)] of integer; - tmpList: TStringList; - txt, OpCode, Times, state: String; - - fun: TxpEleFun; - caller : TxpEleCaller; - called : TxpElement; - exitCall: TxpExitCall; -begin - //////////////////////////////////////////////////////////// - //////////// Reporte de uso de memeoria /////////// - //////////////////////////////////////////////////////////// - lins.Add(RAMusedStr); - lins.Add(FLASHusedStr); - //////////////////////////////////////////////////////////// - //////////// Reporte de cuenta de instrucciones /////////// - //////////////////////////////////////////////////////////// - //Limpia contadores - for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin - OpCodeCoun[opc] := 0; - end; - //Cuenta apariciones - for i:=0 to high(cxp.pic.flash) do begin - if cxp.pic.flash[i].used then begin - cxp.pic.PCH := hi(i); - cxp.pic.PCL := lo(i); - curInst := cxp.pic.CurInstruction; - Inc(OpCodeCoun[curInst]); //Acumula - end; - end; - //Carga en lista para ordenar - tmpList:= TStringList.Create; - for opc := low(TPIC16Inst) to high(TPIC16Inst) do begin - tmpList.Add(Format('%.4d', [OpCodeCoun[Opc]]) + '-' + PIC16InstName[opc]); - end; - tmpList.Sort; //Ordena - //Muestra lista ordenada - lins.Add(';INSTRUCTION COUNTER'); - lins.Add(';==================='); - for i:=tmpList.Count-1 downto 0 do begin - txt := tmpList[i]; - OpCode := copy(txt , 6, 10); - Times := copy(txt , 1, 4); - if Times = '0000' then continue; - lins.Add(copy(OpCode + ' ',1,7) + '->'+ Times); - end; - tmpList.Destroy; - - //////////////////////////////////////////////////////////// - ////////////////// Reporte de Funciones /////////// - //////////////////////////////////////////////////////////// - lins.Add(''); - lins.Add(';PROCEDURE LIST'); - lins.Add(';==================='); - - lins.Add(';NAME USED POSIITON IN SOURCE'); - lins.Add(';----------------------- ------ -------------------------------'); - for fun in TreeElems.AllFuncs do begin - if fun.nCalled > 0 then begin - if fun.nCalled = 0 then - state := 'Unused' - else - state := RightStr(' '+IntToStr(fun.nCalled)+ '', 6); - - lins.Add( copy(fun.name + space(24) , 1, 24) + ' ' + - state + ' ' + - fun.srcDec.RowColString + ':' + fun.srcDec.fil - ); - end; - end; - - //////////////////////////////////////////////////////////// - ////////////////// Detalle de Funciones /////////// - //////////////////////////////////////////////////////////// - lins.Add(''); - lins.Add(';PROCEDURE DETAIL'); - lins.Add(';==================='); - for fun in TreeElems.AllFuncs do begin - if fun.nCalled > 0 then begin - lins.Add('------------------------------------'); - lins.Add('----- PROCEDURE ' + fun.name); - lins.Add('------------------------------------'); - lins.Add(' Caller Procedures:'); - if fun.lstCallers .Count = 0 then begin - lins.Add(' '); - end else begin - for caller in fun.lstCallers do begin - lins.Add(' - ' + caller.caller.Parent.name); - end; - end; - lins.Add(''); - - lins.Add(' Called Procedures:'); - if fun.lstCalled.Count = 0 then begin - lins.Add(' '); - end else begin - for called in fun.lstCalled do begin - lins.Add(' - ' + called.name); - end; - end; - lins.Add(''); - - lins.Add(' All Called Procedures:'); - if fun.lstCalledAll.Count = 0 then begin - lins.Add(' '); - end else begin - for called in fun.lstCalledAll do begin - lins.Add(' - ' + called.name); - end; - end; - lins.Add(''); - - lins.Add(' Exit Instruction Calls:'); - if fun.lstExitCalls.Count = 0 then begin - lins.Add(' '); - end else begin - for exitCall in fun.lstExitCalls do begin - lins.Add(' - Exit() in ' +exitCall.srcPos.RowColString); - end; - end; - lins.Add(''); - - end; +procedure TOperand.SetAsNull; +{Configura al operando como de tipo Null} +begin + {Se pone como constante, que es el tipo más simple, además se protege, pro si era + variable} + FSto := stConst; + FTyp := typNull; //Este es el tipo NULO +end; +function TOperand.StoOpStr: string; +{Devuelve lmacenamiento como cadena.} +begin + case Sto of + stConst : exit('Constant'); + stVariab, stVarRefVar, stVarRefExp: exit('Variable'); + stExpres: exit('Expression'); + else + exit(''); end; - //Detalles del programa principal - - lins.Add('------------------------------------'); - lins.Add('----- Main Program'); - lins.Add('------------------------------------'); - lins.Add(' Called Procedures:'); - if TreeElems.main.lstCalled.Count = 0 then begin - lins.Add(' '); - end else begin - for called in TreeElems.main.lstCalled do begin - lins.Add(' - ' + called.name); - end; +end; +function TOperand.StoOpChr: char; +{Devuelve lmacenamiento como caracter.} +begin + Result := ' '; + case Sto of + stConst : exit('k'); + stVariab: exit('v'); + stExpres: exit('X'); end; - lins.Add(''); - //Muestra el máximo nivel de anidamiento. - lins.Add('Max. Nesting = ' + IntToSTr(TreeElems.main.maxNesting)); - end; -constructor TCompiler.Create; +procedure TOperand.DefineRegister; begin - // hexFile := 'output.hex'; - inherited Create; - cIn.OnNewLine:=@cInNewLine; - mode := modPicPas; //Por defecto en sintaxis nueva - StartSyntax; //Debe hacerse solo una vez al inicio - DefCompiler; //Debe hacerse solo una vez al inicio + //llama al evento de pila + if Typ.OnDefRegister<> nil then Typ.OnDefRegister; end; -destructor TCompiler.Destroy; +function TOperand.FindOperator(const oper: string): TxpOperator; +//Recibe la cadena de un operador y devuelve una referencia a un objeto Toperator, del +//operando. Si no está definido el operador para este operando, devuelve nullOper. begin - inherited Destroy; + Result := Typ.FindBinaryOperator(oper); +end; +procedure SetLanguage(lang: string); +begin + case lang of + 'en': begin + dicClear; //it's yet in English + end; + 'es': begin + //Update messages + dicSet('Not implemented.', 'No implementado'); + dicSet('Duplicated identifier: "%s"', 'Identificador duplicado: "%s"'); + dicSet('Undefined type "%s"', 'Tipo "%s" no definido.'); + dicSet('";" expected.', 'Se esperaba ";"'); + dicSet('"%s" expected.', 'Se esperaba "%s"'); + dicSet('Type parameters error on %s', 'Error en tipo de parámetros de %s'); + dicSet('Unknown identifier: %s', 'Identificador desconocido: %s'); + dicSet('Function not implemented: %s', 'Función no implementada: "%s"'); + dicSet('Error in expression. ")" expected.', 'Error en expresión. Se esperaba ")"'); + dicSet('Operand expected.', 'Se esperaba operando.'); + dicSet('Illegal Operation: %s', 'Operación no válida: %s'); + dicSet('Undefined operator: %s for type: %s','No está definido el operador: %s para tipo: %s'); + dicSet('Duplicated function: %s','Función duplicada: %s'); + dicSet('Cannot apply the operator "%s" to type "%s"', 'No se puede aplicar el operador "%s" al tipo "%s"'); + end; + end; end; -initialization - //Es necesario crear solo una instancia del compilador. - cxp := TCompiler.Create; //Crea una instancia del compilador - -finalization - cxp.Destroy; end. -//2161 diff --git a/Source/ParserAsm.pas b/Source/ParserAsmPIC16.pas similarity index 96% rename from Source/ParserAsm.pas rename to Source/ParserAsmPIC16.pas index 2d78d9d5..d29bd103 100644 --- a/Source/ParserAsm.pas +++ b/Source/ParserAsmPIC16.pas @@ -1,11 +1,11 @@ {Unidad que implementa a la clase TParserAsm, que sirve como contenedor para implementar las funcionaliddes de procesamiento de bloques ensamblador. } -unit ParserAsm; +unit ParserAsmPIC16; {$mode objfpc}{$H+} interface uses - Classes, SysUtils, fgl, GenCod, Pic16Utils, SynFacilHighlighter, Globales, + Classes, SysUtils, fgl, GenCod_PIC16, Pic16Utils, SynFacilHighlighter, Globales, XpresBas, strutils, XpresElementsPIC; type diff --git a/Source/ParserAsm_PIC10.pas b/Source/ParserAsm_PIC10.pas new file mode 100644 index 00000000..f4cb1134 --- /dev/null +++ b/Source/ParserAsm_PIC10.pas @@ -0,0 +1,847 @@ +{Unidad que implementa a la clase TParserAsm, que sirve como contenedor para +implementar las funcionaliddes de procesamiento de bloques ensamblador. +} +unit ParserAsm_PIC10; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, fgl, SynFacilHighlighter, Pic10Utils, GenCod_PIC10, Globales, + XpresBas, strutils, XpresElementsPIC; + +type + //Datos de una etiqueta + TPicLabel = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + end; + TPicLabel_list = specialize TFPGObjectList; + + //Datos de una instrucción de salto, indefinido. + TPicUJump = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + idInst: TPIC10Inst; + end; + TPicUJump_list = specialize TFPGObjectList; + + { TParserAsm } + TParserAsm = class(TGenCod) + private + lexAsm : TSynFacilSyn; //lexer para analizar ASM + tokIni2 : integer; //Posición inicial del token actual + labels : TPicLabel_list; //Lista de etiquetas + uJumps : TPicUJump_list; //Lista de instrucciones GOTO o i_CALL, indefinidas + asmRow : integer; //número de fila explorada + procedure AddLabel(name: string; addr: integer); + procedure AddUJump(name: string; addr: integer; idInst: TPIC10Inst); + function CaptureAddress(const idInst: TPIC10Inst; var a: word): boolean; + function CaptureBitVar(out f, b: byte): boolean; + function CaptureByte(out k: byte): boolean; + function CaptureComma: boolean; + function CaptureDestinat(out d: TPIC10destin): boolean; + function CaptureNbit(var b: byte): boolean; + function CaptureRegister(out f: byte): boolean; + procedure EndASM; + procedure GenErrorAsm(msg: string); + procedure GenErrorAsm(msg: string; const Args: array of const); + procedure GenWarnAsm(msg: string); + function GetFaddress(addr: integer): byte; + function HaveByteInformation(out bytePos: byte): boolean; + function IsLabel(txt: string; out dir: integer): boolean; + function IsStartASM(var lin: string): boolean; + function IsEndASM(var lin: string): boolean; + procedure ProcASM(const AsmLin: string); + procedure ProcInstrASM; + procedure skipWhites; + procedure StartASM; + function tokType: integer; + protected + procedure ProcASMlime(const AsmLin: string); + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; + +implementation +var //Mensajes + ER_EXPEC_COMMA, ER_EXP_ADR_VAR, ER_EXP_CON_VAL, ER_NOGETADD_VAR, + ER_NOGETVAL_CON, ER_INV_ASMCODE: String; + ER_EXPECT_W_F, ER_SYNTAX_ERR_, ER_DUPLIC_LBL_, ER_EXPE_NUMBIT: String; + ER_EXPECT_ADDR, ER_EXPECT_BYTE, WA_ADDR_TRUNC, ER_UNDEF_LABEL_: String; + +procedure SetLanguage; +begin + GenCod_PIC10.SetLanguage; + {$I ..\language\tra_ParserAsm.pas} +end; + +{ TParserAsm } +procedure TParserAsm.GenErrorAsm(msg: string); +{Genera un error corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, [], p); +end; +procedure TParserAsm.GenErrorAsm(msg: string; const Args: array of const); +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, Args, p); +end; +procedure TParserAsm.GenWarnAsm(msg: string); +{Genera una advertencia corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := lexAsm.GetX; //corrige columna + GenWarnPos(msg, [], p); +end; +function TParserAsm.tokType: integer; inline; +begin + Result := lexAsm.GetTokenKind; +end; +procedure TParserAsm.skipWhites; +//salta blancos o comentarios +begin + if tokType = lexAsm.tnSpace then + lexAsm.Next; //quita espacios + //puede que siga comentario + if tokType = lexAsm.tnComment then + lexAsm.Next; + //después de un comentario no se espera nada. +end; +function TParserAsm.GetFaddress(addr: integer): byte; +{Obtiene una dirección de registro para una isntrucción ASM, truncando, si es necesario, +los bits adicionales.} +begin + if addr>255 then begin + addr := addr and $7F; + //Indica con advertencia + GenWarnAsm(WA_ADDR_TRUNC); + end; + Result := addr; +end; +procedure TParserAsm.AddLabel(name: string; addr: integer); +{Agrega una etiqueta a la lista} +var + lbl: TPicLabel; +begin + lbl := TPicLabel.Create; + lbl.txt:= UpCase(name); + lbl.add := addr; + labels.Add(lbl); +end; +procedure TParserAsm.AddUJump(name: string; addr: integer; idInst: TPIC10Inst); +{Agrega un salto indefinido a la lista} +var + jmp: TPicUJump; +begin + jmp := TPicUJump.Create; + jmp.txt:= UpCase(name); + jmp.add := addr; + jmp.idInst := idInst; + uJumps.Add(jmp); +end; +function TParserAsm.IsLabel(txt: string; out dir: integer): boolean; +{Indica si un nombre es una etiqueta. Si lo es, devuelve TRUE, y la dirección la retorna +en "dir".} +var + lbl: TPicLabel; +begin + //No se espera procesar muchsa etiquetas + for lbl in labels do begin + if lbl.txt = upcase(txt) then begin + dir := lbl.add; + exit(true); + end; + end; + //No encontró + exit(false); +end; +function TParserAsm.HaveByteInformation(out bytePos: byte): boolean; +begin +// state0 := lexAsm.State; //gaurda posición + if lexasm.GetToken = '.' then begin + //Hay precisión de campo + lexAsm.Next; + if UpCase(lexasm.GetToken) = 'LOW' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = 'HIGH' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else if lexasm.GetToken = '@' then begin + lexAsm.Next; + if UpCase(lexasm.GetToken) = '0' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '1' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '2' then begin + bytePos := 2; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '3' then begin + bytePos := 3; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else begin + //No tiene indicación de campo + exit(false); + end; +end; +function TParserAsm.CaptureByte(out k: byte): boolean; +{Captura un byte y devuelve en "k". Si no encuentra devuelve FALSE.} +var + n: Integer; + xcon: TxpEleCon; + ele: TxpElement; + bytePos: byte; + str: String; + xvar: TxpEleVar; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + n := StrToInt(lexAsm.GetToken); + if (n>255) then begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; + k:=n; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una constante o variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_CON_VAL); + exit; + end; + if ele.idClass = eltCons then begin + xcon := TxpEleCon(ele); + AddCallerTo(xcon); //lleva la cuenta + if (xcon.typ = typByte) or (xcon.typ = typChar) then begin + k := xcon.val.ValInt; + lexAsm.Next; + exit(true); + end else if xcon.typ = typWord then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + k := (xcon.val.ValInt and $FF); + end else begin //Byte alto + k := (xcon.val.ValInt and $FF00) >> 8; + end; + end else begin //No se indica byte + k := (xcon.val.ValInt and $FF); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETVAL_CON); + exit(false); + end; + end else if ele.idClass = eltVar then begin + //Para varaibles, se toma la dirección + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + n := xvar.addr; + k := GetFaddress(n); + lexAsm.Next; + exit(true); + end else begin + //No es constante + GenErrorAsm(ER_EXP_CON_VAL); + exit(false); + end; + end else if (tokType = lexasm.tnString) and (length(lexAsm.GetToken) = 3) then begin + //Es un caracter + str := lexAsm.GetToken; + k := ord(str[2]); //lee código de caracter + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; +end; +function TParserAsm.CaptureDestinat(out d: TPIC10destin): boolean; +{Captura el destino de una instrucción y devuelve en "d". Si no encuentra devuelve error} +var + dest: String; +begin + skipWhites; + dest := lexAsm.GetToken; + if (LowerCase(dest)='f') or (dest='1') then begin + d := toF; + lexAsm.Next; + exit(true); + end else if (LowerCase(dest)='w') or (dest='0') then begin + d := toW; + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_W_F); + exit(false); + end; +end; +function TParserAsm.CaptureNbit(var b: byte): boolean; +{Captura el número de bit de una instrucción y devuelve en "b". Si no encuentra devuelve error} +begin + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + b := StrToInt(lexAsm.GetToken); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //puede ser una constante + CaptureByte(b); //captura desplazamiento + if HayError then exit(false); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + exit(true); + end else begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; +end; +function TParserAsm.CaptureComma: boolean; +{Captura una coma. Si no encuentra devuelve error} +begin + skipWhites; + if lexAsm.GetToken = ',' then begin + lexAsm.Next; //toma la coma + Result := true; + exit; + end else begin + Result := false; + GenErrorAsm(ER_EXPEC_COMMA); + exit; + end; +end; +function TParserAsm.CaptureBitVar(out f, b: byte): boolean; +{Captura una variable de tipo Bit. Si no encuentra, devuelve FALSE (no genera error).} +var + ele: TxpElement; + xvar: TxpEleVar; +begin + skipWhites; + if tokType <> lexAsm.tnIdentif then exit(false); //no es identificador + //Hay un identificador + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then exit(false); //no se identifica + //Se identificó elemento + if ele.idClass <> eltVar then exit(false); + //Es variable + xvar := TxpEleVar(ele); + if not xvar.typ.IsBitSize then exit(false); + //Es variable bit o boolean + lexAsm.Next; //toma identificador + AddCallerTo(xvar); //lleva la cuenta + f := GetFaddress(xvar.adrBit.offs); + b := xvar.adrBit.bit; + exit(true); +end; +function TParserAsm.CaptureRegister(out f: byte): boolean; +{Captura la referencia a un registro y devuelve en "f". Si no encuentra devuelve error} +var + n: integer; + ele: TxpElement; + xvar: TxpEleVar; + bytePos: byte; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + if not TryStrToInt(lexAsm.GetToken, n) then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_H' then begin + //Es el registro de trabajo _H + f := H.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_E' then begin + //Es el registro de trabajo _H + f := E.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_U' then begin + //Es el registro de trabajo _H + f := U.offs; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_ADR_VAR); + exit; + end; + if ele.idClass = eltVar then begin + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + if xvar.typ.IsByteSize then begin + n := xvar.addr; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if xvar.typ.IsWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else if xvar.typ.IsDWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else if bytePos = 2 then begin //Byte alto + n := xvar.adrByte2.offs; + f := GetFaddress(n); + end else if bytePos = 3 then begin //Byte alto + n := xvar.adrByte3.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + //No es variable + GenErrorAsm(ER_EXP_ADR_VAR); + Result := false; + exit; + end; + end else begin + GenErrorAsm(ER_EXP_ADR_VAR); + //asmErrLin := asmRow; + Result := false; + exit; + end; +end; +function TParserAsm.CaptureAddress(const idInst: TPIC10Inst; var a: word + ): boolean; +{Captura una dirección a una instrucción y devuelve en "a". Si no encuentra genera +error y devuelve FALSE.} +var + dir: integer; + offset: byte; + ele: TxpElement; + xfun: TxpEleFun; +begin + Result := false; + skipWhites; + if lexAsm.GetToken = '$' then begin + //Es una dirección relativa + lexAsm.Next; + skipWhites; + //Puede tener + o - + if (lexAsm.GetToken= '') or (lexAsm.GetToken = ';') then begin + //Termina la instrucción sin o con es comentario + a := pic.iFlash; + Result := true; + exit; + end else if lexAsm.GetToken = '+' then begin + //Es dirección sumada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash + offset; + exit; + end else if lexAsm.GetToken = '-' then begin + //Es dirección restada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash - offset; + exit; + end else begin + //Sigue otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + end; + end else if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + a := StrToInt(lexAsm.GetToken); + lexAsm.Next; + Result := true; + exit; + end else if (tokType = lexAsm.tnIdentif) and IsLabel(lexAsm.GetToken, dir) then begin + //Es un identificador de etiqueta + a := dir; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if (ele <> nil) and (ele.idClass = eltFunc) then begin + //Es un identificador de función del árbol de sintaxis + xfun := TxpEleFun(ele); + AddCallerTo(xfun); //lleva la cuenta + a := xfun.adrr; //lee su dirección + lexAsm.Next; + Result := true; + exit; + end; + //Es un identificador, no definido. Puede definirse luego. + a := $00; + //Los saltos indefinidos, se guardan en la lista "uJumps" + AddUJump(lexAsm.GetToken, pic.iFlash, idInst); + lexAsm.Next; + Result := true; + exit; + end else begin + GenErrorAsm(ER_EXPECT_ADDR); + Result := false; + exit; + end; +end; +procedure TParserAsm.StartASM; //Inicia el procesamiento de código ASM +begin + asmRow := 1; //inicia línea + labels.Clear; //limpia etiquetas + uJumps.Clear; +end; +procedure TParserAsm.EndASM; //Termina el procesamiento de código ASM +var + jmp : TPicUJump; + loc: integer; +begin + //Completa los saltos indefinidos + if uJumps.Count>0 then begin + for jmp in uJumps do begin + if IsLabel(jmp.txt, loc) then begin + //Si existe la etiqueta + if jmp.idInst = i_GOTO then + pic.codGotoAt(jmp.add, loc) + else //Solo puede ser i_CALL + pic.codCallAt(jmp.add, loc); + end else begin + //No se enuentra + GenErrorAsm(ER_UNDEF_LABEL_, [jmp.txt]); + exit; + end; + end; + end; +end; +procedure TParserAsm.ProcInstrASM; +//Procesa una instrucción ASM +var + stx: string; + idInst: TPIC10Inst; + tok: String; + f : byte; + d: TPIC10destin; + b: byte; + a: word; + k: byte; +begin + tok := lexAsm.GetToken; + //verifica directiva ORG + if upcase(tok) = 'ORG' then begin + lexAsm.Next; + idInst := i_GOTO; //no debería ser necesario + if not CaptureAddress(idInst, a) then exit; + pic.iFlash := a; //¡CUIDADO! cambia PC + exit; + end; + //debería ser una instrucción + idInst := pic.FindOpcode(tok, stx); + if idInst = i_Inval then begin + GenErrorAsm(ER_INV_ASMCODE, [tok]); + exit; + end; + //es un código válido + lexAsm.Next; + case stx of + 'fd': begin //se espera 2 parámetros + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureDestinat(d) then exit; + pic.codAsmFD(idInst, f, d); + end; + 'f':begin + if not CaptureRegister(f) then exit; + pic.codAsmF(idInst, f); + end; + 'fb':begin //para instrucciones de tipo bit + if CaptureBitVar(f, b) then begin + //Es una referencia a variable bit. + end else begin + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureNbit(b) then exit; + end; + pic.codAsmFB(idInst, f, b); + end; + 'a': begin //i_CALL y GOTO + if not CaptureAddress(idInst, a) then exit; + pic.codAsmA(idInst, a); + end; + 'k': begin //i_MOVLW + if not CaptureByte(k) then exit; + pic.codAsmK(idInst, k); + end; + '': begin + pic.codAsm(idInst); + end; + end; + //no debe quedar más que espacios o comentarios + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + +end; +procedure TParserAsm.ProcASM(const AsmLin: string); +{Procesa una línea en ensamblador.} + function ExtractLabel: boolean; + {Extrae una etiqueta en la posición actual del lexer. Si no identifica + a una etiqueta, devuelve FALSE.} + var + lbl: String; + state0: TFaLexerState; + d: integer; + begin + if tokType <> lexAsm.tnIdentif then + exit(false); //No es + //Guarda posición por si acaso + state0 := lexAsm.State; + //Evalúa asumiendo que es etiqueta + lbl := lexAsm.GetToken; //guarda posible etiqueta + lexAsm.Next; + if lexAsm.GetToken = ':' then begin + //Definitivamente es una etiqueta + if IsLabel(lbl, d) then begin + GenErrorAsm(ER_DUPLIC_LBL_, [lbl]); + exit(false); + end; + AddLabel(lbl, pic.iFlash); + lexAsm.Next; + skipwhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción + ProcInstrASM; + if HayError then exit(false); + end; + exit(true); + end else begin + //No es etiqueta + lexAsm.State := state0; //recupera posición + exit(false) + end; + end; +begin + inc(asmRow); //cuenta líneas + if Trim(AsmLin) = '' then exit; + //procesa la destínea + lexAsm.SetLine(asmLin, asmRow); //inicia cadena + if tokType = lexAsm.tnKeyword then begin + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else if tokType = lexAsm.tnComment then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end else if tokType = lexAsm.tnSpace then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción o etiqueta + if tokType = lexAsm.tnKeyword then begin + //Es instrucción + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else begin + //Es otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end; + end else begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + skipWhites; //quita espacios +// msgbox(AsmLin); +end; +function TParserAsm.IsStartASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador inicial "ASM". Si es así, la recorta.} +begin + if not AnsiStartsText('asm', lin) then + exit(false); //definitivamente no es + //hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); //es exacto + end; + //podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[4] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //es por descarte + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); +end; +function TParserAsm.IsEndASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador final "END". Si es así, la recorta.} +begin + if not AnsiEndsText('end', lin) then + exit(false); //definitivamente no es + //Hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); //es exacto + end; + //Podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[length(lin)-3] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //Es por descarte + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); +end; +procedure TParserAsm.ProcASMlime(const AsmLin: string); +{Procesa una línea de código ASM. Notar que los bloques ASM pueden tener muchas líneas +pero el procesamiento, se hace siempre línea por línea, debido a cómo trabaja el +lexer.} +var + lin: String; +begin + lin := AsmLin; //crea copia para poder modificarla + //Extrae el texto entre los delimitadores de ensamblador + if IsStartASM(lin) then begin + //Como se ha recortado el "ASM", se debe compensar "tokIni2" + //Además se debe considerar si el delim. ASM, no inicia en 1. + tokIni2 := 3 + Cin.curCon.lex.GetX - 1; + //Es la primera línea de ensamblador + StartASM; + //puede incluir también al delimitador "end" + if IsEndASM(lin) then begin + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + ProcASM(lin); //procesa por si queda código + end; + end else if IsEndASM(lin) then begin + //Es la última línea de ensamblador + tokIni2 := 0; //En el margen izquierdo, porque no está el delimit. inicial "ASM" + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + //Es una línea común + tokIni2 := 0; //una línea común, siempre empieza en al margen izquierdo + ProcASM(lin); + end; +end; +constructor TParserAsm.Create; +begin + inherited Create; + labels := TPicLabel_list.Create(true); + uJumps := TPicUJump_list.Create(true); + {Define la sintaxis del lexer que se usará para analizar el código en ensamblador.} + lexAsm := TSynFacilSyn.Create(nil); //crea lexer para analzar ensamblador + lexAsm.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + lexAsm.DefTokContent('[0-9]', '[0-9.]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[$]','[0-9A-Fa-f]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[%]','[01]*', lexAsm.tnNumber); + lexAsm.AddIdentSpecList('ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('BCF BSF BTFSC BTFSS', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('RETLW RETURN SLEEP SUBLW XORLW', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('OPTION TRIS MOVLB', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ORG', lexAsm.tnKeyword); + lexAsm.DefTokDelim(';','', lexAsm.tnComment); + lexAsm.DefTokDelim('''','''', lexAsm.tnString); + lexAsm.Rebuild; + + callProcASMlime := @ProcASMlime; +end; +destructor TParserAsm.Destroy; +begin + lexAsm.Destroy; + uJumps.Destroy; + labels.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/ParserAsm_PIC16.pas b/Source/ParserAsm_PIC16.pas new file mode 100644 index 00000000..853e1a23 --- /dev/null +++ b/Source/ParserAsm_PIC16.pas @@ -0,0 +1,845 @@ +{Unidad que implementa a la clase TParserAsm, que sirve como contenedor para +implementar las funcionaliddes de procesamiento de bloques ensamblador. +} +unit ParserAsm_PIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, fgl, SynFacilHighlighter, Pic16Utils, GenCod_PIC16, Globales, + XpresBas, strutils, XpresElementsPIC; + +type + //Datos de una etiqueta + TPicLabel = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + end; + TPicLabel_list = specialize TFPGObjectList; + + //Datos de una instrucción de salto, indefinido. + TPicUJump = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + idInst: TPIC16Inst; + end; + TPicUJump_list = specialize TFPGObjectList; + + { TParserAsm } + TParserAsm = class(TGenCod) + private + lexAsm : TSynFacilSyn; //lexer para analizar ASM + tokIni2 : integer; //Posición inicial del token actual + labels : TPicLabel_list; //Lista de etiquetas + uJumps : TPicUJump_list; //Lista de instrucciones GOTO o i_CALL, indefinidas + asmRow : integer; //número de fila explorada + procedure AddLabel(name: string; addr: integer); + procedure AddUJump(name: string; addr: integer; idInst: TPIC16Inst); + function CaptureAddress(const idInst: TPIC16Inst; var a: word): boolean; + function CaptureBitVar(out f, b: byte): boolean; + function CaptureByte(out k: byte): boolean; + function CaptureComma: boolean; + function CaptureDestinat(out d: TPIC16destin): boolean; + function CaptureNbit(var b: byte): boolean; + function CaptureRegister(out f: byte): boolean; + procedure EndASM; + procedure GenErrorAsm(msg: string); + procedure GenErrorAsm(msg: string; const Args: array of const); + procedure GenWarnAsm(msg: string); + function GetFaddress(addr: integer): byte; + function HaveByteInformation(out bytePos: byte): boolean; + function IsLabel(txt: string; out dir: integer): boolean; + function IsStartASM(var lin: string): boolean; + function IsEndASM(var lin: string): boolean; + procedure ProcASM(const AsmLin: string); + procedure ProcInstrASM; + procedure skipWhites; + procedure StartASM; + function tokType: integer; + protected + procedure ProcASMlime(const AsmLin: string); + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; + +implementation +var //Mensajes + ER_EXPEC_COMMA, ER_EXP_ADR_VAR, ER_EXP_CON_VAL, ER_NOGETADD_VAR, + ER_NOGETVAL_CON, ER_INV_ASMCODE: String; + ER_EXPECT_W_F, ER_SYNTAX_ERR_, ER_DUPLIC_LBL_, ER_EXPE_NUMBIT: String; + ER_EXPECT_ADDR, ER_EXPECT_BYTE, WA_ADDR_TRUNC, ER_UNDEF_LABEL_: String; + +procedure SetLanguage; +begin + GenCod_PIC16.SetLanguage; + {$I ..\language\tra_ParserAsm.pas} +end; + +{ TParserAsm } +procedure TParserAsm.GenErrorAsm(msg: string); +{Genera un error corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, [], p); +end; +procedure TParserAsm.GenErrorAsm(msg: string; const Args: array of const); +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, Args, p); +end; +procedure TParserAsm.GenWarnAsm(msg: string); +{Genera una advertencia corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := lexAsm.GetX; //corrige columna + GenWarnPos(msg, [], p); +end; +function TParserAsm.tokType: integer; inline; +begin + Result := lexAsm.GetTokenKind; +end; +procedure TParserAsm.skipWhites; +//salta blancos o comentarios +begin + if tokType = lexAsm.tnSpace then + lexAsm.Next; //quita espacios + //puede que siga comentario + if tokType = lexAsm.tnComment then + lexAsm.Next; + //después de un comentario no se espera nada. +end; +function TParserAsm.GetFaddress(addr: integer): byte; +{Obtiene una dirección de registro para una isntrucción ASM, truncando, si es necesario, +los bits adicionales.} +begin + if addr>255 then begin + addr := addr and $7F; + //Indica con advertencia + GenWarnAsm(WA_ADDR_TRUNC); + end; + Result := addr; +end; +procedure TParserAsm.AddLabel(name: string; addr: integer); +{Agrega una etiqueta a la lista} +var + lbl: TPicLabel; +begin + lbl := TPicLabel.Create; + lbl.txt:= UpCase(name); + lbl.add := addr; + labels.Add(lbl); +end; +procedure TParserAsm.AddUJump(name: string; addr: integer; idInst: TPIC16Inst); +{Agrega un salto indefinido a la lista} +var + jmp: TPicUJump; +begin + jmp := TPicUJump.Create; + jmp.txt:= UpCase(name); + jmp.add := addr; + jmp.idInst := idInst; + uJumps.Add(jmp); +end; +function TParserAsm.IsLabel(txt: string; out dir: integer): boolean; +{Indica si un nombre es una etiqueta. Si lo es, devuelve TRUE, y la dirección la retorna +en "dir".} +var + lbl: TPicLabel; +begin + //No se espera procesar muchsa etiquetas + for lbl in labels do begin + if lbl.txt = upcase(txt) then begin + dir := lbl.add; + exit(true); + end; + end; + //No encontró + exit(false); +end; +function TParserAsm.HaveByteInformation(out bytePos: byte): boolean; +begin +// state0 := lexAsm.State; //gaurda posición + if lexasm.GetToken = '.' then begin + //Hay precisión de campo + lexAsm.Next; + if UpCase(lexasm.GetToken) = 'LOW' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = 'HIGH' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else if lexasm.GetToken = '@' then begin + lexAsm.Next; + if UpCase(lexasm.GetToken) = '0' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '1' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '2' then begin + bytePos := 2; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '3' then begin + bytePos := 3; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else begin + //No tiene indicación de campo + exit(false); + end; +end; +function TParserAsm.CaptureByte(out k: byte): boolean; +{Captura un byte y devuelve en "k". Si no encuentra devuelve FALSE.} +var + n: Integer; + xcon: TxpEleCon; + ele: TxpElement; + bytePos: byte; + str: String; + xvar: TxpEleVar; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + n := StrToInt(lexAsm.GetToken); + if (n>255) then begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; + k:=n; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una constante o variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_CON_VAL); + exit; + end; + if ele.idClass = eltCons then begin + xcon := TxpEleCon(ele); + AddCallerTo(xcon); //lleva la cuenta + if (xcon.typ = typByte) or (xcon.typ = typChar) then begin + k := xcon.val.ValInt; + lexAsm.Next; + exit(true); + end else if xcon.typ = typWord then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + k := (xcon.val.ValInt and $FF); + end else begin //Byte alto + k := (xcon.val.ValInt and $FF00) >> 8; + end; + end else begin //No se indica byte + k := (xcon.val.ValInt and $FF); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETVAL_CON); + exit(false); + end; + end else if ele.idClass = eltVar then begin + //Para varaibles, se toma la dirección + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + n := xvar.addr; + k := GetFaddress(n); + lexAsm.Next; + exit(true); + end else begin + //No es constante + GenErrorAsm(ER_EXP_CON_VAL); + exit(false); + end; + end else if (tokType = lexasm.tnString) and (length(lexAsm.GetToken) = 3) then begin + //Es un caracter + str := lexAsm.GetToken; + k := ord(str[2]); //lee código de caracter + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; +end; +function TParserAsm.CaptureDestinat(out d: TPIC16destin): boolean; +{Captura el destino de una instrucción y devuelve en "d". Si no encuentra devuelve error} +var + dest: String; +begin + skipWhites; + dest := lexAsm.GetToken; + if (LowerCase(dest)='f') or (dest='1') then begin + d := toF; + lexAsm.Next; + exit(true); + end else if (LowerCase(dest)='w') or (dest='0') then begin + d := toW; + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_W_F); + exit(false); + end; +end; +function TParserAsm.CaptureNbit(var b: byte): boolean; +{Captura el número de bit de una instrucción y devuelve en "b". Si no encuentra devuelve error} +begin + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + b := StrToInt(lexAsm.GetToken); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //puede ser una constante + CaptureByte(b); //captura desplazamiento + if HayError then exit(false); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + exit(true); + end else begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; +end; +function TParserAsm.CaptureComma: boolean; +{Captura una coma. Si no encuentra devuelve error} +begin + skipWhites; + if lexAsm.GetToken = ',' then begin + lexAsm.Next; //toma la coma + Result := true; + exit; + end else begin + Result := false; + GenErrorAsm(ER_EXPEC_COMMA); + exit; + end; +end; +function TParserAsm.CaptureBitVar(out f, b: byte): boolean; +{Captura una variable de tipo Bit. Si no encuentra, devuelve FALSE (no genera error).} +var + ele: TxpElement; + xvar: TxpEleVar; +begin + skipWhites; + if tokType <> lexAsm.tnIdentif then exit(false); //no es identificador + //Hay un identificador + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then exit(false); //no se identifica + //Se identificó elemento + if ele.idClass <> eltVar then exit(false); + //Es variable + xvar := TxpEleVar(ele); + if not xvar.typ.IsBitSize then exit(false); + //Es variable bit o boolean + lexAsm.Next; //toma identificador + AddCallerTo(xvar); //lleva la cuenta + f := GetFaddress(xvar.adrBit.offs); + b := xvar.adrBit.bit; + exit(true); +end; +function TParserAsm.CaptureRegister(out f: byte): boolean; +{Captura la referencia a un registro y devuelve en "f". Si no encuentra devuelve error} +var + n: integer; + ele: TxpElement; + xvar: TxpEleVar; + bytePos: byte; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + if not TryStrToInt(lexAsm.GetToken, n) then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_H' then begin + //Es el registro de trabajo _H + f := H.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_E' then begin + //Es el registro de trabajo _H + f := E.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_U' then begin + //Es el registro de trabajo _H + f := U.offs; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_ADR_VAR); + exit; + end; + if ele.idClass = eltVar then begin + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + if xvar.typ.IsByteSize then begin + n := xvar.addr; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if xvar.typ.IsWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else if xvar.typ.IsDWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else if bytePos = 2 then begin //Byte alto + n := xvar.adrByte2.offs; + f := GetFaddress(n); + end else if bytePos = 3 then begin //Byte alto + n := xvar.adrByte3.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + //No es variable + GenErrorAsm(ER_EXP_ADR_VAR); + Result := false; + exit; + end; + end else begin + GenErrorAsm(ER_EXP_ADR_VAR); + //asmErrLin := asmRow; + Result := false; + exit; + end; +end; +function TParserAsm.CaptureAddress(const idInst: TPIC16Inst; var a: word): boolean; +{Captura una dirección a una instrucción y devuelve en "a". Si no encuentra genera +error y devuelve FALSE.} +var + dir: integer; + offset: byte; + ele: TxpElement; + xfun: TxpEleFun; +begin + Result := false; + skipWhites; + if lexAsm.GetToken = '$' then begin + //Es una dirección relativa + lexAsm.Next; + skipWhites; + //Puede tener + o - + if (lexAsm.GetToken= '') or (lexAsm.GetToken = ';') then begin + //Termina la instrucción sin o con es comentario + a := pic.iFlash; + Result := true; + exit; + end else if lexAsm.GetToken = '+' then begin + //Es dirección sumada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash + offset; + exit; + end else if lexAsm.GetToken = '-' then begin + //Es dirección restada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash - offset; + exit; + end else begin + //Sigue otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + end; + end else if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + a := StrToInt(lexAsm.GetToken); + lexAsm.Next; + Result := true; + exit; + end else if (tokType = lexAsm.tnIdentif) and IsLabel(lexAsm.GetToken, dir) then begin + //Es un identificador de etiqueta + a := dir; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if (ele <> nil) and (ele.idClass = eltFunc) then begin + //Es un identificador de función del árbol de sintaxis + xfun := TxpEleFun(ele); + AddCallerTo(xfun); //lleva la cuenta + a := xfun.adrr; //lee su dirección + lexAsm.Next; + Result := true; + exit; + end; + //Es un identificador, no definido. Puede definirse luego. + a := $00; + //Los saltos indefinidos, se guardan en la lista "uJumps" + AddUJump(lexAsm.GetToken, pic.iFlash, idInst); + lexAsm.Next; + Result := true; + exit; + end else begin + GenErrorAsm(ER_EXPECT_ADDR); + Result := false; + exit; + end; +end; +procedure TParserAsm.StartASM; //Inicia el procesamiento de código ASM +begin + asmRow := 1; //inicia línea + labels.Clear; //limpia etiquetas + uJumps.Clear; +end; +procedure TParserAsm.EndASM; //Termina el procesamiento de código ASM +var + jmp : TPicUJump; + loc: integer; +begin + //Completa los saltos indefinidos + if uJumps.Count>0 then begin + for jmp in uJumps do begin + if IsLabel(jmp.txt, loc) then begin + //Si existe la etiqueta + if jmp.idInst = i_GOTO then + pic.codGotoAt(jmp.add, loc) + else //Solo puede ser i_CALL + pic.codCallAt(jmp.add, loc); + end else begin + //No se enuentra + GenErrorAsm(ER_UNDEF_LABEL_, [jmp.txt]); + exit; + end; + end; + end; +end; +procedure TParserAsm.ProcInstrASM; +//Procesa una instrucción ASM +var + stx: string; + idInst: TPIC16Inst; + tok: String; + f : byte; + d: TPIC16destin; + b: byte; + a: word; + k: byte; +begin + tok := lexAsm.GetToken; + //verifica directiva ORG + if upcase(tok) = 'ORG' then begin + lexAsm.Next; + idInst := i_GOTO; //no debería ser necesario + if not CaptureAddress(idInst, a) then exit; + pic.iFlash := a; //¡CUIDADO! cambia PC + exit; + end; + //debería ser una instrucción + idInst := pic.FindOpcode(tok, stx); + if idInst = i_Inval then begin + GenErrorAsm(ER_INV_ASMCODE, [tok]); + exit; + end; + //es un código válido + lexAsm.Next; + case stx of + 'fd': begin //se espera 2 parámetros + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureDestinat(d) then exit; + pic.codAsmFD(idInst, f, d); + end; + 'f':begin + if not CaptureRegister(f) then exit; + pic.codAsmF(idInst, f); + end; + 'fb':begin //para instrucciones de tipo bit + if CaptureBitVar(f, b) then begin + //Es una referencia a variable bit. + end else begin + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureNbit(b) then exit; + end; + pic.codAsmFB(idInst, f, b); + end; + 'a': begin //i_CALL y GOTO + if not CaptureAddress(idInst, a) then exit; + pic.codAsmA(idInst, a); + end; + 'k': begin //i_MOVLW + if not CaptureByte(k) then exit; + pic.codAsmK(idInst, k); + end; + '': begin + pic.codAsm(idInst); + end; + end; + //no debe quedar más que espacios o comentarios + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + +end; +procedure TParserAsm.ProcASM(const AsmLin: string); +{Procesa una línea en ensamblador.} + function ExtractLabel: boolean; + {Extrae una etiqueta en la posición actual del lexer. Si no identifica + a una etiqueta, devuelve FALSE.} + var + lbl: String; + state0: TFaLexerState; + d: integer; + begin + if tokType <> lexAsm.tnIdentif then + exit(false); //No es + //Guarda posición por si acaso + state0 := lexAsm.State; + //Evalúa asumiendo que es etiqueta + lbl := lexAsm.GetToken; //guarda posible etiqueta + lexAsm.Next; + if lexAsm.GetToken = ':' then begin + //Definitivamente es una etiqueta + if IsLabel(lbl, d) then begin + GenErrorAsm(ER_DUPLIC_LBL_, [lbl]); + exit(false); + end; + AddLabel(lbl, pic.iFlash); + lexAsm.Next; + skipwhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción + ProcInstrASM; + if HayError then exit(false); + end; + exit(true); + end else begin + //No es etiqueta + lexAsm.State := state0; //recupera posición + exit(false) + end; + end; +begin + inc(asmRow); //cuenta líneas + if Trim(AsmLin) = '' then exit; + //procesa la destínea + lexAsm.SetLine(asmLin, asmRow); //inicia cadena + if tokType = lexAsm.tnKeyword then begin + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else if tokType = lexAsm.tnComment then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end else if tokType = lexAsm.tnSpace then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción o etiqueta + if tokType = lexAsm.tnKeyword then begin + //Es instrucción + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else begin + //Es otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end; + end else begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + skipWhites; //quita espacios +// msgbox(AsmLin); +end; +function TParserAsm.IsStartASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador inicial "ASM". Si es así, la recorta.} +begin + if not AnsiStartsText('asm', lin) then + exit(false); //definitivamente no es + //hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); //es exacto + end; + //podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[4] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //es por descarte + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); +end; +function TParserAsm.IsEndASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador final "END". Si es así, la recorta.} +begin + if not AnsiEndsText('end', lin) then + exit(false); //definitivamente no es + //Hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); //es exacto + end; + //Podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[length(lin)-3] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //Es por descarte + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); +end; +procedure TParserAsm.ProcASMlime(const AsmLin: string); +{Procesa una línea de código ASM. Notar que los bloques ASM pueden tener muchas líneas +pero el procesamiento, se hace siempre línea por línea, debido a cómo trabaja el +lexer.} +var + lin: String; +begin + lin := AsmLin; //crea copia para poder modificarla + //Extrae el texto entre los delimitadores de ensamblador + if IsStartASM(lin) then begin + //Como se ha recortado el "ASM", se debe compensar "tokIni2" + //Además se debe considerar si el delim. ASM, no inicia en 1. + tokIni2 := 3 + Cin.curCon.lex.GetX - 1; + //Es la primera línea de ensamblador + StartASM; + //puede incluir también al delimitador "end" + if IsEndASM(lin) then begin + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + ProcASM(lin); //procesa por si queda código + end; + end else if IsEndASM(lin) then begin + //Es la última línea de ensamblador + tokIni2 := 0; //En el margen izquierdo, porque no está el delimit. inicial "ASM" + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + //Es una línea común + tokIni2 := 0; //una línea común, siempre empieza en al margen izquierdo + ProcASM(lin); + end; +end; +constructor TParserAsm.Create; +begin + inherited Create; + labels := TPicLabel_list.Create(true); + uJumps := TPicUJump_list.Create(true); + {Define la sintaxis del lexer que se usará para analizar el código en ensamblador.} + lexAsm := TSynFacilSyn.Create(nil); //crea lexer para analzar ensamblador + lexAsm.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + lexAsm.DefTokContent('[0-9]', '[0-9.]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[$]','[0-9A-Fa-f]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[%]','[01]*', lexAsm.tnNumber); + lexAsm.AddIdentSpecList('ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('BCF BSF BTFSC BTFSS', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('RETLW RETURN SLEEP SUBLW XORLW', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ORG', lexAsm.tnKeyword); + lexAsm.DefTokDelim(';','', lexAsm.tnComment); + lexAsm.DefTokDelim('''','''', lexAsm.tnString); + lexAsm.Rebuild; + + callProcASMlime := @ProcASMlime; +end; +destructor TParserAsm.Destroy; +begin + lexAsm.Destroy; + uJumps.Destroy; + labels.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/ParserAsm_PIC17.pas b/Source/ParserAsm_PIC17.pas new file mode 100644 index 00000000..187c8517 --- /dev/null +++ b/Source/ParserAsm_PIC17.pas @@ -0,0 +1,845 @@ +{Unidad que implementa a la clase TParserAsm, que sirve como contenedor para +implementar las funcionaliddes de procesamiento de bloques ensamblador. +} +unit ParserAsm_PIC17; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, fgl, SynFacilHighlighter, Pic17Utils, GenCod_PIC17, Globales, + XpresBas, strutils, XpresElementsPIC; + +type + //Datos de una etiqueta + TPicLabel = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + end; + TPicLabel_list = specialize TFPGObjectList; + + //Datos de una instrucción de salto, indefinido. + TPicUJump = class + txt: string; //nombre de la etiqueta + add: integer; //dirección + idInst: TPIC17Inst; + end; + TPicUJump_list = specialize TFPGObjectList; + + { TParserAsm } + TParserAsm = class(TGenCod) + private + lexAsm : TSynFacilSyn; //lexer para analizar ASM + tokIni2 : integer; //Posición inicial del token actual + labels : TPicLabel_list; //Lista de etiquetas + uJumps : TPicUJump_list; //Lista de instrucciones GOTO o i_CALL, indefinidas + asmRow : integer; //número de fila explorada + procedure AddLabel(name: string; addr: integer); + procedure AddUJump(name: string; addr: integer; idInst: TPIC17Inst); + function CaptureAddress(const idInst: TPIC17Inst; var a: word): boolean; + function CaptureBitVar(out f, b: byte): boolean; + function CaptureByte(out k: byte): boolean; + function CaptureComma: boolean; + function CaptureDestinat(out d: TPIC17destin): boolean; + function CaptureNbit(var b: byte): boolean; + function CaptureRegister(out f: byte): boolean; + procedure EndASM; + procedure GenErrorAsm(msg: string); + procedure GenErrorAsm(msg: string; const Args: array of const); + procedure GenWarnAsm(msg: string); + function GetFaddress(addr: integer): byte; + function HaveByteInformation(out bytePos: byte): boolean; + function IsLabel(txt: string; out dir: integer): boolean; + function IsStartASM(var lin: string): boolean; + function IsEndASM(var lin: string): boolean; + procedure ProcASM(const AsmLin: string); + procedure ProcInstrASM; + procedure skipWhites; + procedure StartASM; + function tokType: integer; + protected + procedure ProcASMlime(const AsmLin: string); + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; + +implementation +var //Mensajes + ER_EXPEC_COMMA, ER_EXP_ADR_VAR, ER_EXP_CON_VAL, ER_NOGETADD_VAR, + ER_NOGETVAL_CON, ER_INV_ASMCODE: String; + ER_EXPECT_W_F, ER_SYNTAX_ERR_, ER_DUPLIC_LBL_, ER_EXPE_NUMBIT: String; + ER_EXPECT_ADDR, ER_EXPECT_BYTE, WA_ADDR_TRUNC, ER_UNDEF_LABEL_: String; + +procedure SetLanguage; +begin + GenCod_PIC17.SetLanguage; + {$I ..\language\tra_ParserAsm.pas} +end; + +{ TParserAsm } +procedure TParserAsm.GenErrorAsm(msg: string); +{Genera un error corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, [], p); +end; +procedure TParserAsm.GenErrorAsm(msg: string; const Args: array of const); +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni2 + lexAsm.GetX; //corrige columna + GenErrorPos(msg, Args, p); +end; +procedure TParserAsm.GenWarnAsm(msg: string); +{Genera una advertencia corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := lexAsm.GetX; //corrige columna + GenWarnPos(msg, [], p); +end; +function TParserAsm.tokType: integer; inline; +begin + Result := lexAsm.GetTokenKind; +end; +procedure TParserAsm.skipWhites; +//salta blancos o comentarios +begin + if tokType = lexAsm.tnSpace then + lexAsm.Next; //quita espacios + //puede que siga comentario + if tokType = lexAsm.tnComment then + lexAsm.Next; + //después de un comentario no se espera nada. +end; +function TParserAsm.GetFaddress(addr: integer): byte; +{Obtiene una dirección de registro para una isntrucción ASM, truncando, si es necesario, +los bits adicionales.} +begin + if addr>255 then begin + addr := addr and $7F; + //Indica con advertencia + GenWarnAsm(WA_ADDR_TRUNC); + end; + Result := addr; +end; +procedure TParserAsm.AddLabel(name: string; addr: integer); +{Agrega una etiqueta a la lista} +var + lbl: TPicLabel; +begin + lbl := TPicLabel.Create; + lbl.txt:= UpCase(name); + lbl.add := addr; + labels.Add(lbl); +end; +procedure TParserAsm.AddUJump(name: string; addr: integer; idInst: TPIC17Inst); +{Agrega un salto indefinido a la lista} +var + jmp: TPicUJump; +begin + jmp := TPicUJump.Create; + jmp.txt:= UpCase(name); + jmp.add := addr; + jmp.idInst := idInst; + uJumps.Add(jmp); +end; +function TParserAsm.IsLabel(txt: string; out dir: integer): boolean; +{Indica si un nombre es una etiqueta. Si lo es, devuelve TRUE, y la dirección la retorna +en "dir".} +var + lbl: TPicLabel; +begin + //No se espera procesar muchsa etiquetas + for lbl in labels do begin + if lbl.txt = upcase(txt) then begin + dir := lbl.add; + exit(true); + end; + end; + //No encontró + exit(false); +end; +function TParserAsm.HaveByteInformation(out bytePos: byte): boolean; +begin +// state0 := lexAsm.State; //gaurda posición + if lexasm.GetToken = '.' then begin + //Hay precisión de campo + lexAsm.Next; + if UpCase(lexasm.GetToken) = 'LOW' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = 'HIGH' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else if lexasm.GetToken = '@' then begin + lexAsm.Next; + if UpCase(lexasm.GetToken) = '0' then begin + bytePos := 0; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '1' then begin + bytePos := 1; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '2' then begin + bytePos := 2; + lexAsm.Next; + exit(true); + end else if UpCase(lexasm.GetToken) = '3' then begin + bytePos := 3; + lexAsm.Next; + exit(true); + end else begin + //No es ninguno + exit(false); + end; + end else begin + //No tiene indicación de campo + exit(false); + end; +end; +function TParserAsm.CaptureByte(out k: byte): boolean; +{Captura un byte y devuelve en "k". Si no encuentra devuelve FALSE.} +var + n: Integer; + xcon: TxpEleCon; + ele: TxpElement; + bytePos: byte; + str: String; + xvar: TxpEleVar; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + n := StrToInt(lexAsm.GetToken); + if (n>255) then begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; + k:=n; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una constante o variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_CON_VAL); + exit; + end; + if ele.idClass = eltCons then begin + xcon := TxpEleCon(ele); + AddCallerTo(xcon); //lleva la cuenta + if (xcon.typ = typByte) or (xcon.typ = typChar) then begin + k := xcon.val.ValInt; + lexAsm.Next; + exit(true); + end else if xcon.typ = typWord then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + k := (xcon.val.ValInt and $FF); + end else begin //Byte alto + k := (xcon.val.ValInt and $FF00) >> 8; + end; + end else begin //No se indica byte + k := (xcon.val.ValInt and $FF); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETVAL_CON); + exit(false); + end; + end else if ele.idClass = eltVar then begin + //Para varaibles, se toma la dirección + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + n := xvar.addr; + k := GetFaddress(n); + lexAsm.Next; + exit(true); + end else begin + //No es constante + GenErrorAsm(ER_EXP_CON_VAL); + exit(false); + end; + end else if (tokType = lexasm.tnString) and (length(lexAsm.GetToken) = 3) then begin + //Es un caracter + str := lexAsm.GetToken; + k := ord(str[2]); //lee código de caracter + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_BYTE); + exit(false); + end; +end; +function TParserAsm.CaptureDestinat(out d: TPIC17destin): boolean; +{Captura el destino de una instrucción y devuelve en "d". Si no encuentra devuelve error} +var + dest: String; +begin + skipWhites; + dest := lexAsm.GetToken; + if (LowerCase(dest)='f') or (dest='1') then begin + d := toF; + lexAsm.Next; + exit(true); + end else if (LowerCase(dest)='w') or (dest='0') then begin + d := toW; + lexAsm.Next; + exit(true); + end else begin + GenErrorAsm(ER_EXPECT_W_F); + exit(false); + end; +end; +function TParserAsm.CaptureNbit(var b: byte): boolean; +{Captura el número de bit de una instrucción y devuelve en "b". Si no encuentra devuelve error} +begin + skipWhites; + if tokType = lexAsm.tnNumber then begin + //es una dirección numérica + b := StrToInt(lexAsm.GetToken); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + lexAsm.Next; + exit(true); + end else if tokType = lexAsm.tnIdentif then begin + //puede ser una constante + CaptureByte(b); //captura desplazamiento + if HayError then exit(false); + if (b>7) then begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; + exit(true); + end else begin + GenErrorAsm(ER_EXPE_NUMBIT); + exit(false); + end; +end; +function TParserAsm.CaptureComma: boolean; +{Captura una coma. Si no encuentra devuelve error} +begin + skipWhites; + if lexAsm.GetToken = ',' then begin + lexAsm.Next; //toma la coma + Result := true; + exit; + end else begin + Result := false; + GenErrorAsm(ER_EXPEC_COMMA); + exit; + end; +end; +function TParserAsm.CaptureBitVar(out f, b: byte): boolean; +{Captura una variable de tipo Bit. Si no encuentra, devuelve FALSE (no genera error).} +var + ele: TxpElement; + xvar: TxpEleVar; +begin + skipWhites; + if tokType <> lexAsm.tnIdentif then exit(false); //no es identificador + //Hay un identificador + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then exit(false); //no se identifica + //Se identificó elemento + if ele.idClass <> eltVar then exit(false); + //Es variable + xvar := TxpEleVar(ele); + if not xvar.typ.IsBitSize then exit(false); + //Es variable bit o boolean + lexAsm.Next; //toma identificador + AddCallerTo(xvar); //lleva la cuenta + f := GetFaddress(xvar.adrBit.offs); + b := xvar.adrBit.bit; + exit(true); +end; +function TParserAsm.CaptureRegister(out f: byte): boolean; +{Captura la referencia a un registro y devuelve en "f". Si no encuentra devuelve error} +var + n: integer; + ele: TxpElement; + xvar: TxpEleVar; + bytePos: byte; +begin + Result := false; + skipWhites; + if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + if not TryStrToInt(lexAsm.GetToken, n) then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_H' then begin + //Es el registro de trabajo _H + f := H.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_E' then begin + //Es el registro de trabajo _H + f := E.offs; + lexAsm.Next; + Result := true; + exit; + end else if lexAsm.GetToken = '_U' then begin + //Es el registro de trabajo _H + f := U.offs; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + //Es un identificador, puede ser referencia a una variable + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if ele = nil then begin + //No identifica a este elemento + GenErrorAsm(ER_EXP_ADR_VAR); + exit; + end; + if ele.idClass = eltVar then begin + xvar := TxpEleVar(ele); + AddCallerTo(xvar); //lleva la cuenta + if xvar.typ.IsByteSize then begin + n := xvar.addr; + f := GetFaddress(n); + lexAsm.Next; + Result := true; + exit; + end else if xvar.typ.IsWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else if xvar.typ.IsDWordSize then begin + lexAsm.Next; + if HaveByteInformation(bytePos) then begin + //Hay precisión de byte + if bytePos = 0 then begin //Byte bajo + n := xvar.adrByte0.offs; + f := GetFaddress(n); + end else if bytePos = 1 then begin //Byte alto + n := xvar.adrByte1.offs; + f := GetFaddress(n); + end else if bytePos = 2 then begin //Byte alto + n := xvar.adrByte2.offs; + f := GetFaddress(n); + end else if bytePos = 3 then begin //Byte alto + n := xvar.adrByte3.offs; + f := GetFaddress(n); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + n := xvar.addr; + f := GetFaddress(n); + end; + exit(true); + end else begin + GenErrorAsm(ER_NOGETADD_VAR); + exit(false); + end; + end else begin + //No es variable + GenErrorAsm(ER_EXP_ADR_VAR); + Result := false; + exit; + end; + end else begin + GenErrorAsm(ER_EXP_ADR_VAR); + //asmErrLin := asmRow; + Result := false; + exit; + end; +end; +function TParserAsm.CaptureAddress(const idInst: TPIC17Inst; var a: word): boolean; +{Captura una dirección a una instrucción y devuelve en "a". Si no encuentra genera +error y devuelve FALSE.} +var + dir: integer; + offset: byte; + ele: TxpElement; + xfun: TxpEleFun; +begin + Result := false; + skipWhites; + if lexAsm.GetToken = '$' then begin + //Es una dirección relativa + lexAsm.Next; + skipWhites; + //Puede tener + o - + if (lexAsm.GetToken= '') or (lexAsm.GetToken = ';') then begin + //Termina la instrucción sin o con es comentario + a := pic.iFlash; + Result := true; + exit; + end else if lexAsm.GetToken = '+' then begin + //Es dirección sumada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash + offset; + exit; + end else if lexAsm.GetToken = '-' then begin + //Es dirección restada + lexAsm.Next; + skipWhites; + CaptureByte(offset); //captura desplazamiento + if HayError then exit(false); + Result := true; + a := pic.iFlash - offset; + exit; + end else begin + //Sigue otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + end; + end else if tokType = lexAsm.tnNumber then begin + //Es una dirección numérica + a := StrToInt(lexAsm.GetToken); + lexAsm.Next; + Result := true; + exit; + end else if (tokType = lexAsm.tnIdentif) and IsLabel(lexAsm.GetToken, dir) then begin + //Es un identificador de etiqueta + a := dir; + lexAsm.Next; + Result := true; + exit; + end else if tokType = lexAsm.tnIdentif then begin + ele := TreeElems.FindFirst(lexAsm.GetToken); //identifica elemento + if (ele <> nil) and (ele.idClass = eltFunc) then begin + //Es un identificador de función del árbol de sintaxis + xfun := TxpEleFun(ele); + AddCallerTo(xfun); //lleva la cuenta + a := xfun.adrr; //lee su dirección + lexAsm.Next; + Result := true; + exit; + end; + //Es un identificador, no definido. Puede definirse luego. + a := $00; + //Los saltos indefinidos, se guardan en la lista "uJumps" + AddUJump(lexAsm.GetToken, pic.iFlash, idInst); + lexAsm.Next; + Result := true; + exit; + end else begin + GenErrorAsm(ER_EXPECT_ADDR); + Result := false; + exit; + end; +end; +procedure TParserAsm.StartASM; //Inicia el procesamiento de código ASM +begin + asmRow := 1; //inicia línea + labels.Clear; //limpia etiquetas + uJumps.Clear; +end; +procedure TParserAsm.EndASM; //Termina el procesamiento de código ASM +var + jmp : TPicUJump; + loc: integer; +begin + //Completa los saltos indefinidos + if uJumps.Count>0 then begin + for jmp in uJumps do begin + if IsLabel(jmp.txt, loc) then begin + //Si existe la etiqueta + if jmp.idInst = i_GOTO then + pic.codGotoAt(jmp.add, loc) + else //Solo puede ser i_CALL + pic.codCallAt(jmp.add, loc); + end else begin + //No se enuentra + GenErrorAsm(ER_UNDEF_LABEL_, [jmp.txt]); + exit; + end; + end; + end; +end; +procedure TParserAsm.ProcInstrASM; +//Procesa una instrucción ASM +var + stx: string; + idInst: TPIC17Inst; + tok: String; + f : byte; + d: TPIC17destin; + b: byte; + a: word; + k: byte; +begin + tok := lexAsm.GetToken; + //verifica directiva ORG + if upcase(tok) = 'ORG' then begin + lexAsm.Next; + idInst := i_GOTO; //no debería ser necesario + if not CaptureAddress(idInst, a) then exit; + pic.iFlash := a; //¡CUIDADO! cambia PC + exit; + end; + //debería ser una instrucción + idInst := pic.FindOpcode(tok, stx); + if idInst = i_Inval then begin + GenErrorAsm(ER_INV_ASMCODE, [tok]); + exit; + end; + //es un código válido + lexAsm.Next; + case stx of + 'fd': begin //se espera 2 parámetros + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureDestinat(d) then exit; + pic.codAsmFD(idInst, f, d); + end; + 'f':begin + if not CaptureRegister(f) then exit; + pic.codAsmF(idInst, f); + end; + 'fb':begin //para instrucciones de tipo bit + if CaptureBitVar(f, b) then begin + //Es una referencia a variable bit. + end else begin + if not CaptureRegister(f) then exit; + if not CaptureComma then exit; + if not CaptureNbit(b) then exit; + end; + pic.codAsmFB(idInst, f, b); + end; + 'a': begin //i_CALL y GOTO + if not CaptureAddress(idInst, a) then exit; + pic.codAsmA(idInst, a); + end; + 'k': begin //i_MOVLW + if not CaptureByte(k) then exit; + pic.codAsmK(idInst, k); + end; + '': begin + pic.codAsm(idInst); + end; + end; + //no debe quedar más que espacios o comentarios + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + +end; +procedure TParserAsm.ProcASM(const AsmLin: string); +{Procesa una línea en ensamblador.} + function ExtractLabel: boolean; + {Extrae una etiqueta en la posición actual del lexer. Si no identifica + a una etiqueta, devuelve FALSE.} + var + lbl: String; + state0: TFaLexerState; + d: integer; + begin + if tokType <> lexAsm.tnIdentif then + exit(false); //No es + //Guarda posición por si acaso + state0 := lexAsm.State; + //Evalúa asumiendo que es etiqueta + lbl := lexAsm.GetToken; //guarda posible etiqueta + lexAsm.Next; + if lexAsm.GetToken = ':' then begin + //Definitivamente es una etiqueta + if IsLabel(lbl, d) then begin + GenErrorAsm(ER_DUPLIC_LBL_, [lbl]); + exit(false); + end; + AddLabel(lbl, pic.iFlash); + lexAsm.Next; + skipwhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción + ProcInstrASM; + if HayError then exit(false); + end; + exit(true); + end else begin + //No es etiqueta + lexAsm.State := state0; //recupera posición + exit(false) + end; + end; +begin + inc(asmRow); //cuenta líneas + if Trim(AsmLin) = '' then exit; + //procesa la destínea + lexAsm.SetLine(asmLin, asmRow); //inicia cadena + if tokType = lexAsm.tnKeyword then begin + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else if tokType = lexAsm.tnComment then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end else if tokType = lexAsm.tnSpace then begin + skipWhites; + if tokType <> lexAsm.tnEol then begin + //Hay algo más. Solo puede ser una instrucción o etiqueta + if tokType = lexAsm.tnKeyword then begin + //Es instrucción + ProcInstrASM; + if HayError then exit; + end else if Extractlabel then begin + //Era una etiqueta + end else begin + //Es otra cosa + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + end; + end else begin + GenErrorAsm(ER_SYNTAX_ERR_, [lexAsm.GetToken]); + exit; + end; + skipWhites; //quita espacios +// msgbox(AsmLin); +end; +function TParserAsm.IsStartASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador inicial "ASM". Si es así, la recorta.} +begin + if not AnsiStartsText('asm', lin) then + exit(false); //definitivamente no es + //hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); //es exacto + end; + //podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[4] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //es por descarte + lin := copy(lin, 4, length(lin)); //quita "asm" + exit(true); +end; +function TParserAsm.IsEndASM(var lin: string): boolean; +{Indica si una línea contiene al delimitador final "END". Si es así, la recorta.} +begin + if not AnsiEndsText('end', lin) then + exit(false); //definitivamente no es + //Hay coincidencia pero hay que analziar más + if length(lin) = 3 then begin + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); //es exacto + end; + //Podrìa ser, pero hay que descartar que no sea parte de un identificador + if lin[length(lin)-3] in ['a'..'z', 'A'..'Z', '0'..'9', '_'] THEN + exit(false); //es parte de un identificador + //Es por descarte + lin := copy(Lin, 1, length(Lin)-3); //quita "end" + exit(true); +end; +procedure TParserAsm.ProcASMlime(const AsmLin: string); +{Procesa una línea de código ASM. Notar que los bloques ASM pueden tener muchas líneas +pero el procesamiento, se hace siempre línea por línea, debido a cómo trabaja el +lexer.} +var + lin: String; +begin + lin := AsmLin; //crea copia para poder modificarla + //Extrae el texto entre los delimitadores de ensamblador + if IsStartASM(lin) then begin + //Como se ha recortado el "ASM", se debe compensar "tokIni2" + //Además se debe considerar si el delim. ASM, no inicia en 1. + tokIni2 := 3 + Cin.curCon.lex.GetX - 1; + //Es la primera línea de ensamblador + StartASM; + //puede incluir también al delimitador "end" + if IsEndASM(lin) then begin + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + ProcASM(lin); //procesa por si queda código + end; + end else if IsEndASM(lin) then begin + //Es la última línea de ensamblador + tokIni2 := 0; //En el margen izquierdo, porque no está el delimit. inicial "ASM" + ProcASM(lin); //procesa por si queda código + EndASM; + end else begin + //Es una línea común + tokIni2 := 0; //una línea común, siempre empieza en al margen izquierdo + ProcASM(lin); + end; +end; +constructor TParserAsm.Create; +begin + inherited Create; + labels := TPicLabel_list.Create(true); + uJumps := TPicUJump_list.Create(true); + {Define la sintaxis del lexer que se usará para analizar el código en ensamblador.} + lexAsm := TSynFacilSyn.Create(nil); //crea lexer para analzar ensamblador + lexAsm.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + lexAsm.DefTokContent('[0-9]', '[0-9.]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[$]','[0-9A-Fa-f]*', lexAsm.tnNumber); + lexAsm.DefTokContent('[%]','[01]*', lexAsm.tnNumber); + lexAsm.AddIdentSpecList('ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('BCF BSF BTFSC BTFSS', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('RETLW RETURN SLEEP SUBLW XORLW', lexAsm.tnKeyword); + lexAsm.AddIdentSpecList('ORG', lexAsm.tnKeyword); + lexAsm.DefTokDelim(';','', lexAsm.tnComment); + lexAsm.DefTokDelim('''','''', lexAsm.tnString); + lexAsm.Rebuild; + + callProcASMlime := @ProcASMlime; +end; +destructor TParserAsm.Destroy; +begin + lexAsm.Destroy; + uJumps.Destroy; + labels.Destroy; + inherited Destroy; +end; + +end. + diff --git a/Source/ParserDirec.inc b/Source/ParserDirec.inc new file mode 100644 index 00000000..d3f5a12f --- /dev/null +++ b/Source/ParserDirec.inc @@ -0,0 +1 @@ + diff --git a/Source/ParserDirec.pas b/Source/ParserDirec.pas index c59003fc..11dbe410 100644 --- a/Source/ParserDirec.pas +++ b/Source/ParserDirec.pas @@ -1,12 +1,11 @@ -{Unidad que implementa a la clase TParserDirec, que sirve como contenedor para -implementar las funcionaliddes de procesamiento de directivas. -} +{Esta unidad Define a la clase "TParserDirecBase" que es una capa que se coloca sobre +TCompilerBase para implementar las funcionalidades del "Parser" para las directivas.} unit ParserDirec; {$mode objfpc}{$H+} interface uses - Classes, SysUtils, ParserAsm, fgl, math, SynFacilHighlighter, Globales, - XpresElementsPIC, Pic16Devices, MisUtils, XpresBas, LCLProc, Graphics; + Classes, SysUtils, fgl, math, Graphics, CompBase, SynFacilHighlighter, XpresBas, + MisUtils, Globales, XpresElementsPIC, CompMain; type //Tipos para manejo de expresiones TDirDatType = (ddtNumber, ddtString); @@ -31,6 +30,8 @@ interface TDirEveWriteNum = procedure(AValue: Single) of object; TDirEveReadStr = function: String of object; TDirEveWriteStr = procedure(AValue: String) of object; + TDirEveCallProc = procedure of object; + { TDirVar } //Define a una variable. TDirVar= class @@ -61,28 +62,64 @@ TDirMacro = class value : string; posDef: TSrcPos; //posición del contexto end; - TDirMacro_list = specialize TFPGObjectList; - { TParserDirec } - TParserDirec = class(TParserAsm) - private //Rutinas del evaluador de expresiones - varsList : TDirVar_list; + //Identifica a una instrucción + TDirInstruc = class + name : string; + OnCall : TDirEveCallProc; + end; + TDirInstruc_list = specialize TFPGObjectList; + + + { TParserDirecBase } + TParserDirecBase = class(TCompMain) + private //Parser and Expressions evaluation + tokIni : integer; //Posición inicial del token actual + dirOperator: Integer; + dirDelimiter: integer; + WaitForEndIF: integer; + function GetIdent: string; + function tokType: integer; + function CogOperando: TDirOperand; + procedure IniExplorDirec(out lin: string); function CogCarERR(car: char): Boolean; + function CogExpresion(jerar: Integer): TDirOperand; function CogExpresionPar: TDirOperand; - function CogIdentif(var s: string): boolean; + function CogIdentif(out s: string): boolean; function CogNumero(var n: Double): boolean; - function CogOperando: TDirOperand; function cogOperador: String; - function DefinedVar(cad: string; out dvar: TDirVar): boolean; + function jerOp(operad: String): Integer; + function Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; + private //Instructions implementation + function modeStr: string; + function ScanIFDEF(out tok: string): boolean; + procedure ProcCLEAR_STATE_RAM; + procedure ProcSET_MAPPED_RAM; + procedure ProcSET_STATE_RAM; + procedure ProcSET_UNIMP_BITS; + procedure ProcSET_UNIMP_BITS1; + procedure ProcMAP_RAM_TO_PIN; + procedure ProcRESET_PINS; + procedure ProcSET_PIN_NAME; + procedure ProcERROR; procedure ProcINFO; + procedure ProcWARNING; + procedure ProcSET; + procedure ProcMSGBOX; procedure ProcMSGERR; procedure ProcMSGWAR; - procedure ProcSET_MAPPED_RAM; - procedure ProcMAP_RAM_TO_PIN; - procedure ProcSET_UNIMP_BITS; - procedure ProcCLEAR_STATE_RAM; - procedure ProcSET_STATE_RAM; + procedure ProcMODE; + procedure ProcDEFINE(lin: string); + procedure ProcIF(lin: string; negated: boolean); + procedure ProcELSE; + procedure ProcENDIF; + procedure ProcIFDEF(lin: string; negated: boolean); + procedure ProcOUTPUTHEX(lin: string); + procedure ProcINCLUDE(lin: string; var ctxChanged: boolean); + procedure ProcCONFIG; + procedure ProcFREQUENCY; + private //Access to system variables function read_CURRBANK: Single; function read_CURRBLOCK: String; function read_PIC_FREQUEN: Single; @@ -100,64 +137,62 @@ TParserDirec = class(TParserAsm) procedure write_PIC_MAXFLASH(AValue: Single); procedure write_PIC_MAXFREQ(AValue: Single); procedure write_PIC_MODEL(AValue: string); - function Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; - function jerOp(operad: String): Integer; - function CogExpresion(jerar: Integer): TDirOperand; - function AsigVariable(VarName: string; const value: TDirOperand): TDirVar; procedure write_PIC_NPINS(AValue: Single); procedure write_PIC_NUMBANKS(AValue: Single); procedure write_PIC_NUMPAGES(AValue: Single); procedure write_SYN_MODE(AValue: String); - private + private //Macros + macroList : TDirMacro_list; //List of macros + procedure NewMacro(macName, macValue: string); + function DefinedMacro(macName: string): boolean; + function DefinedMacro(macName: string; out dmac: TDirMacro): boolean; + private //Instructions and Variables + instList : TDirInstruc_list; //List of instruction accepted + varsList : TDirVar_list; //List of variables + function DefinedInstruc(insName: string; out dins: TDirInstruc): boolean; + function DefinedVar(cad: string; out dvar: TDirVar): boolean; + function AsigVariable(VarName: string; const value: TDirOperand): TDirVar; + public //Public lexDir : TSynFacilSyn; //lexer para analizar directivas - tokIni : integer; //Posición inicial del token actual - dirOperator: Integer; - dirDelimiter: integer; - WaitForEndIF: integer; - macroList : TDirMacro_list; - procedure GenErrorDir(msg: string; const Args: array of const); - procedure GenErrorDir(msg: string); - procedure IniExplorDirec(out lin: string); - function modeStr: string; - procedure ProcCONFIG; - procedure ProcFREQUENCY; - procedure ProcDEFINE(lin: string); - procedure ProcIFDEF(lin: string; negated: boolean); - procedure ProcIF(lin: string; negated: boolean); - procedure ProcINCLUDE(lin: string; var ctxChanged: boolean); - procedure ProcOUTPUTHEX(lin: string); - procedure ProcMODE; - procedure ProcMSGBOX; - procedure ProcWARNING; - procedure ProcERROR; - procedure ProcSET; - procedure ProcPROCESSOR; - function ScanIFDEF(out tok: string): boolean; procedure skipWhites; - function GetIdent: string; - function tokType: integer; - procedure DefLexDirectiv; - protected //Variables internas del compilador - mainFile : string; //archivo inicial que se compila - mode : (modPascal, modPicPas); - ConfigWord: integer; //Bits de configuración - procedure NewMacro(macName, macValue: string); + procedure GenErrorDir(msg: string); + procedure GenErrorDir(msg: string; const Args: array of const); + procedure AddInstruction(instName: string; callProc: TDirEveCallProc); + procedure AddSysVariableNumber(varName: string; ReadNum: TDirEveReadNum; + WriteNum: TDirEveWriteNum); + procedure AddSysVariableString(varName: string; ReadStr: TDirEveReadStr; + WriteStr: TDirEveWriteStr); procedure ProcDIRline(const AsmLin: string; out ctxChanged: boolean); - function DefinedMacro(macName: string): boolean; - function FindMacro(macName: string): TDirMacro; - public - hexFile : string; //Nombre de archivo de salida - Compiling: boolean; //Bandera para el compilado - function ExpandRelPathTo(BaseFile, FileName: string): string; + procedure DefLexDirectiv; procedure ClearMacros; + public //Initialization constructor Create; override; destructor Destroy; override; end; +var + ER_UNKNO_DEVIC: String; //Error message for Unknown Device procedure SetLanguage; implementation +var + ER_UNKNO_DIREC, ER_ERROR_DIREC: String; + ER_UNEXP_ELSE, ER_ENDIF_NOFOU, ER_UNEXP_ENDIF : string; + ER_MODE_UNKNOWN, + ER_ERROR_FREQ, ER_IDENT_EXPEC, ER_EXPEC_EQUAL, + ER_SYNTAX_ERRO, ER_SYNTAX_ERR_: string; + ER_EXPECTED_BR: String; + ER_CONF_UNDEF_, ER_INVAL_CBIT_: String; + ER_FILE_NO_FND_, ER_ERIN_NUMBER_, ER_UNKNW_IDENT_: String; + ER_DIVIDE_ZERO, ER_EVA_ZER_ZER, ER_OPE_NOT_IMP_: String; + ER_EXPECT_CAR_: String; + ER_TOOHIGHFRE: String; + +procedure SetLanguage; +begin + CompMain.SetLanguage; {$I ..\language\tra_ParserDirec.pas} +end; { TDirOperand } function TDirOperand.GetvalNum: Double; begin @@ -226,55 +261,9 @@ procedure TDirVar.ReflectToString(ReadStr: TDirEveReadStr; OnReadStr := ReadStr; //asigna eventos OnWriteStr := WriteStr; end; -{ TParserDirec } -procedure TParserDirec.GenErrorDir(msg: string); -{Genera un error corrigiendo la posición horizontal} -var - p: TSrcPos; -begin - p := cIn.ReadSrcPos; - p.col := tokIni + lexDir.GetX; //corrige columna - GenErrorPos(msg, [], p); -end; -procedure TParserDirec.GenErrorDir(msg: string; const Args: array of const); -var - p: TSrcPos; -begin - p := cIn.ReadSrcPos; - p.col := tokIni + lexDir.GetX; //corrige columna - GenErrorPos(msg, Args, p); -end; -function TParserDirec.modeStr: string; -begin - case mode of - modPascal: Result := 'modPascal'; - modPicPas: Result := 'modPicPas'; - else - Result := 'Unknown'; - end; -end; -function TParserDirec.tokType: integer; -begin - Result := lexdir.GetTokenKind; -end; -procedure TParserDirec.skipWhites; -begin - if tokType = lexDir.tnSpace then - lexDir.Next; //quita espacios -end; -function TParserDirec.CogCarERR(car: char): Boolean; -{Coge el caracter indicado. Si no lo encuentra genera error y devuelve FALSE.} -begin - if lexDir.GetToken=car then begin - //Es el caracter buscado - lexDir.Next; - exit(true); - end else begin - GenErrorDir(ER_EXPECT_CAR_, [car]); - exit(false); - end; -end; -function TParserDirec.GetIdent: string; +{ TParserDirecBase } +//Parser and Expressions evaluation +function TParserDirecBase.GetIdent: string; begin if tokType = lexDir.tnSpace then lexDir.Next; //quita espacios @@ -286,64 +275,11 @@ function TParserDirec.GetIdent: string; Result := lexDir.GetToken; lexDir.Next; //toma identificador end; -function TParserDirec.DefinedVar(cad: string; out dvar: TDirVar): boolean; -{Indica si un identificador corresponde a una variable. Devuelve la referencia a la -variable encontrada.} -begin - cad := UpCase(cad); - for dvar in varsList do begin - if UpCase(dvar.nomb) = cad then begin - exit(true); - end; - end; - exit(false); -end; -function TParserDirec.CogExpresionPar: TDirOperand; -{Coge una expresión que debe estar encerrada entre paréntesis. Puede genera error} -begin - if not CogCarERR('(') then exit; //sale con error - Result := CogExpresion(0); - if HayError then exit; //sale con error - skipWhites; - if not CogCarERR(')') then exit; //sale con error -end; -function TParserDirec.CogNumero(var n: Double): boolean; -{Veririfca si lo que sigues es un número y de ser así, intenta tomarlo. -Puede generar error al convertir el número} -var - m: Longint; -begin - if lexdir.GetTokenKind <> lexdir.tnNumber then exit(false); - if lexdir.GetToken[1] = '$' then begin - //Formato hexadecimal - if not TryStrToInt(lexdir.GetToken, m) then begin - GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); - exit(false); - end; - n := m; - end else begin - if not TryStrToFloat(lexdir.GetToken, n) then begin - GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); - exit(false); - end; - end; - lexdir.Next; - Result := true; //indica que hubo número -end; -function TParserDirec.CogIdentif(var s: string): boolean; -{Veririfca si lo que sigues es un identificador y de ser así, intenta tomarlo.} +function TParserDirecBase.tokType: integer; begin - if tokType = lexDir.tnSpace then - lexDir.Next; //quita espacios - //verifica - if lexDir.GetTokenKind <> lexDir.tnIdentif then begin - exit(false); - end; - s := lexDir.GetToken; - lexDir.Next; //toma identificador - exit(true); + Result := lexdir.GetTokenKind; end; -function TParserDirec.CogOperando: TDirOperand; +function TParserDirecBase.CogOperando: TDirOperand; {Coge un operando en la posición actual del contexto. Si no enceuntra el operando o es erróneo, genera Error.} var @@ -380,8 +316,7 @@ function TParserDirec.CogOperando: TDirOperand; end else if CogIdentif(cad) then begin {Es un identificador} //Busca si es macro - mac := FindMacro(cad); - if mac<>nil then begin + if DefinedMacro(cad, mac) then begin //Es una macro. Hay que expandirla p := lexDir.State; //guarda estado de lexer lexDir.SetLine(mac.value, 0); //inicia otra explroación en el contenido de la macro @@ -489,85 +424,220 @@ function TParserDirec.CogOperando: TDirOperand; exit; //no devuelve nada end; end; -function TParserDirec.cogOperador: String; -{Coge un operador en la posición del contexto actual. Si no encuentra - devuelve cadena vacía y no coge caracteres, salvo espacios iniciales.} +procedure TParserDirecBase.IniExplorDirec(out lin: string); +(*Inicia la exploración del token de directiva. Extrae el delimitador final "}", y +posiciona al lexer justo despues del delimitador inicial "{$". Devuelve la línea +procesada en "lin" (sin delimitador final). Además inicia tokIni +*) +var + dlin: Integer; + p: TSrcPos; begin - Result := ''; - skipWhites; //quita blancos iniciales - Case UpCase(lexDir.GetToken) of //completa con operador de más caracteres - '+': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '-': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '*': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '/': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '\': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '%': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '^': begin - Result := lexDir.GetToken; - lexDir.next; - end; - //Operadores de comparación - '=': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '<>': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '>': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '<': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '>=': begin - Result := lexDir.GetToken; - lexDir.next; - end; - '<=': begin - Result := lexDir.GetToken; - lexDir.next; - end; - 'AND': begin - Result := lexDir.GetToken; - lexDir.next; - end; - 'OR': begin - Result := lexDir.GetToken; - lexDir.next; - end; - 'XOR': begin - Result := lexDir.GetToken; - lexDir.next; - end; + //Fija el inicio del token actual (Esto es válido, porque las directivas son "unilineas") + tokIni := Cin.curCon.lex.GetX - 1; + //Usa SynFacilSyn como lexer para analizar texto + lin := Cin.tok; + dlin := length(lin); + if lin[dlin] = '}' then begin + delete(lin, dlin, 1); //quita delimitador final de directiva + end else begin + //Es un error, pero es salvable. + //Ubicamos el error, "manualmente", porque aún no hemos explorado con el lexer. + p := cIn.ReadSrcPos; + p.col := tokIni + dlin + 1; //columna al final + GenErrorPos(ER_EXPECTED_BR, [], p); + end; + //Inicia exploración con el lexer "lexDir" + lexDir.SetLine(lin, 0); //inicia cadena + lexDir.Next; //Salta el "{$" + skipWhites; +end; +function TParserDirecBase.CogCarERR(car: char): Boolean; +{Coge el caracter indicado. Si no lo encuentra genera error y devuelve FALSE.} +begin + if lexDir.GetToken=car then begin + //Es el caracter buscado + lexDir.Next; + exit(true); + end else begin + GenErrorDir(ER_EXPECT_CAR_, [car]); + exit(false); + end; +end; +function TParserDirecBase.CogExpresion(jerar: Integer): TDirOperand; +{ Evaluador de expresiones. Toma una expresión completa, en la posición actual del +contenido. Si no encuentra una expresión, genera error. } +var Op1, Op2 : TDirOperand; + opr, opr2 : String; + jerOpr, jerOpr2: Integer; + pos1, pos2: TFaLexerState; +begin + skipWhites; //quita blancos iniciales + Op1 := CogOperando; //error + if HayError then exit; + opr := cogOperador; + if opr = '' Then begin + Result := Op1; + Exit + End; + jerOpr := jerOp(opr); //Hay operador, tomar su jerarquía + //-------------------------- ¿Delimitada por jerarquía? --------------------- + if jerOpr <= jerar then begin //es menor que la que sigue, expres. + Result := Op1; //solo devuelve el único operando que leyó + Exit; + End; + while opr <> '' do begin + pos1 := lexDir.State; //Guarda por si lo necesita + Op2 := CogOperando; + if HayError then exit; + pos2 := lexDir.State; //Guarda por si lo necesita + opr2 := cogOperador; + If opr2 <> '' Then begin //Hay otro operador + jerOpr2 := jerOp(opr2); + //¿Delimitado por jerarquía de operador? + If jerOpr2 <= jerar Then begin //sigue uno de menor jerarquía, hay que salir + lexDir.State:= pos2; //antes de coger el operador + Result := Evaluar(Op1, opr, Op2); + Exit; + End; + If jerOpr2 > jerOpr Then begin //y es de mayor jerarquía, retrocede + lexDir.State:= pos1; //retrocede + Op2 := CogExpresion(jerOpr); //evalua primero + opr2 := cogOperador; //actualiza el siguiente operador + End; + End; + + Op1 := Evaluar(Op1, opr, Op2); //evalua resultado + if HayError then exit; + opr := opr2; + jerOpr := jerOp(opr); //actualiza operador anterior + end; + Result := Op1; +end; +function TParserDirecBase.CogExpresionPar: TDirOperand; +{Coge una expresión que debe estar encerrada entre paréntesis. Puede genera error} +begin + if not CogCarERR('(') then exit; //sale con error + Result := CogExpresion(0); + if HayError then exit; //sale con error + skipWhites; + if not CogCarERR(')') then exit; //sale con error +end; +function TParserDirecBase.CogNumero(var n: Double): boolean; +{Veririfca si lo que sigues es un número y de ser así, intenta tomarlo. +Puede generar error al convertir el número} +var + m: Longint; +begin + if lexdir.GetTokenKind <> lexdir.tnNumber then exit(false); + if lexdir.GetToken[1] = '$' then begin + //Formato hexadecimal + if not TryStrToInt(lexdir.GetToken, m) then begin + GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); + exit(false); + end; + n := m; + end else begin + if not TryStrToFloat(lexdir.GetToken, n) then begin + GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); + exit(false); + end; + end; + lexdir.Next; + Result := true; //indica que hubo número +end; +function TParserDirecBase.CogIdentif(out s: string): boolean; +{Veririfca si lo que sigues es un identificador y de ser así, intenta tomarlo.} +begin + if tokType = lexDir.tnSpace then + lexDir.Next; //quita espacios + //verifica + if lexDir.GetTokenKind <> lexDir.tnIdentif then begin + exit(false); + end; + s := lexDir.GetToken; + lexDir.Next; //toma identificador + exit(true); +end; +function TParserDirecBase.cogOperador: String; +{Coge un operador en la posición del contexto actual. Si no encuentra + devuelve cadena vacía y no coge caracteres, salvo espacios iniciales.} +begin + Result := ''; + skipWhites; //quita blancos iniciales + Case UpCase(lexDir.GetToken) of //completa con operador de más caracteres + '+': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '-': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '*': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '/': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '\': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '%': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '^': begin + Result := lexDir.GetToken; + lexDir.next; + end; + //Operadores de comparación + '=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<>': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '>': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '>=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'AND': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'OR': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'XOR': begin + Result := lexDir.GetToken; + lexDir.next; + end; 'NOT': begin Result := lexDir.GetToken; lexDir.next; end; end; end; -function TParserDirec.jerOp(operad: String): Integer; +function TParserDirecBase.jerOp(operad: String): Integer; //Devuelve la jerarquía de un operador ver documentación técnica. begin case operad of @@ -581,7 +651,7 @@ function TParserDirec.jerOp(operad: String): Integer; Result := 0; end; End; -function TParserDirec.Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; +function TParserDirecBase.Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; //Devuelve el resultado y tipo de una operación begin Case opr of @@ -702,138 +772,21 @@ function TParserDirec.Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): End; end; end; -function TParserDirec.CogExpresion(jerar: Integer): TDirOperand; -{ Evaluador de expresiones. Toma una expresión completa, en la posición actual del -contenido. Si no encuentra una expresión, genera error. } -var Op1, Op2 : TDirOperand; - opr, opr2 : String; - jerOpr, jerOpr2: Integer; - pos1, pos2: TFaLexerState; +//Instructions implementation +function TParserDirecBase.modeStr: string; begin - skipWhites; //quita blancos iniciales - Op1 := CogOperando; //error - if HayError then exit; - opr := cogOperador; - if opr = '' Then begin - Result := Op1; - Exit - End; - jerOpr := jerOp(opr); //Hay operador, tomar su jerarquía - //-------------------------- ¿Delimitada por jerarquía? --------------------- - if jerOpr <= jerar then begin //es menor que la que sigue, expres. - Result := Op1; //solo devuelve el único operando que leyó - Exit; - End; - while opr <> '' do begin - pos1 := lexDir.State; //Guarda por si lo necesita - Op2 := CogOperando; - if HayError then exit; - pos2 := lexDir.State; //Guarda por si lo necesita - opr2 := cogOperador; - If opr2 <> '' Then begin //Hay otro operador - jerOpr2 := jerOp(opr2); - //¿Delimitado por jerarquía de operador? - If jerOpr2 <= jerar Then begin //sigue uno de menor jerarquía, hay que salir - lexDir.State:= pos2; //antes de coger el operador - Result := Evaluar(Op1, opr, Op2); - Exit; - End; - If jerOpr2 > jerOpr Then begin //y es de mayor jerarquía, retrocede - lexDir.State:= pos1; //retrocede - Op2 := CogExpresion(jerOpr); //evalua primero - opr2 := cogOperador; //actualiza el siguiente operador - End; - End; - - Op1 := Evaluar(Op1, opr, Op2); //evalua resultado - if HayError then exit; - opr := opr2; - jerOpr := jerOp(opr); //actualiza operador anterior - end; - Result := Op1; + case mode of + modPascal: Result := 'modPascal'; + modPicPas: Result := 'modPicPas'; + else + Result := 'Unknown'; + end; end; -function TParserDirec.AsigVariable(VarName: string; const value: TDirOperand): TDirVar; -{Asigna un valor numérico o de cadena a una variable. Si no existe la crea. -Devuelve la referencia a la variable asignada.} -begin - //Busca variable - if DefinedVar(VarName, Result) then begin - //Encontró la variable - Result.valor := value; - exit(Result); - end; - //No se encontró, se debe crear - Result := TDirVar.Create; - Result.nomb := VarName; - Result.valor := value; - varsList.Add(Result); -end; -procedure TParserDirec.NewMacro(macName, macValue: string); -{Agrega una nueva macro a la lista de macros} -var - mac: TDirMacro; -begin - mac := TDirMacro.Create; - mac.name := macName; - mac.value := macValue; - //Ubica la posición del contexto - mac.posDef := cIn.ReadSrcPos; - macroList.Add(mac); -end; -function TParserDirec.DefinedMacro(macName: string): boolean; -{Indica si una macro ha sido definida} -var - mac: TDirMacro; -begin - macName := UpCase(macName); - for mac in macroList do begin - if UpCase(mac.name) = macName then begin - exit(true); //encontró - end; - end; -//No se encontró - exit(false); -end; -function TParserDirec.FindMacro(macName: string): TDirMacro; -{Busca la definición de una macro, si la encuentra, devuelve la referecnia, de otra -forma dewvuelve NIL.} -var - mac: TDirMacro; -begin - macName := UpCase(macName); - for mac in macroList do begin - if UpCase(mac.name) = macName then begin - exit(mac); //encontró - end; - end; -//No se encontró - exit(nil); -end; -function TParserDirec.ExpandRelPathTo(BaseFile, FileName: string): string; -{Convierte una ruta relativa (FileName), a una absoluta, usnado como base la ruta de -otro archivo (BaseFile)} -var - BasePath: RawByteString; -begin - if pos(DirectorySeparator, FileName)=0 then begin - //Ruta relativa. Se completa - BasePath := ExtractFileDir(BaseFile); - if BasePath = '' then begin - //No hay de donde completar, usa la ruta actual - Result := ExpandFileName(FileName); - end else begin - Result := ExtractFileDir(BaseFile) + DirectorySeparator + FileName; - end; - end else begin - //Tiene "DirectorySeparator", se asume que es ruta absoluta, y no se cambia. - Result := FileName; - end; -end; -function TParserDirec.ScanIFDEF(out tok: string): boolean; -{Explora el texto, hasta encontrar la directiva $ENDIF o $ELSE. Si llega al - final del contexto, sin encontrar alguna de estas directivas, devuelve FALSE.} -var - tmp, direc: string; +function TParserDirecBase.ScanIFDEF(out tok: string): boolean; +{Explora el texto, hasta encontrar la directiva $ENDIF o $ELSE. Si llega al + final del contexto, sin encontrar alguna de estas directivas, devuelve FALSE.} +var + tmp, direc: string; begin while not cIn.Eof do begin // debugln(cIn.tok); @@ -853,134 +806,7 @@ function TParserDirec.ScanIFDEF(out tok: string): boolean; //No encontró exit(false); end; -procedure TParserDirec.ProcPROCESSOR; -begin - lexDir.Next; //pasa al siguiente - skipWhites; - if not GetHardwareInfo(pic, lexDir.GetToken) then begin - GenErrorDir(ER_UNKNO_DEVIC, [lexDir.GetToken]); - exit; - end; -end; -procedure TParserDirec.ProcFREQUENCY; -var - f: Longint; -begin - lexDir.Next; //pasa al siguiente - skipWhites; - if tokType <> lexDir.tnNumber then begin - GenErrorDir(ER_ERROR_DIREC); - exit; - end; - if not TryStrToInt(lexDir.GetToken, f) then begin - GenErrorDir(ER_ERROR_FREQ); - exit; - end; - lexDir.Next; //pasa al siguiente - skipWhites; - case UpperCase(lexDir.GetToken) of - 'KHZ': f := f * 1000; - 'MHZ': f := f * 1000000; - else - GenErrorDir(ER_ERROR_DIREC); - exit; - end; - if f>pic.MaxFreq then begin - GenErrorDir(ER_TOOHIGHFRE); - exit; - end; - pic.frequen:=f; //asigna frecuencia -end; -procedure TParserDirec.ProcCONFIG; -var - Ident, tmp: String; - mac: TDirMacro; - valBit: Longint; -begin - lexDir.Next; //pasa al siguiente - skipWhites; - if lexDir.GetTokenKind = lexDir.tnNumber then begin - //Es un valor numérico - if not TryStrToInt(lexDir.GetToken, valBit) then begin - GenErrorDir(ER_INVAL_CBIT_, [Ident]); - exit; - end; - //Ya se tiene el valor numérico - ConfigWord := valBit; //carga directamente - lexDir.Next; - skipWhites; - //No debe seguir nada - if not lexDir.GetEol then begin - GenErrorDir(ER_INVAL_CBIT_, [Ident]); - exit; - end; - exit; - end; - //Debe seguir identificadores - while not lexDir.GetEol do begin - Ident := GetIdent; - if HayError then exit; - mac := FindMacro(Ident); - if mac <> nil then begin - //Hay macro definida. Hay que extraer su valor. - tmp := trim(mac.value); - if copy(tmp,1,2) = '0x' then begin - delete(tmp,1,2); - tmp := '$' + tmp; - end; - if not TryStrToInt(tmp, valBit) then begin - GenErrorDir(ER_INVAL_CBIT_, [Ident]); - exit; - end; - //Ya se tiene el valor numérico - if ConfigWord = -1 then begin - //Es la primera vez que se inicia - ConfigWord := $FFFF; - end; - ConfigWord := ConfigWord and valBit; //Marca bandera - - //msgbox('|'+mac.value+'|'); - end else begin - //No está definido - GenErrorDir(ER_CONF_UNDEF_, [Ident]); - exit; - end; - skipWhites; - if lexDir.GetToken = ',' then begin - lexDir.Next; //pasa al siguiente - end; - skipWhites; - end; -end; -procedure TParserDirec.ProcINCLUDE(lin: string; var ctxChanged: boolean); -{Implementa la inclusión de un archivo externo en el código} -var - filPath: string; -begin - lexDir.Next; //pasa al siguiente - skipWhites; - //Toma el restante de la cadena - filPath := copy(lin, lexDir.GetX); - //Completa ruta, si es relativa - if (pos('/', filPath)=0) and (pos('\', filPath)=0) then begin - //No incluye información de ruta. Asume que está en la misma ruta. - filPath := ExtractFileDir(mainFile) + DirectorySeparator + filPath; - end; - if not FileExists(filPath) then begin - GenErrorDir(ER_FILE_NO_FND_, [filPath]); - exit; - end; - //Ya se tiene el archivo - cIn.Next; //pasa la directiva - cIn.NewContextFromFile(filPath); //Pasa a explorar contenido del archivo - cIn.curCon.autoClose := true; //Para que se cierre, al finalizar - //cIn.curCon.FixErrPos := true; //Para que se ignore la posición de los errores - //cIn.curCon.ErrPosition := p; //Posición a usar para ubicar el error - //cIn.curCon.PreErrorMsg := 'Macro '+mac.name+': '; - ctxChanged := true; //Marca bandera para indciar que se ha cambiado de contexto - -end; -procedure TParserDirec.ProcOUTPUTHEX(lin: string); +procedure TParserDirecBase.ProcOUTPUTHEX(lin: string); var filPath: String; begin @@ -992,7 +818,7 @@ procedure TParserDirec.ProcOUTPUTHEX(lin: string); //Auqnue lo más práctico sería en la segunda pasada donde se genera el HEX final. hexfile := filPath; end; -procedure TParserDirec.ProcDEFINE(lin: string); +procedure TParserDirecBase.ProcDEFINE(lin: string); var Ident, value: String; begin @@ -1019,7 +845,7 @@ procedure TParserDirec.ProcDEFINE(lin: string); NewMacro(Ident, value); end; end; -procedure TParserDirec.ProcIFDEF(lin: string; negated: boolean); +procedure TParserDirecBase.ProcIFDEF(lin: string; negated: boolean); function EvaluateExp(const Ident: string): boolean; {Evalúa el resultado de la expresión de la directiva $IFDEF. Debería ejecutarse solo una vez, en ProcIFDEF(()} @@ -1032,7 +858,7 @@ procedure TParserDirec.ProcIFDEF(lin: string; negated: boolean); //Agrega el nodo para guardar información para la segunda pasada xDirec := TxpEleDIREC.Create; xDirec.srcDec := cIn.ReadSrcPos; //guarda posición de aparición - TreeDirec.AddElement(xDirec, false); //Agrega sin verificación de nombre + TreeDirec.AddElement(xDirec); //Evalúa Result := (DefinedMacro(Ident) or DefinedVar(Ident, dvar)) xor negated; //Guarda resultado @@ -1084,8 +910,8 @@ procedure TParserDirec.ProcIFDEF(lin: string; negated: boolean); GenErrorDir(ER_SYNTAX_ERRO); end; end; -procedure TParserDirec.ProcIF(lin: string; negated: boolean); - function EvaluateExp(const Ident: string): boolean; +procedure TParserDirecBase.ProcIF(lin: string; negated: boolean); + function EvaluateExp: boolean; {Evalúa el resultado de la expresión de la directiva $IFDEF. Debería ejecutarse solo una vez, en ProcIFDEF(()} var @@ -1097,7 +923,7 @@ procedure TParserDirec.ProcIF(lin: string; negated: boolean); //Agrega el nodo para guardar información para la segunda pasada xDirec := TxpEleDIREC.Create; xDirec.srcDec := cIn.ReadSrcPos; //guarda posición de aparición - TreeDirec.AddElement(xDirec, false); //Agrega sin verificación de nombre + TreeDirec.AddElement(xDirec); //Agrega sin verificación de nombre //Evalúa varValue := CogExpresion(0); //No debería seguir nada más @@ -1130,7 +956,7 @@ procedure TParserDirec.ProcIF(lin: string; negated: boolean); end; end; var - Ident, direc: String; + direc: String; begin lexDir.Next; //pasa al siguiente skipWhites; @@ -1139,7 +965,7 @@ procedure TParserDirec.ProcIF(lin: string; negated: boolean); exit; end; //Se supone que sigue una expresión - if EvaluateExp(Ident) then begin + if EvaluateExp then begin //Es verdadero inc(WaitForEndIF); //marca bandera para esperar end else begin @@ -1158,63 +984,251 @@ procedure TParserDirec.ProcIF(lin: string; negated: boolean); end; end; end; -procedure TParserDirec.ProcMODE; +procedure TParserDirecBase.ProcELSE; var - txtMode: String; + direc: string; begin - lexDir.Next; //pasa al siguiente - skipWhites; - txtMode := UpCase(lexDir.GetToken); - if txtMode = 'PICPAS' then begin - self.mode := modPicPas; - end else if txtMode = 'PASCAL' then begin - self.mode := modPascal; + if WaitForEndIF>0 then begin + {Estamos dentro de un IF, que se supone dio verdadero, de otra forma, no llegaría + por aquí. De ser así, el ELSE debe ser falso.} + cIn.Next; //toma token {$ELSE} + //Explora, sin compilar, hasta encontrar directiva delimitadora. + if not ScanIFDEF(direc) then begin + //Llegó al final del código fuente, sin encontrar el ENDIF + GenErrorDir(ER_ENDIF_NOFOU); + exit; + end; + //Encontró token delimitador + //Si es $ENDIF, no hay problema, todo termina allí, pero si es un else: + if direc='ELSE' then begin + GenErrorDir(ER_UNEXP_ELSE); + exit; + end; + //Encontró un $ENDIF + dec(WaitForEndIF); //lleva la cuenta end else begin - GenErrorDir(ER_MODE_UNKNOWN, [txtMode]); + //No se esperaba + GenErrorDir(ER_UNEXP_ENDIF); exit; end; end; -procedure TParserDirec.ProcMSGBOX; -var - txtMsg: String; +procedure TParserDirecBase.ProcENDIF; begin - lexDir.Next; //pasa al siguiente - txtMsg := CogExpresion(0).valStr; - if HayError then Exit; - //Solo muestra en compilación y en la primera pasada - if Compiling and FirstPass then msgbox(txtMsg); + if WaitForEndIF>0 then begin + //Se es peraba el delimitador + Dec(WaitForEndIF); //para que ya no siga buscando + end else begin + //No se esperaba + GenErrorDir(ER_UNEXP_ENDIF); + exit; + end; end; -procedure TParserDirec.ProcMSGERR; +procedure TParserDirecBase.ProcINCLUDE(lin: string; var ctxChanged: boolean); +{Implementa la inclusión de un archivo externo en el código} var - txtMsg: String; + filPath: string; begin lexDir.Next; //pasa al siguiente - txtMsg := CogExpresion(0).valStr; - if HayError then Exit; - //Solo muestra en compilación y en la primera pasada - if Compiling and FirstPass then MsgErr(txtMsg); + skipWhites; + //Toma el restante de la cadena + filPath := copy(lin, lexDir.GetX); + //Completa ruta, si es relativa + if (pos('/', filPath)=0) and (pos('\', filPath)=0) then begin + //No incluye información de ruta. Asume que está en la misma ruta. + filPath := ExtractFileDir(mainFile) + DirectorySeparator + filPath; + end; + if not FileExists(filPath) then begin + GenErrorDir(ER_FILE_NO_FND_, [filPath]); + exit; + end; + //Ya se tiene el archivo + cIn.Next; //pasa la directiva + cIn.NewContextFromFile(filPath); //Pasa a explorar contenido del archivo + cIn.curCon.autoClose := true; //Para que se cierre, al finalizar + //cIn.curCon.FixErrPos := true; //Para que se ignore la posición de los errores + //cIn.curCon.ErrPosition := p; //Posición a usar para ubicar el error + //cIn.curCon.PreErrorMsg := 'Macro '+mac.name+': '; + ctxChanged := true; //Marca bandera para indciar que se ha cambiado de contexto + end; -procedure TParserDirec.ProcMSGWAR; +procedure TParserDirecBase.ProcFREQUENCY; var - txtMsg: String; + f: Longint; begin lexDir.Next; //pasa al siguiente - txtMsg := CogExpresion(0).valStr; - if HayError then Exit; - //Solo muestra en compilación y en la primera pasada - if Compiling and FirstPass then MsgExc(txtMsg); + skipWhites; + if tokType <> lexDir.tnNumber then begin + GenErrorDir(ER_ERROR_DIREC); + exit; + end; + if not TryStrToInt(lexDir.GetToken, f) then begin + GenErrorDir(ER_ERROR_FREQ); + exit; + end; + lexDir.Next; //pasa al siguiente + skipWhites; + case UpperCase(lexDir.GetToken) of + 'KHZ': f := f * 1000; + 'MHZ': f := f * 1000000; + else + GenErrorDir(ER_ERROR_DIREC); + exit; + end; + if f>picCore.MaxFreq then begin + GenErrorDir(ER_TOOHIGHFRE); + exit; + end; + picCore.frequen:=f; //asigna frecuencia end; -procedure TParserDirec.ProcINFO; +procedure TParserDirecBase.ProcCONFIG; var - txtMsg: String; + Ident, tmp: String; + mac: TDirMacro; + valBit: Longint; begin lexDir.Next; //pasa al siguiente - txtMsg := CogExpresion(0).valStr; - if HayError then Exit; - //Solo muestra en compilación y en la primera pasada - if Compiling and FirstPass then GenInfo(txtMsg); + skipWhites; + if lexDir.GetTokenKind = lexDir.tnNumber then begin + //Es un valor numérico + if not TryStrToInt(lexDir.GetToken, valBit) then begin + GenErrorDir(ER_INVAL_CBIT_, [lexDir.GetToken]); + exit; + end; + //Ya se tiene el valor numérico + ConfigWord := valBit; //carga directamente + lexDir.Next; + skipWhites; + //No debe seguir nada + if not lexDir.GetEol then begin + GenErrorDir(ER_INVAL_CBIT_, [lexDir.GetToken]); + exit; + end; + exit; + end; + //Debe seguir identificadores + while not lexDir.GetEol do begin + Ident := GetIdent; + if HayError then exit; + if DefinedMacro(Ident, mac) then begin + //Hay macro definida. Hay que extraer su valor. + tmp := trim(mac.value); + if copy(tmp,1,2) = '0x' then begin + delete(tmp,1,2); + tmp := '$' + tmp; + end; + if not TryStrToInt(tmp, valBit) then begin + GenErrorDir(ER_INVAL_CBIT_, [Ident]); + exit; + end; + //Ya se tiene el valor numérico + if ConfigWord = -1 then begin + //Es la primera vez que se inicia + ConfigWord := $FFFF; + end; + ConfigWord := ConfigWord and valBit; //Marca bandera + + //msgbox('|'+mac.value+'|'); + end else begin + //No está definido + GenErrorDir(ER_CONF_UNDEF_, [Ident]); + exit; + end; + skipWhites; + if lexDir.GetToken = ',' then begin + lexDir.Next; //pasa al siguiente + end; + skipWhites; + end; +end; +procedure TParserDirecBase.ProcSET_STATE_RAM; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + picCore.SetStatRAMCom(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); end; -procedure TParserDirec.ProcWARNING; +procedure TParserDirecBase.ProcSET_MAPPED_RAM; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + picCore.SetMappRAMCom(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); +end; +procedure TParserDirecBase.ProcSET_UNIMP_BITS; +{Configura bits no implementados (se leen en 0) para una dirección de RAM.} +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if txtMsg='' then begin + GenErrorDir('Expected string'); + end; + if HayError then exit; + picCore.SetUnimpBITS(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); +end; +procedure TParserDirecBase.ProcSET_UNIMP_BITS1; +{Configura bits no implementados (se leen en 1) para una dirección de RAM.} +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if txtMsg='' then begin + GenErrorDir('Expected string'); + end; + if HayError then exit; + picCore.SetUnimpBITS1(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); +end; +procedure TParserDirecBase.ProcCLEAR_STATE_RAM; +{Limpia el estado de la memoria RAM} +begin + picCore.DisableAllRAM; +end; +procedure TParserDirecBase.ProcRESET_PINS; +begin + picCore.ResetPins; +end; +procedure TParserDirecBase.ProcSET_PIN_NAME; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + picCore.SetPinName(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); +end; +procedure TParserDirecBase.ProcMAP_RAM_TO_PIN; +{Mapea pines del encapsulado a direcciones de memoria} +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + picCore.MapRAMtoPIN(txtMsg); + if picCore.MsjError<>'' then GenErrorDir(picCore.MsjError); +end; +procedure TParserDirecBase.ProcINFO; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then GenInfo(txtMsg); +end; +procedure TParserDirecBase.ProcWARNING; var txtMsg: String; begin @@ -1224,7 +1238,7 @@ procedure TParserDirec.ProcWARNING; //Solo muestra en compilación y en la primera pasada if Compiling and FirstPass then GenWarn(txtMsg); end; -procedure TParserDirec.ProcERROR; +procedure TParserDirecBase.ProcERROR; var txtMsg: String; begin @@ -1234,10 +1248,10 @@ procedure TParserDirec.ProcERROR; //Solo muestra en compilación y en la primera pasada if Compiling and FirstPass then GenError(txtMsg); end; -procedure TParserDirec.ProcSET; +procedure TParserDirecBase.ProcSET; //Asigna valor a una varaible var - varName: String; + varName, unitInf: String; varValue: TDirOperand; begin lexDir.Next; //pasa al siguiente @@ -1256,97 +1270,317 @@ procedure TParserDirec.ProcSET; if not CogCarERR('=') then exit; //sale con error varValue := CogExpresion(0); if HayError then exit; + unitInf := lexDir.GetToken; //Puede que haya unidades + //Esta facilidad adicional es útil para casos en que se expresa la frecuencia. + if upcase(unitInf) = 'KHZ' then begin + lexDir.Next; //Lo reconcoe + varValue.SetvalNum(varValue.GetvalNum * 1000); + end else if upcase(unitInf) = 'MHZ' then begin + lexDir.Next; //Lo reconcoe + varValue.SetvalNum(varValue.GetvalNum * 1000000); + end; + if not lexdir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; + end; + if not lexdir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; + end; AsigVariable(varName, varValue); end; -procedure TParserDirec.ProcSET_STATE_RAM; +procedure TParserDirecBase.ProcMSGBOX; var txtMsg: String; begin lexDir.Next; //pasa al siguiente txtMsg := CogExpresion(0).valStr; - if HayError then exit; - pic.SetStatRAMCom(txtMsg); - if pic.MsjError<>'' then GenErrorDir(pic.MsjError); + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then msgbox(txtMsg); end; -procedure TParserDirec.ProcSET_MAPPED_RAM; +procedure TParserDirecBase.ProcMSGERR; var txtMsg: String; begin lexDir.Next; //pasa al siguiente txtMsg := CogExpresion(0).valStr; - if HayError then exit; - pic.SetMappRAMCom(txtMsg); - if pic.MsjError<>'' then GenErrorDir(pic.MsjError); + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then MsgErr(txtMsg); end; -procedure TParserDirec.ProcMAP_RAM_TO_PIN; -{Mapea pines del encapsulado a direcciones de memoria} +procedure TParserDirecBase.ProcMSGWAR; var txtMsg: String; begin lexDir.Next; //pasa al siguiente txtMsg := CogExpresion(0).valStr; - if HayError then exit; - pic.MapRAMtoPIN(txtMsg); - if pic.MsjError<>'' then GenErrorDir(pic.MsjError); + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then MsgExc(txtMsg); end; -procedure TParserDirec.ProcSET_UNIMP_BITS; -{Configura bits no implementados para una dirección de RAM.} +procedure TParserDirecBase.ProcMODE; var - txtMsg: String; + txtMode: String; begin lexDir.Next; //pasa al siguiente - txtMsg := CogExpresion(0).valStr; - if txtMsg='' then begin - GenErrorDir('Expected string'); + skipWhites; + txtMode := UpCase(lexDir.GetToken); + if txtMode = 'PICPAS' then begin + self.mode := modPicPas; + end else if txtMode = 'PASCAL' then begin + self.mode := modPascal; + end else begin + GenErrorDir(ER_MODE_UNKNOWN, [txtMode]); + exit; end; - if HayError then exit; - pic.SetUnimpBITS(txtMsg); - if pic.MsjError<>'' then GenErrorDir(pic.MsjError); end; -procedure TParserDirec.ProcCLEAR_STATE_RAM; -{Limpia el estado de la memoria RAM} +//Access to system variables +function TParserDirecBase.read_PIC_MODEL: string; begin - pic.DisableAllRAM; + Result := picCore.Model; end; -procedure TParserDirec.IniExplorDirec(out lin: string); -(*Inicia la exploración del token de directiva. Extrae el delimitador final "}", y -posiciona al lexer justo despues del delimitador inicial "{$". Devuelve la línea -procesada en "lin" (sin delimitador final). Además inicia tokIni -*) +procedure TParserDirecBase.write_PIC_MODEL(AValue: string); +begin + picCore.Model := AValue; +end; +function TParserDirecBase.read_PIC_FREQUEN: Single; +begin + Result := picCore.frequen; +end; +procedure TParserDirecBase.write_PIC_FREQUEN(AValue: Single); +begin + picCore.frequen := round(AValue); +end; +function TParserDirecBase.read_PIC_MAXFREQ: Single; +begin + Result := PICCore.MaxFreq; +end; +procedure TParserDirecBase.write_PIC_MAXFREQ(AValue: Single); +begin + PICCore.MaxFreq := round(AValue); +end; +function TParserDirecBase.read_PIC_NUMBANKS: Single; +begin + Result := picCore.NumBanks; +end; +procedure TParserDirecBase.write_PIC_NUMBANKS(AValue: Single); +begin + picCore.NumBanks := round(AValue); +end; +function TParserDirecBase.read_PIC_NUMPAGES: Single; +begin + Result := picCore.NumPages; +end; +procedure TParserDirecBase.write_PIC_NUMPAGES(AValue: Single); +begin + picCore.NumPages := round(AValue); +end; +function TParserDirecBase.read_PIC_IFLASH: Single; +begin + Result := picCore.iFlash; +end; +procedure TParserDirecBase.write_PIC_IFLASH(AValue: Single); +begin + picCore.iFlash := round(AValue); +end; +function TParserDirecBase.read_PIC_MAXFLASH: Single; +begin + Result := picCore.MaxFlash; +end; +procedure TParserDirecBase.write_PIC_MAXFLASH(AValue: Single); +begin + picCore.MaxFlash := round(AValue); +end; +function TParserDirecBase.read_PIC_NPINS: Single; +begin + Result := picCore.Npins; +end; +procedure TParserDirecBase.write_PIC_NPINS(AValue: Single); +begin + picCore.Npins := round(AValue); +end; +function TParserDirecBase.read_SYN_MODE: String; +begin + case mode of + modPicPas: Result := 'PicPas'; + modPascal: Result := 'Pascal'; + else + Result := ''; + end; +end; +procedure TParserDirecBase.write_SYN_MODE(AValue: String); +begin + +end; +function TParserDirecBase.read_CURRBANK: Single; +begin + Result := CurrBank; +end; +procedure TParserDirecBase.write_CURRBANK(AValue: Single); +begin + CurrBank := Round(AValue); +end; +function TParserDirecBase.read_CURRBLOCK: String; var - dlin: Integer; - p: TSrcPos; + parentNod: TxpEleCodeCont; begin - //Fija el inicio del token actual (Esto es válido, porque las directivas son "unilineas") - tokIni := Cin.curCon.lex.GetX - 1; - //Usa SynFacilSyn como lexer para analizar texto - lin := Cin.tok; - dlin := length(lin); - if lin[dlin] = '}' then begin - delete(lin, dlin, 1); //quita delimitador final de directiva + if TreeElems.curNode.idClass = eltBody then begin + //Solo aquí puede haber bloques + parentNod := TreeElems.CurCodeContainer; //Se supone que nunca debería fallar + if parentNod.CurrBlock = nil then + exit('') + else + exit(parentNod.CurrBlock.idStr); end else begin - //Es un error, pero es salvable. - //Ubicamos el error, "manualmente", porque aún no hemos explorado con el lexer. - p := cIn.ReadSrcPos; - p.col := tokIni + dlin + 1; //columna al final - GenErrorPos(ER_EXPECTED_BR, [], p); + Result := ''; end; - //Inicia exploración con el lexer "lexDir" - lexDir.SetLine(lin, 0); //inicia cadena - lexDir.Next; //Salta el "{$" - skipWhites; end; -procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean); +//Macros +procedure TParserDirecBase.NewMacro(macName, macValue: string); +{Agrega una nueva macro a la lista de macros} +var + mac: TDirMacro; +begin + mac := TDirMacro.Create; + mac.name := macName; + mac.value := macValue; + //Ubica la posición del contexto + mac.posDef := cIn.ReadSrcPos; + macroList.Add(mac); +end; +function TParserDirecBase.DefinedMacro(macName: string): boolean; +{Indicate if a macro has been defined.} +var + mac: TDirMacro; +begin + macName := UpCase(macName); + for mac in macroList do begin + if UpCase(mac.name) = macName then begin + exit(true); //encontró + end; + end; +//No se encontró + exit(false); +end; +function TParserDirecBase.DefinedMacro(macName: string; out dmac: TDirMacro): boolean; +begin + macName := UpCase(macName); + for dmac in macroList do begin + if UpCase(dmac.name) = macName then begin + exit(true); //encontró + end; + end; +//No se encontró + exit(false); +end; +//Instructions and Variables +procedure TParserDirecBase.AddInstruction(instName: string; + callProc: TDirEveCallProc); +{Add a new instruction to the Directive engine.} +var + dins: TDirInstruc; +begin + dins := TDirInstruc.Create; + dins.name := instName; + dins.OnCall := callProc; + instList.Add(dins); +end; +function TParserDirecBase.DefinedInstruc(insName: string; out dins: TDirInstruc): boolean; +begin + insName := UpCase(insName); + for dins in instList do begin + if UpCase(dins.name) = insName then begin + exit(true); //encontró + end; + end; + //No se encontró + exit(false); +end; +function TParserDirecBase.DefinedVar(cad: string; out dvar: TDirVar): boolean; +{Indica si un identificador corresponde a una variable. Devuelve la referencia a la +variable encontrada.} +begin + cad := UpCase(cad); + for dvar in varsList do begin + if UpCase(dvar.nomb) = cad then begin + exit(true); + end; + end; + exit(false); +end; +function TParserDirecBase.AsigVariable(VarName: string; const value: TDirOperand): TDirVar; +{Asigna un valor numérico o de cadena a una variable. Si no existe la crea. +Devuelve la referencia a la variable asignada.} +begin + //Busca variable + if DefinedVar(VarName, Result) then begin + //Encontró la variable + Result.valor := value; + exit(Result); + end; + //No se encontró, se debe crear + Result := TDirVar.Create; + Result.nomb := VarName; + Result.valor := value; + varsList.Add(Result); +end; +//Public +procedure TParserDirecBase.skipWhites; +begin + if tokType = lexDir.tnSpace then + lexDir.Next; //quita espacios +end; +procedure TParserDirecBase.GenErrorDir(msg: string); +{Genera un error corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni + lexDir.GetX; //corrige columna + GenErrorPos(msg, [], p); +end; +procedure TParserDirecBase.GenErrorDir(msg: string; const Args: array of const); +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni + lexDir.GetX; //corrige columna + GenErrorPos(msg, Args, p); +end; +procedure TParserDirecBase.AddSysVariableNumber(varName: string; + ReadNum: TDirEveReadNum; WriteNum: TDirEveWriteNum); +{Add a new system variable of type number, to the Directive engine.} +var + dvar: TDirVar; +begin + dvar := TDirVar.Create; + dvar.nomb := varName; + dvar.ReflectToNumber(ReadNum, WriteNum); + varsList.Add(dvar); +end; +procedure TParserDirecBase.AddSysVariableString(varName: string; + ReadStr: TDirEveReadStr; WriteStr: TDirEveWriteStr); +var + dvar: TDirVar; +begin + dvar := TDirVar.Create; + dvar.nomb := varName; + dvar.ReflectToString(ReadStr, WriteStr); + varsList.Add(dvar); +end; +procedure TParserDirecBase.ProcDIRline(const AsmLin: string; out ctxChanged: boolean); {Procesa una directiva, que ha sido definida, para que solo ocupe una sola línea, para simplificar el procesamiento, ya que si las macros ocupan más de una línea, complican tremendamente la exploración del lexer y la ubicación de errores. Sin embargo, las directivas de tipo $IFDEF ... o ELSE ... se pueden procesar aquí, leyendo varias líneas sucesivas del código fuente.} var - lin, direc: String; + lin: String; dmac: TDirMacro; p: TSrcPos; dvar: TDirVar; + dins: TDirInstruc; begin ctxChanged := false; IniExplorDirec(lin); @@ -1356,7 +1590,6 @@ procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean end; //sigue identificador case UpperCase(lexDir.GetToken) of - 'PROCESSOR' : ProcPROCESSOR; 'FREQUENCY' : ProcFREQUENCY; 'CONFIG' : ProcCONFIG; 'INCLUDE' : ProcINCLUDE(lin, ctxChanged); @@ -1366,41 +1599,8 @@ procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean 'IFNDEF' : ProcIFDEF(lin, true); 'IF' : ProcIF(lin, false); 'IFNOT' : ProcIF(lin, true); - 'ELSE' : begin - if WaitForEndIF>0 then begin - {Estamos dentro de un IF, que se supone dio verdadero, de otra forma, no llegaría - por aquí. De ser así, el ELSE debe ser falso.} - cIn.Next; //toma token {$ELSE} - //Explora, sin compilar, hasta encontrar directiva delimitadora. - if not ScanIFDEF(direc) then begin - //Llegó al final del código fuente, sin encontrar el ENDIF - GenErrorDir(ER_ENDIF_NOFOU); - exit; - end; - //Encontró token delimitador - //Si es $ENDIF, no hay problema, todo termina allí, pero si es un else: - if direc='ELSE' then begin - GenErrorDir(ER_UNEXP_ELSE); - exit; - end; - //Encontró un $ENDIF - dec(WaitForEndIF); //lleva la cuenta - end else begin - //No se esperaba - GenErrorDir(ER_UNEXP_ENDIF); - exit; - end; - end; - 'ENDIF' : begin - if WaitForEndIF>0 then begin - //Se es peraba el delimitador - Dec(WaitForEndIF); //para que ya no siga buscando - end else begin - //No se esperaba - GenErrorDir(ER_UNEXP_ENDIF); - exit; - end; - end; + 'ELSE' : ProcELSE; + 'ENDIF' : ProcENDIF; 'MODE' : ProcMODE; 'MSGBOX' : ProcMSGBOX; 'MSGERR' : ProcMSGERR; @@ -1412,13 +1612,16 @@ procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean 'CLEAR_STATE_RAM': ProcCLEAR_STATE_RAM; 'SET_STATE_RAM' : ProcSET_STATE_RAM; 'SET_MAPPED_RAM' : ProcSET_MAPPED_RAM; -// 'SET_RAM_NAME' : ProcSET_RAM_NAME; + 'RESET_PINS' : ProcRESET_PINS; + 'SET_PIN_NAME' : ProcSET_PIN_NAME; 'MAP_RAM_TO_PIN' : ProcMAP_RAM_TO_PIN; 'SET_UNIMP_BITS' : ProcSET_UNIMP_BITS; + 'SET_UNIMP_BITS1': ProcSET_UNIMP_BITS1; else - //Puede ser una macro - dmac := FindMacro(lexDir.GetToken); - if dmac <> nil then begin + //Puede ser una instrucción, macro o variable + if DefinedInstruc(lexDir.GetToken, dins) then begin + dins.OnCall(); + end else if DefinedMacro(lexDir.GetToken, dmac) then begin p := cIn.ReadSrcPos; //Guarda posición del token cIn.Next; //pasa la directiva cIn.NewContextFromTxt( @@ -1449,189 +1652,7 @@ procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean end; end; end; -function TParserDirec.read_PIC_MODEL: string; -begin - Result := pic.Model; -end; -procedure TParserDirec.write_PIC_MODEL(AValue: string); -begin - pic.Model := AValue; -end; -function TParserDirec.read_PIC_FREQUEN: Single; -begin - Result := pic.frequen; -end; -procedure TParserDirec.write_PIC_FREQUEN(AValue: Single); -begin - pic.frequen := round(AValue); -end; -function TParserDirec.read_PIC_MAXFREQ: Single; -begin - Result := PIC.MaxFreq; -end; -procedure TParserDirec.write_PIC_MAXFREQ(AValue: Single); -begin - PIC.MaxFreq := round(AValue); -end; -function TParserDirec.read_PIC_NUMBANKS: Single; -begin - Result := pic.NumBanks; -end; -procedure TParserDirec.write_PIC_NUMBANKS(AValue: Single); -begin - pic.NumBanks := round(AValue); -end; -function TParserDirec.read_PIC_NUMPAGES: Single; -begin - Result := pic.NumPages; -end; -procedure TParserDirec.write_PIC_NUMPAGES(AValue: Single); -begin - pic.NumPages := round(AValue); -end; -function TParserDirec.read_PIC_IFLASH: Single; -begin - Result := pic.iFlash; -end; -procedure TParserDirec.write_PIC_IFLASH(AValue: Single); -begin - pic.iFlash := round(AValue); -end; -function TParserDirec.read_PIC_MAXFLASH: Single; -begin - Result := pic.MaxFlash; -end; -procedure TParserDirec.write_PIC_MAXFLASH(AValue: Single); -begin - pic.MaxFlash := round(AValue); -end; -function TParserDirec.read_PIC_NPINS: Single; -begin - Result := pic.Npins; -end; -procedure TParserDirec.write_PIC_NPINS(AValue: Single); -begin - pic.Npins := round(AValue); -end; -function TParserDirec.read_SYN_MODE: String; -begin - case mode of - modPicPas: Result := 'PicPas'; - modPascal: Result := 'Pascal'; - else - Result := ''; - end; -end; -procedure TParserDirec.write_SYN_MODE(AValue: String); -begin - -end; -function TParserDirec.read_CURRBANK: Single; -begin - Result := CurrBank; -end; -procedure TParserDirec.write_CURRBANK(AValue: Single); -begin - CurrBank := Round(AValue); -end; -function TParserDirec.read_CURRBLOCK: String; -var - parentNod: TxpEleCodeCont; -begin - if TreeElems.curNode.idClass = eltBody then begin - //Solo aquí puede haber bloques - parentNod := TreeElems.CurCodeContainer; //Se supone que nunca debería fallar - if parentNod.CurrBlock = nil then - exit('') - else - exit(parentNod.CurrBlock.idStr); - end else begin - Result := ''; - end; -end; -procedure TParserDirec.ClearMacros; -var - dvar: TDirVar; -begin - macroList.Clear; - WaitForEndIF := 0; - ConfigWord := -1; //-1 significa, No Inicializado - //Limpia variables - varsList.Clear; - //Crea variables del sistema - //PIC_MODEL - dvar := TDirVar.Create; - dvar.nomb := 'PIC_MODEL'; - dvar.ReflectToString(@read_PIC_MODEL, @write_PIC_MODEL); - varsList.Add(dvar); - //PIC_FREQUEN - dvar := TDirVar.Create; - dvar.nomb := 'PIC_FREQUEN'; - dvar.ReflectToNumber(@read_PIC_FREQUEN, @write_PIC_FREQUEN); - varsList.Add(dvar); - //PIC_MAXFREQ - dvar := TDirVar.Create; - dvar.nomb := 'PIC_MAXFREQ'; - dvar.ReflectToNumber(@read_PIC_MAXFREQ, @write_PIC_MAXFREQ); - varsList.Add(dvar); - //PIC_NUMBANKS - dvar := TDirVar.Create; - dvar.nomb := 'PIC_NUMBANKS'; - dvar.ReflectToNumber(@read_PIC_NUMBANKS, @write_PIC_NUMBANKS); - varsList.Add(dvar); - //PIC_NUMPAGES - dvar := TDirVar.Create; - dvar.nomb := 'PIC_NUMPAGES'; - dvar.ReflectToNumber(@read_PIC_NUMPAGES, @write_PIC_NUMPAGES); - varsList.Add(dvar); - //PIC_IFLASH - dvar := TDirVar.Create; - dvar.nomb := 'PIC_IFLASH'; - dvar.ReflectToNumber(@read_PIC_IFLASH, @write_PIC_IFLASH); - varsList.Add(dvar); - //PIC_NPINS - dvar := TDirVar.Create; - dvar.nomb := 'PIC_NPINS'; - dvar.ReflectToNumber(@read_PIC_NPINS, @write_PIC_NPINS); - varsList.Add(dvar); - //PIC_MAXFLASH - dvar := TDirVar.Create; - dvar.nomb := 'PIC_MAXFLASH'; - dvar.ReflectToNumber(@read_PIC_MAXFLASH, @write_PIC_MAXFLASH); - varsList.Add(dvar); - - //SYN_MODE - dvar := TDirVar.Create; - dvar.nomb := 'SYN_MODE'; - dvar.ReflectToString(@read_SYN_MODE, @write_SYN_MODE); - varsList.Add(dvar); - //CurrBank - dvar := TDirVar.Create; - dvar.nomb := 'CURRBANK'; - dvar.ReflectToNumber(@read_CURRBANK, @write_CURRBANK); - varsList.Add(dvar); - //CurrBlock - dvar := TDirVar.Create; - dvar.nomb := 'CURRBLOCK'; - dvar.ReflectToString(@read_CURRBLOCK, nil); - varsList.Add(dvar); -end; -constructor TParserDirec.Create; -begin - inherited Create; - lexDir := TSynFacilSyn.Create(nil); //crea lexer para analzar directivas - macroList := TDirMacro_list.Create(true); - varsList := TDirVar_list.Create(true); - DefLexDirectiv; -end; -destructor TParserDirec.Destroy; -begin - varsList.Destroy; - macroList.Destroy; - lexDir.Destroy; - inherited Destroy; -end; -procedure TParserDirec.DefLexDirectiv; +procedure TParserDirecBase.DefLexDirectiv; (*Define la sintaxis del lexer que se usará para analizar las directivas. La que debe estar entre los símbolo {$ ... } *) @@ -1678,5 +1699,48 @@ procedure TParserDirec.DefLexDirectiv; lexDir.AddSymbSpec('}', dirDelimiter); lexDir.Rebuild; end; +procedure TParserDirecBase.ClearMacros; +begin + macroList.Clear; + WaitForEndIF := 0; + ConfigWord := -1; //-1 significa, No Inicializado + //Create instructions + instList.Clear; +// AddInstruction(); + + //Create system variables + varsList.Clear; + AddSysVariableString('PIC_MODEL' , @read_PIC_MODEL , @write_PIC_MODEL); + AddSysVariableNumber('PIC_FREQUEN' , @read_PIC_FREQUEN, @write_PIC_FREQUEN); + AddSysVariableNumber('PIC_MAXFREQ' , @read_PIC_MAXFREQ, @write_PIC_MAXFREQ); + AddSysVariableNumber('PIC_NUMBANKS', @read_PIC_NUMBANKS, @write_PIC_NUMBANKS); + AddSysVariableNumber('PIC_NUMPAGES', @read_PIC_NUMPAGES, @write_PIC_NUMPAGES); + AddSysVariableNumber('PIC_IFLASH' , @read_PIC_IFLASH , @write_PIC_IFLASH); + AddSysVariableNumber('PIC_NPINS' , @read_PIC_NPINS , @write_PIC_NPINS); + AddSysVariableNumber('PIC_MAXFLASH', @read_PIC_MAXFLASH, @write_PIC_MAXFLASH); + AddSysVariableString('SYN_MODE' , @read_SYN_MODE , @write_SYN_MODE); + AddSysVariableNumber('CURRBANK' , @read_CURRBANK , @write_CURRBANK); + AddSysVariableString('CURRBLOCK' , @read_CURRBLOCK , nil); +end; +//Initialization +constructor TParserDirecBase.Create; +begin + inherited Create; + lexDir := TSynFacilSyn.Create(nil); //crea lexer para analzar directivas + macroList := TDirMacro_list.Create(true); + varsList := TDirVar_list.Create(true); + instList := TDirInstruc_list.Create(true); + DefLexDirectiv; + callProcDIRline := @ProcDIRline; +end; +destructor TParserDirecBase.Destroy; +begin + instList.Destroy; + varsList.Destroy; + macroList.Destroy; + lexDir.Destroy; + inherited Destroy; +end; end. + diff --git a/Source/ParserDirecPIC16.pas b/Source/ParserDirecPIC16.pas new file mode 100644 index 00000000..509f6aa5 --- /dev/null +++ b/Source/ParserDirecPIC16.pas @@ -0,0 +1,1682 @@ +{Unidad que implementa a la clase TParserDirec, que sirve como contenedor para +implementar las funcionaliddes de procesamiento de directivas. +} +unit ParserDirecPIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, ParserAsmPIC16, fgl, math, SynFacilHighlighter, Globales, + XpresElementsPIC, Pic16Devices, MisUtils, XpresBas, LCLProc, Graphics; +type //Tipos para manejo de expresiones + TDirDatType = (ddtNumber, ddtString); + + { TDirOperand } + //Tipo expresión u operando. Se usa para manejo de evaluación aritmética. + TDirOperand = object + private + FvalStr: string; + FvalNum: Double; + function GetvalNum: Double; + procedure SetvalNum(AValue: Double); + function GetvalStr: string; + procedure SetvalStr(AValue: string); + public //Campos principales + datTyp: TDirDatType; //Tipo de dato + property valNum: Double read GetvalNum write SetvalNum ; //Valor numérico de la expresión + property valStr: string read GetvalStr write SetvalStr; //Valor cadena de la expresión + procedure SetBool(value: boolean); + End; + + TDirEveReadNum = function: Single of object; + TDirEveWriteNum = procedure(AValue: Single) of object; + TDirEveReadStr = function: String of object; + TDirEveWriteStr = procedure(AValue: String) of object; + { TDirVar } + //Define a una variable. + TDirVar= class + private //Eventos + {Estos eventos se usan cuando se requiere direccionar, la lectura/escritura de + valores de la expresión.} + OnReadNum: TDirEveReadNum; + OnWriteNum: TDirEveWriteNum; + OnReadStr: TDirEveReadStr; + OnWriteStr: TDirEveWriteStr; + private + Fvalor: TDirOperand; + function Getvalor: TDirOperand; + procedure Setvalor(AValue: TDirOperand); + public + nomb: string; //Nombre de la variable + property valor: TDirOperand read Getvalor write Setvalor; + procedure ReflectToNumber(ReadNum: TDirEveReadNum; WriteNum: TDirEveWriteNum); + procedure ReflectToString(ReadStr: TDirEveReadStr; WriteStr: TDirEveWriteStr); + //property datTyp: TDirDatType read Fvalor.datTyp write Fvalor.datTyp; + end; + TDirVar_list = specialize TFPGObjectList; + +type + //Identifica a una macro + TDirMacro = class + name : string; + value : string; + posDef: TSrcPos; //posición del contexto + end; + + TDirMacro_list = specialize TFPGObjectList; + + { TParserDirec } + TParserDirec = class(TParserAsm) + private //Rutinas del evaluador de expresiones + varsList : TDirVar_list; + function CogCarERR(car: char): Boolean; + function CogExpresionPar: TDirOperand; + function CogIdentif(var s: string): boolean; + function CogNumero(var n: Double): boolean; + function CogOperando: TDirOperand; + function cogOperador: String; + function DefinedVar(cad: string; out dvar: TDirVar): boolean; + procedure ProcINFO; + procedure ProcMSGERR; + procedure ProcMSGWAR; + procedure ProcSET_MAPPED_RAM; + procedure ProcMAP_RAM_TO_PIN; + procedure ProcSET_UNIMP_BITS; + procedure ProcCLEAR_STATE_RAM; + procedure ProcSET_STATE_RAM; + function read_CURRBANK: Single; + function read_CURRBLOCK: String; + function read_PIC_FREQUEN: Single; + function read_PIC_IFLASH: Single; + function read_PIC_MAXFLASH: Single; + function read_PIC_MAXFREQ: Single; + function read_PIC_MODEL: string; + function read_PIC_NPINS: Single; + function read_PIC_NUMBANKS: Single; + function read_PIC_NUMPAGES: Single; + function read_SYN_MODE: String; + procedure write_CURRBANK(AValue: Single); + procedure write_PIC_FREQUEN(AValue: Single); + procedure write_PIC_IFLASH(AValue: Single); + procedure write_PIC_MAXFLASH(AValue: Single); + procedure write_PIC_MAXFREQ(AValue: Single); + procedure write_PIC_MODEL(AValue: string); + function Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; + function jerOp(operad: String): Integer; + function CogExpresion(jerar: Integer): TDirOperand; + function AsigVariable(VarName: string; const value: TDirOperand): TDirVar; + procedure write_PIC_NPINS(AValue: Single); + procedure write_PIC_NUMBANKS(AValue: Single); + procedure write_PIC_NUMPAGES(AValue: Single); + procedure write_SYN_MODE(AValue: String); + private + lexDir : TSynFacilSyn; //lexer para analizar directivas + tokIni : integer; //Posición inicial del token actual + dirOperator: Integer; + dirDelimiter: integer; + WaitForEndIF: integer; + macroList : TDirMacro_list; + procedure GenErrorDir(msg: string; const Args: array of const); + procedure GenErrorDir(msg: string); + procedure IniExplorDirec(out lin: string); + function modeStr: string; + procedure ProcCONFIG; + procedure ProcFREQUENCY; + procedure ProcDEFINE(lin: string); + procedure ProcIFDEF(lin: string; negated: boolean); + procedure ProcIF(lin: string; negated: boolean); + procedure ProcINCLUDE(lin: string; var ctxChanged: boolean); + procedure ProcOUTPUTHEX(lin: string); + procedure ProcMODE; + procedure ProcMSGBOX; + procedure ProcWARNING; + procedure ProcERROR; + procedure ProcSET; + procedure ProcPROCESSOR; + function ScanIFDEF(out tok: string): boolean; + procedure skipWhites; + function GetIdent: string; + function tokType: integer; + procedure DefLexDirectiv; + protected //Variables internas del compilador + mainFile : string; //archivo inicial que se compila + mode : (modPascal, modPicPas); + ConfigWord: integer; //Bits de configuración + procedure NewMacro(macName, macValue: string); + procedure ProcDIRline(const AsmLin: string; out ctxChanged: boolean); + function DefinedMacro(macName: string): boolean; + function FindMacro(macName: string): TDirMacro; + public + hexFile : string; //Nombre de archivo de salida + Compiling: boolean; //Bandera para el compilado + function ExpandRelPathTo(BaseFile, FileName: string): string; + procedure ClearMacros; + constructor Create; override; + destructor Destroy; override; + end; + + procedure SetLanguage; + +implementation +{$I ..\language\tra_ParserDirec.pas} +{ TDirOperand } +function TDirOperand.GetvalNum: Double; +begin + if datTyp = ddtNumber then begin + Result := FvalNum; + end else begin //es cadena + //Trata de obtener su valor numérico + if not TryStrToFloat(FvalStr , Result) then exit(0); + end; +end; +procedure TDirOperand.SetvalNum(AValue: Double); +begin + datTyp := ddtNumber; //fuerza a que sea numéro + FvalNum := AValue; +end; +function TDirOperand.GetvalStr: string; +begin + if datTyp = ddtString then begin + Result := FvalStr; + end else begin //es número + Result := FloatToStr(FvalNum); + end; +end; +procedure TDirOperand.SetvalStr(AValue: string); +begin + datTyp := ddtString; //fuerza a que sea string + FvalStr := AValue; +end; +procedure TDirOperand.SetBool(value: boolean); +{Asigna un valro booleano al operando. En realidad, no hay valores booleando, así +que se usará los números 0 o 1} +begin + if value then valNum := 1 else valNum := 0; +end; +{ TDirVar } +function TDirVar.Getvalor: TDirOperand; +begin + //Primero actualiza en caso de que este enlazada. + {Se actualizan ambos tipos porque, si por ejemplo, el tipo es numérico, pero se pide + como cadena, se debe tener actualizdo su valor numérico, por si se hace una conversión. + Habría que ver, si esta es la forma más óptima, de implementarlo.} + if OnReadNum<>nil then Fvalor.valNum := OnReadNum(); + if OnReadStr<>nil then Fvalor.valStr := OnReadStr(); + //Ahora devuelve valor actualizado + Result := Fvalor; +end; +procedure TDirVar.Setvalor(AValue: TDirOperand); +begin + Fvalor := AValue; //actualiza + //Llama a eventos para actualziar valor reflejado + if OnWriteNum<>nil then OnWriteNum(Fvalor.FvalNum); + if OnWriteStr<>nil then OnWriteStr(Fvalor.FvalStr); +end; +procedure TDirVar.ReflectToNumber(ReadNum: TDirEveReadNum; + WriteNum: TDirEveWriteNum); +{Define que la variable esté reflejada a otra variable numérica, mediante eventos.} +begin + Fvalor.datTyp := ddtNumber; //fija como número + OnReadNum := ReadNum; //asigna eventos + OnWriteNum := WriteNum; +end; +procedure TDirVar.ReflectToString(ReadStr: TDirEveReadStr; + WriteStr: TDirEveWriteStr); +begin + Fvalor.datTyp := ddtString; //fija como cadena + OnReadStr := ReadStr; //asigna eventos + OnWriteStr := WriteStr; +end; +{ TParserDirec } +procedure TParserDirec.GenErrorDir(msg: string); +{Genera un error corrigiendo la posición horizontal} +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni + lexDir.GetX; //corrige columna + GenErrorPos(msg, [], p); +end; +procedure TParserDirec.GenErrorDir(msg: string; const Args: array of const); +var + p: TSrcPos; +begin + p := cIn.ReadSrcPos; + p.col := tokIni + lexDir.GetX; //corrige columna + GenErrorPos(msg, Args, p); +end; +function TParserDirec.modeStr: string; +begin + case mode of + modPascal: Result := 'modPascal'; + modPicPas: Result := 'modPicPas'; + else + Result := 'Unknown'; + end; +end; +function TParserDirec.tokType: integer; +begin + Result := lexdir.GetTokenKind; +end; +procedure TParserDirec.skipWhites; +begin + if tokType = lexDir.tnSpace then + lexDir.Next; //quita espacios +end; +function TParserDirec.CogCarERR(car: char): Boolean; +{Coge el caracter indicado. Si no lo encuentra genera error y devuelve FALSE.} +begin + if lexDir.GetToken=car then begin + //Es el caracter buscado + lexDir.Next; + exit(true); + end else begin + GenErrorDir(ER_EXPECT_CAR_, [car]); + exit(false); + end; +end; +function TParserDirec.GetIdent: string; +begin + if tokType = lexDir.tnSpace then + lexDir.Next; //quita espacios + //verifica + if lexDir.GetTokenKind <> lexDir.tnIdentif then begin + GenErrorDir(ER_IDENT_EXPEC); + exit; + end; + Result := lexDir.GetToken; + lexDir.Next; //toma identificador +end; +function TParserDirec.DefinedVar(cad: string; out dvar: TDirVar): boolean; +{Indica si un identificador corresponde a una variable. Devuelve la referencia a la +variable encontrada.} +begin + cad := UpCase(cad); + for dvar in varsList do begin + if UpCase(dvar.nomb) = cad then begin + exit(true); + end; + end; + exit(false); +end; +function TParserDirec.CogExpresionPar: TDirOperand; +{Coge una expresión que debe estar encerrada entre paréntesis. Puede genera error} +begin + if not CogCarERR('(') then exit; //sale con error + Result := CogExpresion(0); + if HayError then exit; //sale con error + skipWhites; + if not CogCarERR(')') then exit; //sale con error +end; +function TParserDirec.CogNumero(var n: Double): boolean; +{Veririfca si lo que sigues es un número y de ser así, intenta tomarlo. +Puede generar error al convertir el número} +var + m: Longint; +begin + if lexdir.GetTokenKind <> lexdir.tnNumber then exit(false); + if lexdir.GetToken[1] = '$' then begin + //Formato hexadecimal + if not TryStrToInt(lexdir.GetToken, m) then begin + GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); + exit(false); + end; + n := m; + end else begin + if not TryStrToFloat(lexdir.GetToken, n) then begin + GenErrorDir(ER_ERIN_NUMBER_, [lexDir.GetToken]); + exit(false); + end; + end; + lexdir.Next; + Result := true; //indica que hubo número +end; +function TParserDirec.CogIdentif(var s: string): boolean; +{Veririfca si lo que sigues es un identificador y de ser así, intenta tomarlo.} +begin + if tokType = lexDir.tnSpace then + lexDir.Next; //quita espacios + //verifica + if lexDir.GetTokenKind <> lexDir.tnIdentif then begin + exit(false); + end; + s := lexDir.GetToken; + lexDir.Next; //toma identificador + exit(true); +end; +function TParserDirec.CogOperando: TDirOperand; +{Coge un operando en la posición actual del contexto. Si no enceuntra +el operando o es erróneo, genera Error.} +var + cad , tmp: String; + num : Double; + exp : TDirOperand; + mac: TDirMacro; + p: TFaLexerState; + dvar: TDirVar; + delim: Char; +begin + skipWhites; //quita blancos iniciales + if lexDir.GetEol then begin + Result.datTyp := ddtString; + Result.FvalStr := ''; + exit; + end; + if CogNumero(num) then begin + if HayError then exit; //pudo haber error en número + Result.valNum := num; //fija tipo a número + end else if lexDir.GetTokenKind = lexDir.tnString then begin + //Es cadena + tmp := lexDir.GetToken; + delim := tmp[1]; + tmp := copy(tmp, 2, length(tmp)-2); //quita delimitadores + if delim='"' then begin + //Es cadena con comilla doble + tmp := StringReplace(tmp, '\n', LineEnding, [rfReplaceAll]); + tmp := StringReplace(tmp, '\r', chr($0D), [rfReplaceAll]); + tmp := StringReplace(tmp, '\t', #9, [rfReplaceAll]); + end; + Result.valStr := tmp; + lexDir.Next; + end else if CogIdentif(cad) then begin + {Es un identificador} + //Busca si es macro + mac := FindMacro(cad); + if mac<>nil then begin + //Es una macro. Hay que expandirla + p := lexDir.State; //guarda estado de lexer + lexDir.SetLine(mac.value, 0); //inicia otra explroación en el contenido de la macro + Result := CogExpresion(0); + lexDir.State := p; //restaura estado del lexer, para que siga la expresión + exit; + end; + //Busca si es una variable + cad := UpCase(cad); + for dvar in varsList do begin + if UpCase(dvar.nomb) = cad then begin + Result := dvar.valor; + exit; + end; + end; + //No es variable, ni macro, busca si es función + case cad of + 'ABS': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := abs(exp.valNum); + exit; //sale sin error + end; + 'SGN': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := Sign(exp.valNum); + exit; //sale sin error + end; + 'SIN': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := sin(exp.valNum); + exit; //sale sin error + end; + 'COS': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := cos(exp.valNum); + exit; //sale sin error + end; + 'TAN': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := tan(exp.valNum); + exit; //sale sin error + end; + 'LOG': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := ln(exp.valNum); + exit; //sale sin error + end; + 'ROUND': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := round(exp.valNum); + exit; //sale sin error + end; + 'TRUNC': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := trunc(exp.valNum); + exit; //sale sin error + end; + 'LENGTH': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valNum := length(exp.valStr); + exit; //sale sin error + end; + 'UPCASE': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valStr := upcase(exp.valStr); + exit; //sale sin error + end; + 'LOWCASE': begin + exp := CogExpresionPar; + if HayError then exit; + Result.valStr := LowerCase(exp.valStr); + exit; //sale sin error + end; + end; + //No es variable ni función. + GenErrorDir(ER_UNKNW_IDENT_, [cad]); + end else If lexDir.GetToken = '(' Then begin + Result := CogExpresionPar; + exit; //Puede salir con error + end else If lexDir.GetToken = '-' Then begin + //Puede ser número negativo + lexDir.Next; //toma el signo + Result := CogOperando(); + if HayError then exit; + if Result.datTyp <> ddtNumber then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; //no devuelve nada + end; + //Es un número + Result.valNum := -Result.valNum; + exit; //Puede salir con error + end else begin + //Debe ser otra cosa + GenErrorDir(ER_SYNTAX_ERRO); + exit; //no devuelve nada + end; +end; +function TParserDirec.cogOperador: String; +{Coge un operador en la posición del contexto actual. Si no encuentra + devuelve cadena vacía y no coge caracteres, salvo espacios iniciales.} +begin + Result := ''; + skipWhites; //quita blancos iniciales + Case UpCase(lexDir.GetToken) of //completa con operador de más caracteres + '+': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '-': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '*': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '/': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '\': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '%': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '^': begin + Result := lexDir.GetToken; + lexDir.next; + end; + //Operadores de comparación + '=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<>': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '>': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '>=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + '<=': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'AND': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'OR': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'XOR': begin + Result := lexDir.GetToken; + lexDir.next; + end; + 'NOT': begin + Result := lexDir.GetToken; + lexDir.next; + end; + end; +end; +function TParserDirec.jerOp(operad: String): Integer; +//Devuelve la jerarquía de un operador ver documentación técnica. +begin + case operad of + 'OR','XOR' : Result := 2; + 'AND' : Result := 3; + '=', '<>', '>', '<', '>=', '<=': Result := 4; + '+', '-' : Result := 5; + '*', '/', '\', '%' : Result := 6; + '^', 'NOT' : Result := 8; + else + Result := 0; + end; +End; +function TParserDirec.Evaluar(Op1: TDirOperand; opr: String; Op2: TDirOperand): TDirOperand; +//Devuelve el resultado y tipo de una operación +begin + Case opr of + '': begin //Sin operador. Y se supone sin Op2 + //no hay nada que hacer, ya está en la pila + Result := Op1; + end; + '+': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena + Result.valStr := Op1.valStr + Op2.valStr; //cadena + end else begin + //Son dos números, los suma + Result.valNum := Op1.valNum + Op2.valNum; //número + end; + end; + '-': begin + Result.valNum := Op1.valNum - Op2.valNum; + end; + '*': begin + Result.valNum := Op1.valNum * Op2.valNum; + end; + '/': begin + if Op2.valNum = 0 Then + GenErrorDir(ER_DIVIDE_ZERO) + else begin //error + Result.valNum := Op1.valNum / Op2.valNum; + End; + end; + '\': begin + if Op2.valNum = 0 then + GenErrorDir(ER_DIVIDE_ZERO) + else begin //error + Result.valNum := round(Op1.valNum) div round(Op2.valNum); + end; + end; + '%': begin + if Op2.valNum = 0 then + GenErrorDir(ER_DIVIDE_ZERO) + else begin //error + Result.valNum := round(Op1.valNum) mod round(Op2.valNum); + end; + end; + '^': begin + if (Op2.valNum = 0) and (Op2.valNum = 0) then + GenErrorDir(ER_EVA_ZER_ZER) + else begin //error + Result.valNum := power(Op1.valNum, Op2.valNum); + end; + end; + //Operadores de comparación + '=': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr = Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum = Op2.valNum); + end; + end; + '<>': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr <> Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum <> Op2.valNum); + end; + end; + '>': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr > Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum > Op2.valNum); + end; + end; + '<': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr < Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum < Op2.valNum); + end; + end; + '>=': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr >= Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum >= Op2.valNum); + end; + end; + '<=': begin + //Puede ser concatenación o suma + if (Op1.datTyp = ddtString) or (Op2.datTyp = ddtString) then begin + //Al menos uno es cadena, compara cadenas + Result.SetBool(Op1.valStr <= Op2.valStr); + end else begin + //Son dos números, compara valores + Result.SetBool(Op1.valNum <= Op2.valNum); + end; + end; + //Operadores lógicos + //Falta ... + else begin + GenErrorDir(ER_OPE_NOT_IMP_, [opr]); + Exit; + End; + end; +end; +function TParserDirec.CogExpresion(jerar: Integer): TDirOperand; +{ Evaluador de expresiones. Toma una expresión completa, en la posición actual del +contenido. Si no encuentra una expresión, genera error. } +var Op1, Op2 : TDirOperand; + opr, opr2 : String; + jerOpr, jerOpr2: Integer; + pos1, pos2: TFaLexerState; +begin + skipWhites; //quita blancos iniciales + Op1 := CogOperando; //error + if HayError then exit; + opr := cogOperador; + if opr = '' Then begin + Result := Op1; + Exit + End; + jerOpr := jerOp(opr); //Hay operador, tomar su jerarquía + //-------------------------- ¿Delimitada por jerarquía? --------------------- + if jerOpr <= jerar then begin //es menor que la que sigue, expres. + Result := Op1; //solo devuelve el único operando que leyó + Exit; + End; + while opr <> '' do begin + pos1 := lexDir.State; //Guarda por si lo necesita + Op2 := CogOperando; + if HayError then exit; + pos2 := lexDir.State; //Guarda por si lo necesita + opr2 := cogOperador; + If opr2 <> '' Then begin //Hay otro operador + jerOpr2 := jerOp(opr2); + //¿Delimitado por jerarquía de operador? + If jerOpr2 <= jerar Then begin //sigue uno de menor jerarquía, hay que salir + lexDir.State:= pos2; //antes de coger el operador + Result := Evaluar(Op1, opr, Op2); + Exit; + End; + If jerOpr2 > jerOpr Then begin //y es de mayor jerarquía, retrocede + lexDir.State:= pos1; //retrocede + Op2 := CogExpresion(jerOpr); //evalua primero + opr2 := cogOperador; //actualiza el siguiente operador + End; + End; + + Op1 := Evaluar(Op1, opr, Op2); //evalua resultado + if HayError then exit; + opr := opr2; + jerOpr := jerOp(opr); //actualiza operador anterior + end; + Result := Op1; +end; +function TParserDirec.AsigVariable(VarName: string; const value: TDirOperand): TDirVar; +{Asigna un valor numérico o de cadena a una variable. Si no existe la crea. +Devuelve la referencia a la variable asignada.} +begin + //Busca variable + if DefinedVar(VarName, Result) then begin + //Encontró la variable + Result.valor := value; + exit(Result); + end; + //No se encontró, se debe crear + Result := TDirVar.Create; + Result.nomb := VarName; + Result.valor := value; + varsList.Add(Result); +end; +procedure TParserDirec.NewMacro(macName, macValue: string); +{Agrega una nueva macro a la lista de macros} +var + mac: TDirMacro; +begin + mac := TDirMacro.Create; + mac.name := macName; + mac.value := macValue; + //Ubica la posición del contexto + mac.posDef := cIn.ReadSrcPos; + macroList.Add(mac); +end; +function TParserDirec.DefinedMacro(macName: string): boolean; +{Indica si una macro ha sido definida} +var + mac: TDirMacro; +begin + macName := UpCase(macName); + for mac in macroList do begin + if UpCase(mac.name) = macName then begin + exit(true); //encontró + end; + end; +//No se encontró + exit(false); +end; +function TParserDirec.FindMacro(macName: string): TDirMacro; +{Busca la definición de una macro, si la encuentra, devuelve la referecnia, de otra +forma dewvuelve NIL.} +var + mac: TDirMacro; +begin + macName := UpCase(macName); + for mac in macroList do begin + if UpCase(mac.name) = macName then begin + exit(mac); //encontró + end; + end; +//No se encontró + exit(nil); +end; +function TParserDirec.ExpandRelPathTo(BaseFile, FileName: string): string; +{Convierte una ruta relativa (FileName), a una absoluta, usnado como base la ruta de +otro archivo (BaseFile)} +var + BasePath: RawByteString; +begin + if pos(DirectorySeparator, FileName)=0 then begin + //Ruta relativa. Se completa + BasePath := ExtractFileDir(BaseFile); + if BasePath = '' then begin + //No hay de donde completar, usa la ruta actual + Result := ExpandFileName(FileName); + end else begin + Result := ExtractFileDir(BaseFile) + DirectorySeparator + FileName; + end; + end else begin + //Tiene "DirectorySeparator", se asume que es ruta absoluta, y no se cambia. + Result := FileName; + end; +end; +function TParserDirec.ScanIFDEF(out tok: string): boolean; +{Explora el texto, hasta encontrar la directiva $ENDIF o $ELSE. Si llega al + final del contexto, sin encontrar alguna de estas directivas, devuelve FALSE.} +var + tmp, direc: string; +begin + while not cIn.Eof do begin +// debugln(cIn.tok); + if cIn.tokType = tnDirective then begin + //Podría ser el delimitador buscado + IniExplorDirec(tmp); + direc := UpperCase(lexDir.GetToken); + if (direc = 'ENDIF') or (direc='ELSE') then begin + //Encontró el delimitador + tok := direc; + cIn.Next; //toma el token + exit(true); //y continúa + end; + end; + cIn.Next; + end; + //No encontró + exit(false); +end; +procedure TParserDirec.ProcPROCESSOR; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if not GetHardwareInfo(pic, lexDir.GetToken) then begin + GenErrorDir(ER_UNKNO_DEVIC, [lexDir.GetToken]); + exit; + end; +end; +procedure TParserDirec.ProcFREQUENCY; +var + f: Longint; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if tokType <> lexDir.tnNumber then begin + GenErrorDir(ER_ERROR_DIREC); + exit; + end; + if not TryStrToInt(lexDir.GetToken, f) then begin + GenErrorDir(ER_ERROR_FREQ); + exit; + end; + lexDir.Next; //pasa al siguiente + skipWhites; + case UpperCase(lexDir.GetToken) of + 'KHZ': f := f * 1000; + 'MHZ': f := f * 1000000; + else + GenErrorDir(ER_ERROR_DIREC); + exit; + end; + if f>pic.MaxFreq then begin + GenErrorDir(ER_TOOHIGHFRE); + exit; + end; + pic.frequen:=f; //asigna frecuencia +end; +procedure TParserDirec.ProcCONFIG; +var + Ident, tmp: String; + mac: TDirMacro; + valBit: Longint; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if lexDir.GetTokenKind = lexDir.tnNumber then begin + //Es un valor numérico + if not TryStrToInt(lexDir.GetToken, valBit) then begin + GenErrorDir(ER_INVAL_CBIT_, [Ident]); + exit; + end; + //Ya se tiene el valor numérico + ConfigWord := valBit; //carga directamente + lexDir.Next; + skipWhites; + //No debe seguir nada + if not lexDir.GetEol then begin + GenErrorDir(ER_INVAL_CBIT_, [Ident]); + exit; + end; + exit; + end; + //Debe seguir identificadores + while not lexDir.GetEol do begin + Ident := GetIdent; + if HayError then exit; + mac := FindMacro(Ident); + if mac <> nil then begin + //Hay macro definida. Hay que extraer su valor. + tmp := trim(mac.value); + if copy(tmp,1,2) = '0x' then begin + delete(tmp,1,2); + tmp := '$' + tmp; + end; + if not TryStrToInt(tmp, valBit) then begin + GenErrorDir(ER_INVAL_CBIT_, [Ident]); + exit; + end; + //Ya se tiene el valor numérico + if ConfigWord = -1 then begin + //Es la primera vez que se inicia + ConfigWord := $FFFF; + end; + ConfigWord := ConfigWord and valBit; //Marca bandera + + //msgbox('|'+mac.value+'|'); + end else begin + //No está definido + GenErrorDir(ER_CONF_UNDEF_, [Ident]); + exit; + end; + skipWhites; + if lexDir.GetToken = ',' then begin + lexDir.Next; //pasa al siguiente + end; + skipWhites; + end; +end; +procedure TParserDirec.ProcINCLUDE(lin: string; var ctxChanged: boolean); +{Implementa la inclusión de un archivo externo en el código} +var + filPath: string; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + //Toma el restante de la cadena + filPath := copy(lin, lexDir.GetX); + //Completa ruta, si es relativa + if (pos('/', filPath)=0) and (pos('\', filPath)=0) then begin + //No incluye información de ruta. Asume que está en la misma ruta. + filPath := ExtractFileDir(mainFile) + DirectorySeparator + filPath; + end; + if not FileExists(filPath) then begin + GenErrorDir(ER_FILE_NO_FND_, [filPath]); + exit; + end; + //Ya se tiene el archivo + cIn.Next; //pasa la directiva + cIn.NewContextFromFile(filPath); //Pasa a explorar contenido del archivo + cIn.curCon.autoClose := true; //Para que se cierre, al finalizar + //cIn.curCon.FixErrPos := true; //Para que se ignore la posición de los errores + //cIn.curCon.ErrPosition := p; //Posición a usar para ubicar el error + //cIn.curCon.PreErrorMsg := 'Macro '+mac.name+': '; + ctxChanged := true; //Marca bandera para indciar que se ha cambiado de contexto + +end; +procedure TParserDirec.ProcOUTPUTHEX(lin: string); +var + filPath: String; +begin + lexDir.Next; //pasa al siguiente + filPath := CogExpresion(0).valStr; + if HayError then Exit; + filPath := ExpandRelPathTo(mainFile, filPath); //Completa ruta, si es relativa + //Por simplicidad se permite realizar esto en la primera y segunda pasada + //Auqnue lo más práctico sería en la segunda pasada donde se genera el HEX final. + hexfile := filPath; +end; +procedure TParserDirec.ProcDEFINE(lin: string); +var + Ident, value: String; +begin + lexDir.Next; //pasa al siguiente + Ident := GetIdent; + if HayError then exit; + skipWhites; + if lexDir.GetEol then begin + //Se definió un identificador sin valor + NewMacro(Ident, ''); + end else begin + //Sigue algo más + if lexDir.GetToken <> '=' then begin + GenErrorDir(ER_EXPEC_EQUAL); + exit; + end; + lexDir.Next; //toma símbolo + skipWhites; + if lexDir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + end; + //Toma definición + value := copy(lin, lexDir.GetX, length(lin)); + NewMacro(Ident, value); + end; +end; +procedure TParserDirec.ProcIFDEF(lin: string; negated: boolean); + function EvaluateExp(const Ident: string): boolean; + {Evalúa el resultado de la expresión de la directiva $IFDEF. + Debería ejecutarse solo una vez, en ProcIFDEF(()} + var + xDirec: TxpEleDIREC; + ele: TxpElement; + dvar: TDirVar; + begin + if FirstPass then begin + //Agrega el nodo para guardar información para la segunda pasada + xDirec := TxpEleDIREC.Create; + xDirec.srcDec := cIn.ReadSrcPos; //guarda posición de aparición + TreeDirec.AddElement(xDirec, false); //Agrega sin verificación de nombre + //Evalúa + Result := (DefinedMacro(Ident) or DefinedVar(Ident, dvar)) xor negated; + //Guarda resultado + xDirec.ifDefResult := Result; + end else begin + {En al segunda pasada, ya no se evalúa, porque la segunda pasada, ya no se + hace en el orden del código fuente, y se pierde la secuencia de directivas.} + for ele in TreeDirec.curNode.elements do begin + //Busca la directiva de la dirección actual (ubicada en la primera pasada) + if ele.srcDec.EqualTo(cIn.ReadSrcPos) then begin + //Encontró + Result := TxpEleDIREC(ele).ifDefResult; + exit; + end; + end; + //No encontró. Esto no debería pasar. + MsgErr('Implementation error.'); + end; + end; +var + Ident, direc: String; +begin + lexDir.Next; //pasa al siguiente + Ident := GetIdent; + if HayError then exit; + skipWhites; + if lexDir.GetEol then begin + //Esto es lo normal. Buscamos el identificador + if EvaluateExp(Ident) then begin + //Está definido + inc(WaitForEndIF); //marca bandera para esperar + end else begin + //No está definido, no se debe compilar hasta un {$ENDIF} o un {$ELSE} + cIn.Next; //toma token {$IDEF } + //Explora, sin compilar, hasta encontrar directiva delimitadora. + if not ScanIFDEF(direc) then begin + //Llegó al final del código fuente, sin encontrar el ENDIF + GenErrorDir(ER_ENDIF_NOFOU); + exit; + end; + //Encontró token delimitador + //Si es $ENDIF, no hay problema, todo termina allí, pero si es un else: + if direc='ELSE' then begin + inc(WaitForEndIF); //marca bandera para esperar + end; + end; + end else begin + //Sigue algo más. No se esperaba. + GenErrorDir(ER_SYNTAX_ERRO); + end; +end; +procedure TParserDirec.ProcIF(lin: string; negated: boolean); + function EvaluateExp(const Ident: string): boolean; + {Evalúa el resultado de la expresión de la directiva $IFDEF. + Debería ejecutarse solo una vez, en ProcIFDEF(()} + var + xDirec: TxpEleDIREC; + ele: TxpElement; + varValue: TDirOperand; + begin + if FirstPass then begin + //Agrega el nodo para guardar información para la segunda pasada + xDirec := TxpEleDIREC.Create; + xDirec.srcDec := cIn.ReadSrcPos; //guarda posición de aparición + TreeDirec.AddElement(xDirec, false); //Agrega sin verificación de nombre + //Evalúa + varValue := CogExpresion(0); + //No debería seguir nada más + if not lexDir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; + end; + if varValue.datTyp = ddtNumber then begin + //En números, cualquier valor <>0 se considera verdadero + Result := (varValue.valNum<>0) xor negated; + end else begin + //En cadenas, cualquier cadena no nula se considera verdadero + Result := (varValue.valStr<>'') xor negated; + end; + //Guarda resultado + xDirec.ifDefResult := Result; + end else begin + {En al segunda pasada, ya no se evalúa, porque la segunda pasada, ya no se + hace en el orden del código fuente, y se pierde la secuencia de directivas.} + for ele in TreeDirec.curNode.elements do begin + //Busca la directiva de la dirección actual (ubicada en la primera pasada) + if ele.srcDec.EqualTo(cIn.ReadSrcPos) then begin + //Encontró + Result := TxpEleDIREC(ele).ifDefResult; + exit; + end; + end; + //No encontró. Esto no debería pasar. + MsgErr('Implementation error.'); + end; + end; +var + Ident, direc: String; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if lexDir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; + end; + //Se supone que sigue una expresión + if EvaluateExp(Ident) then begin + //Es verdadero + inc(WaitForEndIF); //marca bandera para esperar + end else begin + //No es verdadero, no se debe compilar hasta un {$ENDIF} o un {$ELSE} + cIn.Next; //toma token {$IDEF } + //Explora, sin compilar, hasta encontrar directiva delimitadora. + if not ScanIFDEF(direc) then begin + //Llegó al final del código fuente, sin encontrar el ENDIF + GenErrorDir(ER_ENDIF_NOFOU); + exit; + end; + //Encontró token delimitador + //Si es $ENDIF, no hay problema, todo termina allí, pero si es un else: + if direc='ELSE' then begin + inc(WaitForEndIF); //marca bandera para esperar + end; + end; +end; +procedure TParserDirec.ProcMODE; +var + txtMode: String; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + txtMode := UpCase(lexDir.GetToken); + if txtMode = 'PICPAS' then begin + self.mode := modPicPas; + end else if txtMode = 'PASCAL' then begin + self.mode := modPascal; + end else begin + GenErrorDir(ER_MODE_UNKNOWN, [txtMode]); + exit; + end; +end; +procedure TParserDirec.ProcMSGBOX; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then msgbox(txtMsg); +end; +procedure TParserDirec.ProcMSGERR; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then MsgErr(txtMsg); +end; +procedure TParserDirec.ProcMSGWAR; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then MsgExc(txtMsg); +end; +procedure TParserDirec.ProcINFO; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then GenInfo(txtMsg); +end; +procedure TParserDirec.ProcWARNING; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then GenWarn(txtMsg); +end; +procedure TParserDirec.ProcERROR; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then Exit; + //Solo muestra en compilación y en la primera pasada + if Compiling and FirstPass then GenError(txtMsg); +end; +procedure TParserDirec.ProcSET; +//Asigna valor a una varaible +var + varName: String; + varValue: TDirOperand; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if lexDir.GetEol then begin + GenErrorDir(ER_SYNTAX_ERRO); + exit; + end; + if lexDir.GetTokenKind <> lexDir.tnIdentif then begin + GenErrorDir(ER_IDENT_EXPEC); + exit; + end; + varName := lexDir.GetToken; //lee identificador + lexDir.Next; + skipWhites; + if not CogCarERR('=') then exit; //sale con error + varValue := CogExpresion(0); + if HayError then exit; + AsigVariable(varName, varValue); +end; +procedure TParserDirec.ProcSET_STATE_RAM; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + pic.SetStatRAMCom(txtMsg); + if pic.MsjError<>'' then GenErrorDir(pic.MsjError); +end; +procedure TParserDirec.ProcSET_MAPPED_RAM; +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + pic.SetMappRAMCom(txtMsg); + if pic.MsjError<>'' then GenErrorDir(pic.MsjError); +end; +procedure TParserDirec.ProcMAP_RAM_TO_PIN; +{Mapea pines del encapsulado a direcciones de memoria} +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if HayError then exit; + pic.MapRAMtoPIN(txtMsg); + if pic.MsjError<>'' then GenErrorDir(pic.MsjError); +end; +procedure TParserDirec.ProcSET_UNIMP_BITS; +{Configura bits no implementados para una dirección de RAM.} +var + txtMsg: String; +begin + lexDir.Next; //pasa al siguiente + txtMsg := CogExpresion(0).valStr; + if txtMsg='' then begin + GenErrorDir('Expected string'); + end; + if HayError then exit; + pic.SetUnimpBITS(txtMsg); + if pic.MsjError<>'' then GenErrorDir(pic.MsjError); +end; +procedure TParserDirec.ProcCLEAR_STATE_RAM; +{Limpia el estado de la memoria RAM} +begin + pic.DisableAllRAM; +end; +procedure TParserDirec.IniExplorDirec(out lin: string); +(*Inicia la exploración del token de directiva. Extrae el delimitador final "}", y +posiciona al lexer justo despues del delimitador inicial "{$". Devuelve la línea +procesada en "lin" (sin delimitador final). Además inicia tokIni +*) +var + dlin: Integer; + p: TSrcPos; +begin + //Fija el inicio del token actual (Esto es válido, porque las directivas son "unilineas") + tokIni := Cin.curCon.lex.GetX - 1; + //Usa SynFacilSyn como lexer para analizar texto + lin := Cin.tok; + dlin := length(lin); + if lin[dlin] = '}' then begin + delete(lin, dlin, 1); //quita delimitador final de directiva + end else begin + //Es un error, pero es salvable. + //Ubicamos el error, "manualmente", porque aún no hemos explorado con el lexer. + p := cIn.ReadSrcPos; + p.col := tokIni + dlin + 1; //columna al final + GenErrorPos(ER_EXPECTED_BR, [], p); + end; + //Inicia exploración con el lexer "lexDir" + lexDir.SetLine(lin, 0); //inicia cadena + lexDir.Next; //Salta el "{$" + skipWhites; +end; +procedure TParserDirec.ProcDIRline(const AsmLin: string; out ctxChanged: boolean); +{Procesa una directiva, que ha sido definida, para que solo ocupe una sola línea, +para simplificar el procesamiento, ya que si las macros ocupan más de una línea, +complican tremendamente la exploración del lexer y la ubicación de errores. +Sin embargo, las directivas de tipo $IFDEF ... o ELSE ... se pueden procesar aquí, +leyendo varias líneas sucesivas del código fuente.} +var + lin, direc: String; + dmac: TDirMacro; + p: TSrcPos; + dvar: TDirVar; +begin + ctxChanged := false; + IniExplorDirec(lin); + if tokType <> lexDir.tnIdentif then begin + GenErrorDir(ER_ERROR_DIREC); + exit; + end; + //sigue identificador + case UpperCase(lexDir.GetToken) of + 'PROCESSOR' : ProcPROCESSOR; + 'FREQUENCY' : ProcFREQUENCY; + 'CONFIG' : ProcCONFIG; + 'INCLUDE' : ProcINCLUDE(lin, ctxChanged); + 'OUTPUTHEX' : ProcOUTPUTHEX(lin); + 'DEFINE' : ProcDEFINE(lin); + 'IFDEF' : ProcIFDEF(lin, false); + 'IFNDEF' : ProcIFDEF(lin, true); + 'IF' : ProcIF(lin, false); + 'IFNOT' : ProcIF(lin, true); + 'ELSE' : begin + if WaitForEndIF>0 then begin + {Estamos dentro de un IF, que se supone dio verdadero, de otra forma, no llegaría + por aquí. De ser así, el ELSE debe ser falso.} + cIn.Next; //toma token {$ELSE} + //Explora, sin compilar, hasta encontrar directiva delimitadora. + if not ScanIFDEF(direc) then begin + //Llegó al final del código fuente, sin encontrar el ENDIF + GenErrorDir(ER_ENDIF_NOFOU); + exit; + end; + //Encontró token delimitador + //Si es $ENDIF, no hay problema, todo termina allí, pero si es un else: + if direc='ELSE' then begin + GenErrorDir(ER_UNEXP_ELSE); + exit; + end; + //Encontró un $ENDIF + dec(WaitForEndIF); //lleva la cuenta + end else begin + //No se esperaba + GenErrorDir(ER_UNEXP_ENDIF); + exit; + end; + end; + 'ENDIF' : begin + if WaitForEndIF>0 then begin + //Se es peraba el delimitador + Dec(WaitForEndIF); //para que ya no siga buscando + end else begin + //No se esperaba + GenErrorDir(ER_UNEXP_ENDIF); + exit; + end; + end; + 'MODE' : ProcMODE; + 'MSGBOX' : ProcMSGBOX; + 'MSGERR' : ProcMSGERR; + 'MSGWAR' : ProcMSGWAR; + 'INFO' : ProcINFO; + 'WARNING' : ProcWARNING; + 'ERROR' : ProcERROR; + 'SET' : ProcSET; + 'CLEAR_STATE_RAM': ProcCLEAR_STATE_RAM; + 'SET_STATE_RAM' : ProcSET_STATE_RAM; + 'SET_MAPPED_RAM' : ProcSET_MAPPED_RAM; +// 'SET_RAM_NAME' : ProcSET_RAM_NAME; + 'MAP_RAM_TO_PIN' : ProcMAP_RAM_TO_PIN; + 'SET_UNIMP_BITS' : ProcSET_UNIMP_BITS; + else + //Puede ser una macro + dmac := FindMacro(lexDir.GetToken); + if dmac <> nil then begin + p := cIn.ReadSrcPos; //Guarda posición del token + cIn.Next; //pasa la directiva + cIn.NewContextFromTxt( + dmac.value, //Pasa a explorar contenido de la macro como cadena + dmac.posDef.fil {Fija el archivo de definiición de la macro.} + ); + cIn.curCon.autoClose := true; //Para que se cierre, al finalizar + cIn.curCon.FixErrPos := true; //Para que se ignore la posición de los errores + cIn.curCon.ErrPosition := p; //Posición a usar para ubicar el error + cIn.curCon.PreErrorMsg := 'Macro '+dmac.name+': '; + ctxChanged := true; //Marca bandera para indciar que se ha cambiado de contexto + end else if DefinedVar(lexDir.GetToken, dvar) then begin + //Es variable + p := cIn.ReadSrcPos; //Guarda posición del token + cIn.Next; //pasa la directiva + cIn.NewContextFromTxt( + dvar.valor.valStr, //Pasa a explorar valor de la variable como texto + '' {Fija el archivo de definiición.} + ); + cIn.curCon.autoClose := true; //Para que se cierre, al finalizar + cIn.curCon.FixErrPos := true; //Para que se ignore la posición de los errores + cIn.curCon.ErrPosition := p; //Posición a usar para ubicar el error + cIn.curCon.PreErrorMsg := 'Variable '+dvar.nomb+': '; + ctxChanged := true; //Marca bandera para indciar que se ha cambiado de contexto + end else begin + GenErrorDir(ER_UNKNO_DIREC, [lexDir.GetToken]); + exit; + end; + end; +end; +function TParserDirec.read_PIC_MODEL: string; +begin + Result := pic.Model; +end; +procedure TParserDirec.write_PIC_MODEL(AValue: string); +begin + pic.Model := AValue; +end; +function TParserDirec.read_PIC_FREQUEN: Single; +begin + Result := pic.frequen; +end; +procedure TParserDirec.write_PIC_FREQUEN(AValue: Single); +begin + pic.frequen := round(AValue); +end; +function TParserDirec.read_PIC_MAXFREQ: Single; +begin + Result := PIC.MaxFreq; +end; +procedure TParserDirec.write_PIC_MAXFREQ(AValue: Single); +begin + PIC.MaxFreq := round(AValue); +end; +function TParserDirec.read_PIC_NUMBANKS: Single; +begin + Result := pic.NumBanks; +end; +procedure TParserDirec.write_PIC_NUMBANKS(AValue: Single); +begin + pic.NumBanks := round(AValue); +end; +function TParserDirec.read_PIC_NUMPAGES: Single; +begin + Result := pic.NumPages; +end; +procedure TParserDirec.write_PIC_NUMPAGES(AValue: Single); +begin + pic.NumPages := round(AValue); +end; +function TParserDirec.read_PIC_IFLASH: Single; +begin + Result := pic.iFlash; +end; +procedure TParserDirec.write_PIC_IFLASH(AValue: Single); +begin + pic.iFlash := round(AValue); +end; +function TParserDirec.read_PIC_MAXFLASH: Single; +begin + Result := pic.MaxFlash; +end; +procedure TParserDirec.write_PIC_MAXFLASH(AValue: Single); +begin + pic.MaxFlash := round(AValue); +end; +function TParserDirec.read_PIC_NPINS: Single; +begin + Result := pic.Npins; +end; +procedure TParserDirec.write_PIC_NPINS(AValue: Single); +begin + pic.Npins := round(AValue); +end; +function TParserDirec.read_SYN_MODE: String; +begin + case mode of + modPicPas: Result := 'PicPas'; + modPascal: Result := 'Pascal'; + else + Result := ''; + end; +end; +procedure TParserDirec.write_SYN_MODE(AValue: String); +begin + +end; +function TParserDirec.read_CURRBANK: Single; +begin + Result := CurrBank; +end; +procedure TParserDirec.write_CURRBANK(AValue: Single); +begin + CurrBank := Round(AValue); +end; +function TParserDirec.read_CURRBLOCK: String; +var + parentNod: TxpEleCodeCont; +begin + if TreeElems.curNode.idClass = eltBody then begin + //Solo aquí puede haber bloques + parentNod := TreeElems.CurCodeContainer; //Se supone que nunca debería fallar + if parentNod.CurrBlock = nil then + exit('') + else + exit(parentNod.CurrBlock.idStr); + end else begin + Result := ''; + end; +end; +procedure TParserDirec.ClearMacros; +var + dvar: TDirVar; +begin + macroList.Clear; + WaitForEndIF := 0; + ConfigWord := -1; //-1 significa, No Inicializado + //Limpia variables + varsList.Clear; + //Crea variables del sistema + //PIC_MODEL + dvar := TDirVar.Create; + dvar.nomb := 'PIC_MODEL'; + dvar.ReflectToString(@read_PIC_MODEL, @write_PIC_MODEL); + varsList.Add(dvar); + //PIC_FREQUEN + dvar := TDirVar.Create; + dvar.nomb := 'PIC_FREQUEN'; + dvar.ReflectToNumber(@read_PIC_FREQUEN, @write_PIC_FREQUEN); + varsList.Add(dvar); + //PIC_MAXFREQ + dvar := TDirVar.Create; + dvar.nomb := 'PIC_MAXFREQ'; + dvar.ReflectToNumber(@read_PIC_MAXFREQ, @write_PIC_MAXFREQ); + varsList.Add(dvar); + //PIC_NUMBANKS + dvar := TDirVar.Create; + dvar.nomb := 'PIC_NUMBANKS'; + dvar.ReflectToNumber(@read_PIC_NUMBANKS, @write_PIC_NUMBANKS); + varsList.Add(dvar); + //PIC_NUMPAGES + dvar := TDirVar.Create; + dvar.nomb := 'PIC_NUMPAGES'; + dvar.ReflectToNumber(@read_PIC_NUMPAGES, @write_PIC_NUMPAGES); + varsList.Add(dvar); + //PIC_IFLASH + dvar := TDirVar.Create; + dvar.nomb := 'PIC_IFLASH'; + dvar.ReflectToNumber(@read_PIC_IFLASH, @write_PIC_IFLASH); + varsList.Add(dvar); + //PIC_NPINS + dvar := TDirVar.Create; + dvar.nomb := 'PIC_NPINS'; + dvar.ReflectToNumber(@read_PIC_NPINS, @write_PIC_NPINS); + varsList.Add(dvar); + //PIC_MAXFLASH + dvar := TDirVar.Create; + dvar.nomb := 'PIC_MAXFLASH'; + dvar.ReflectToNumber(@read_PIC_MAXFLASH, @write_PIC_MAXFLASH); + varsList.Add(dvar); + + //SYN_MODE + dvar := TDirVar.Create; + dvar.nomb := 'SYN_MODE'; + dvar.ReflectToString(@read_SYN_MODE, @write_SYN_MODE); + varsList.Add(dvar); + //CurrBank + dvar := TDirVar.Create; + dvar.nomb := 'CURRBANK'; + dvar.ReflectToNumber(@read_CURRBANK, @write_CURRBANK); + varsList.Add(dvar); + //CurrBlock + dvar := TDirVar.Create; + dvar.nomb := 'CURRBLOCK'; + dvar.ReflectToString(@read_CURRBLOCK, nil); + varsList.Add(dvar); +end; +constructor TParserDirec.Create; +begin + inherited Create; + lexDir := TSynFacilSyn.Create(nil); //crea lexer para analzar directivas + macroList := TDirMacro_list.Create(true); + varsList := TDirVar_list.Create(true); + DefLexDirectiv; +end; +destructor TParserDirec.Destroy; +begin + varsList.Destroy; + macroList.Destroy; + lexDir.Destroy; + inherited Destroy; +end; +procedure TParserDirec.DefLexDirectiv; +(*Define la sintaxis del lexer que se usará para analizar las directivas. La que + debe estar entre los símbolo {$ ... } +*) +begin + lexDir.ClearSpecials; //para empezar a definir tokens + lexDir.CreateAttributes; //Limpia atributos + lexDir.ClearMethodTables; + + dirOperator := lexDir.NewTokType('operator'); + dirDelimiter:= lexDir.NewTokType('delimiter'); + lexDir.Attrib[lexDir.tnSymbol].Background := clRed; + lexDir.Attrib[dirOperator].Background := clGreen; + //solo se requiere identificadores y números + lexDir.DefTokIdentif('[A-Za-z_]', '[A-Za-z0-9_]*'); + lexDir.DefTokContent('[0-9]', '[0-9.]*', lexDir.tnNumber); + lexDir.DefTokContent('[$]','[0-9A-Fa-f]*', lexDir.tnNumber); + lexDir.DefTokDelim('''', '''', lexDir.tnString); //cadenas + lexDir.DefTokDelim('"', '"', lexDir.tnString); //cadenas + + lexDir.AddSymbSpec('=', dirOperator); + lexDir.AddSymbSpec('+=', dirOperator); + lexDir.AddSymbSpec('<>', dirOperator); + lexDir.AddSymbSpec('>', dirOperator); + lexDir.AddSymbSpec('<', dirOperator); + lexDir.AddSymbSpec('>=', dirOperator); + lexDir.AddSymbSpec('<=', dirOperator); + + lexDir.AddIdentSpec('AND', dirOperator); + lexDir.AddIdentSpec('OR', dirOperator); + lexDir.AddIdentSpec('XOR', dirOperator); + lexDir.AddIdentSpec('NOT', dirOperator); + + lexDir.AddSymbSpec('+', dirOperator); + lexDir.AddSymbSpec('-', dirOperator); + lexDir.AddSymbSpec('*', dirOperator); + lexDir.AddSymbSpec('/', dirOperator); + lexDir.AddSymbSpec('\', dirOperator); + lexDir.AddSymbSpec('%', dirOperator); + lexDir.AddSymbSpec('^', dirOperator); + + lexDir.AddSymbSpec('(', dirDelimiter); + lexDir.AddSymbSpec(')', dirDelimiter); + lexDir.AddSymbSpec('{$', dirDelimiter); + lexDir.AddSymbSpec('}', dirDelimiter); + lexDir.Rebuild; +end; + +end. diff --git a/Source/ParserDirec_PIC10.pas b/Source/ParserDirec_PIC10.pas new file mode 100644 index 00000000..0f2c48e3 --- /dev/null +++ b/Source/ParserDirec_PIC10.pas @@ -0,0 +1,59 @@ +{Unidad que implementa a la clase TParserDirec, que sirve como contenedor para +implementar las funcionaliddes adicionales del procesamiento de directivas. +} +unit ParserDirec_PIC10; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, ParserDirec, Pic10Devices, ParserAsm_PIC10; +type + + { TParserDirec } + TParserDirec = class(TParserAsm) + private //Rutinas del evaluador de expresiones + function read_PIC_ENHANCED: Single; + procedure write_PIC_ENHANCED(AValue: Single); + private + procedure ProcPROCESSOR; + public + procedure ClearMacros; + end; + + procedure SetLanguage; + +implementation + +procedure SetLanguage; +begin + ParserAsm_PIC10.SetLanguage; +end; + +{ TParserDirec } +procedure TParserDirec.ProcPROCESSOR; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if not GetHardwareInfo(pic, lexDir.GetToken) then begin + GenErrorDir(ER_UNKNO_DEVIC, [lexDir.GetToken]); + exit; + end; +end; +//Otras variables +function TParserDirec.read_PIC_ENHANCED: Single; +begin + if pic.Enhanced then Result := 1 else Result := 0; +end; +procedure TParserDirec.write_PIC_ENHANCED(AValue: Single); +begin + pic.Enhanced := (round(AValue) <> 0); +end; +procedure TParserDirec.ClearMacros; +begin + inherited; + //Agrega nuevas instrucciones + AddInstruction('PROCESSOR', @ProcPROCESSOR); + //Agrega nuevas variables del sistema + AddSysVariableNumber('PIC_ENHANCED', @read_PIC_ENHANCED, @write_PIC_ENHANCED); +end; + +end. diff --git a/Source/ParserDirec_PIC16.pas b/Source/ParserDirec_PIC16.pas new file mode 100644 index 00000000..d993c465 --- /dev/null +++ b/Source/ParserDirec_PIC16.pas @@ -0,0 +1,44 @@ +{Unidad que implementa a la clase TParserDirec, que sirve como contenedor para +implementar las funcionaliddes adicionales del procesamiento de directivas. +} +unit ParserDirec_PIC16; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, ParserDirec, Pic16Devices, ParserAsm_PIC16; + +type + + { TParserDirec } + TParserDirec = class(TParserAsm) + private + procedure ProcPROCESSOR; + public + procedure ClearMacros; + end; + + procedure SetLanguage; + +implementation +procedure SetLanguage; +begin + ParserAsm_PIC16.SetLanguage; +end; +{ TParserDirec } +procedure TParserDirec.ProcPROCESSOR; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if not GetHardwareInfo(pic, lexDir.GetToken) then begin + GenErrorDir(ER_UNKNO_DEVIC, [lexDir.GetToken]); + exit; + end; +end; +procedure TParserDirec.ClearMacros; +begin + inherited; + //Agrega nuevas instrucciones + AddInstruction('PROCESSOR', @ProcPROCESSOR); +end; + +end. diff --git a/Source/ParserDirec_PIC17.pas b/Source/ParserDirec_PIC17.pas new file mode 100644 index 00000000..3d926af3 --- /dev/null +++ b/Source/ParserDirec_PIC17.pas @@ -0,0 +1,44 @@ +{Unidad que implementa a la clase TParserDirec, que sirve como contenedor para +implementar las funcionaliddes adicionales del procesamiento de directivas. +} +unit ParserDirec_PIC17; +{$mode objfpc}{$H+} +interface +uses + Classes, SysUtils, ParserDirec, Pic17Devices, ParserAsm_PIC17; + +type + + { TParserDirec } + TParserDirec = class(TParserAsm) + private + procedure ProcPROCESSOR; + public + procedure ClearMacros; + end; + + procedure SetLanguage; + +implementation +procedure SetLanguage; +begin + ParserAsm_PIC17.SetLanguage; +end; +{ TParserDirec } +procedure TParserDirec.ProcPROCESSOR; +begin + lexDir.Next; //pasa al siguiente + skipWhites; + if not GetHardwareInfo(pic, lexDir.GetToken) then begin + GenErrorDir(ER_UNKNO_DEVIC, [lexDir.GetToken]); + exit; + end; +end; +procedure TParserDirec.ClearMacros; +begin + inherited; + //Agrega nuevas instrucciones + AddInstruction('PROCESSOR', @ProcPROCESSOR); +end; + +end. diff --git a/Source/project1.ico b/Source/PicPas.ico similarity index 100% rename from Source/project1.ico rename to Source/PicPas.ico diff --git a/Source/project1.lpi b/Source/PicPas.lpi similarity index 72% rename from Source/project1.lpi rename to Source/PicPas.lpi index d95e549a..7b092bf5 100644 --- a/Source/project1.lpi +++ b/Source/PicPas.lpi @@ -1,12 +1,12 @@ - + - + <Title Value="PicPas"/> <ResourceType Value="res"/> <UseXPManifest Value="True"/> <Icon Value="0"/> @@ -25,7 +25,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\_Librerias\SynFacilUtils-1.21;..\..\_Librerias\MisUtils 0.5;..\..\_Librerias\MiConfig 0.4b;..\..\_Librerias\PicUtils-1.3;..\..\_Librerias\Xpres-1.3.2;..\..\_Librerias\UtilsGrilla 0.8;..\..\_Librerias\ogEditGraf 1.6b"/> + <OtherUnitFiles Value="..\..\_Librerias\SynFacilUtils-1.21;..\..\_Librerias\MisUtils-0.6;..\..\_Librerias\MiConfig-0.4;..\..\_Librerias\PicUtils-1.4;..\..\_Librerias\Xpres-1.3.2;..\..\_Librerias\UtilsGrilla-0.8;..\..\_Librerias\ogEditGraf-2.3"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> @@ -50,11 +50,13 @@ </BuildModes> <PublishOptions> <Version Value="2"/> + <DestinationDirectory Value="C:\Users\Usuario\Desktop\PicPasFull"/> </PublishOptions> <RunParams> - <local> - <FormatVersion Value="1"/> - </local> + <FormatVersion Value="2"/> + <Modes Count="1"> + <Mode0 Name="default"/> + </Modes> </RunParams> <RequiredPackages Count="3"> <Item1> @@ -67,9 +69,9 @@ <PackageName Value="LCL"/> </Item3> </RequiredPackages> - <Units Count="29"> + <Units Count="43"> <Unit0> - <Filename Value="project1.lpr"/> + <Filename Value="PicPas.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> @@ -80,7 +82,7 @@ <ResourceBaseClass Value="Form"/> </Unit1> <Unit2> - <Filename Value="Parser.pas"/> + <Filename Value="Compiler_PIC16.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> @@ -91,15 +93,15 @@ <ResourceBaseClass Value="Form"/> </Unit3> <Unit4> - <Filename Value="GenCod.pas"/> + <Filename Value="GenCod_PIC16.pas"/> <IsPartOfProject Value="True"/> </Unit4> <Unit5> - <Filename Value="GenCodPic.pas"/> + <Filename Value="GenCodBas_PIC16.pas"/> <IsPartOfProject Value="True"/> </Unit5> <Unit6> - <Filename Value="XpresParserPIC.pas"/> + <Filename Value="CompBase.pas"/> <IsPartOfProject Value="True"/> </Unit6> <Unit7> @@ -175,11 +177,11 @@ <IsPartOfProject Value="True"/> </Unit18> <Unit19> - <Filename Value="ParserAsm.pas"/> + <Filename Value="ParserAsm_PIC16.pas"/> <IsPartOfProject Value="True"/> </Unit19> <Unit20> - <Filename Value="ParserDirec.pas"/> + <Filename Value="ParserDirec_PIC16.pas"/> <IsPartOfProject Value="True"/> </Unit20> <Unit21> @@ -214,6 +216,7 @@ <Filename Value="FrameRomExplorer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="fraRomExplorer"/> + <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> </Unit25> <Unit26> @@ -237,6 +240,65 @@ <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> </Unit28> + <Unit29> + <Filename Value="GenCodBas_PIC10.pas"/> + <IsPartOfProject Value="True"/> + </Unit29> + <Unit30> + <Filename Value="GenCod_PIC10.pas"/> + <IsPartOfProject Value="True"/> + </Unit30> + <Unit31> + <Filename Value="ParserAsm_PIC10.pas"/> + <IsPartOfProject Value="True"/> + </Unit31> + <Unit32> + <Filename Value="ParserDirec_PIC10.pas"/> + <IsPartOfProject Value="True"/> + </Unit32> + <Unit33> + <Filename Value="Compiler_PIC10.pas"/> + <IsPartOfProject Value="True"/> + </Unit33> + <Unit34> + <Filename Value="ParserDirec.pas"/> + <IsPartOfProject Value="True"/> + </Unit34> + <Unit35> + <Filename Value="FramePicAsm.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraPicAsm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + </Unit35> + <Unit36> + <Filename Value="GenCodBas_PIC17.pas"/> + <IsPartOfProject Value="True"/> + </Unit36> + <Unit37> + <Filename Value="GenCod_PIC17.pas"/> + <IsPartOfProject Value="True"/> + </Unit37> + <Unit38> + <Filename Value="ParserAsm_PIC17.pas"/> + <IsPartOfProject Value="True"/> + </Unit38> + <Unit39> + <Filename Value="ParserDirec_PIC17.pas"/> + <IsPartOfProject Value="True"/> + </Unit39> + <Unit40> + <Filename Value="Compiler_PIC17.pas"/> + <IsPartOfProject Value="True"/> + </Unit40> + <Unit41> + <Filename Value="CompOperands.pas"/> + <IsPartOfProject Value="True"/> + </Unit41> + <Unit42> + <Filename Value="CompMain.pas"/> + <IsPartOfProject Value="True"/> + </Unit42> </Units> </ProjectOptions> <CompilerOptions> @@ -247,7 +309,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="..\..\_Librerias\SynFacilUtils-1.21;..\..\_Librerias\MisUtils-0.6;..\..\_Librerias\MiConfig 0.4b;..\..\_Librerias\PicUtils-1.3;..\..\_Librerias\Xpres-1.3.2;..\..\_Librerias\UtilsGrilla 0.8;..\..\_Librerias\ogEditGraf-1.7"/> + <OtherUnitFiles Value="..\..\_libraries\SynFacilUtils-1.21;..\..\_libraries\MisUtils-0.6;..\..\_libraries\MiConfig-0.4;..\..\_libraries\PicUtils-1.6;..\..\_libraries\Xpres-1.3.2;..\..\_libraries\UtilsGrilla-0.8;..\..\_libraries\ogEditGraf-2.7"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> diff --git a/Source/project1.lpr b/Source/PicPas.lpr similarity index 56% rename from Source/project1.lpr rename to Source/PicPas.lpr index 156a6efc..7aa54970 100644 --- a/Source/project1.lpr +++ b/Source/PicPas.lpr @@ -1,4 +1,4 @@ -program project1; +program PicPas; {$mode objfpc}{$H+} @@ -7,12 +7,10 @@ cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset - Forms, lazcontrols, FormPrincipal, Parser, FormPICExplorer, GenCod, GenCodPic, - XpresParserPIC, FrameSyntaxTree, XpresElementsPIC, Globales, FormConfig, - PicPasProject, FrameEditView, FrameMessagesWin, FormElemProperty, - FrameCfgSyntax, FrameCfgSynEdit, CodeTools, ParserAsm, ParserDirec, - FrameCfgExtTool, FormDebugger, FrameRamExplorer, FormRAMExplorer, - FrameRomExplorer, FramePicRegisters, FrameRegWatcher, FramePICDiagram; + Forms, lazcontrols, FormPrincipal, FormPICExplorer, FrameSyntaxTree, + XpresElementsPIC, Globales, FormConfig, PicPasProject, FrameEditView, + FrameMessagesWin, FormElemProperty, ParserAsm_PIC16, FrameCfgExtTool, + FormDebugger, FormRAMExplorer, ParserDirec, CompBase; {$R *.res} diff --git a/Source/PicPas.lps b/Source/PicPas.lps new file mode 100644 index 00000000..0c0d61a2 --- /dev/null +++ b/Source/PicPas.lps @@ -0,0 +1,696 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <PathDelim Value="\"/> + <Version Value="11"/> + <BuildModes Active="Debug"/> + <Units Count="51"> + <Unit0> + <Filename Value="PicPas.lpr"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <CursorPos X="47" Y="13"/> + <UsageCount Value="219"/> + </Unit0> + <Unit1> + <Filename Value="FormPrincipal.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmPrincipal"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <TopLine Value="261"/> + <CursorPos X="12" Y="285"/> + <FoldState Value=" TL00304111D p0!E01 T470A T5n001]E8mc22 T3nY036 pibj4052131313[F4nY]:161D]DXoc0451A pjUjZ2O4[m5G0J7 TMob2]f1G191N1d p0:e04]* T6o30[{05E T0o8g2F2C3]Xt2N971G[=4pD{CH9 TF=N6E1g"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="1019"/> + <CursorPos Y="1095"/> + <FoldState Value=" TL00304111D p0!E01 T470A T5I0}\2 T7KI}= T8L2}Y]F3nD0K6 piZjJ057]9ejA0f5 pjLkP083 plBiB29[I43m60KD]aXjQ04917]KAkZ0Y5]KfjD038 TMnR2103111G191N p0sT]H21a]BtL04131 T6o301M T0o8g2F]+an5nHE]9Yl5F7[{K5lED[R7Xh29 THsZR42 TF=N6E1K"/> + </ExtraEditor1> + <UsageCount Value="219"/> + <Bookmarks Count="1"> + <Item0 X="3" Y="1095" ID="6"/> + </Bookmarks> + </Unit1> + <Unit2> + <Filename Value="Compiler_PIC16.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="112"/> + <CursorPos X="54" Y="134"/> + <FoldState Value=" TL00101111]33 T4504 T5A0J1 T7CKG T8D2[Q4MiX610N131J232 T3i004112 pjcnW]B piXid034 plClK07],0i8S2946]SckKg6B]kCkKDDG]IYk6q27]I0iGSiF T6iK217 TDn42= TEoQ24 THp4KZE"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="304"/> + <CursorPos Y="314"/> + <FoldState Value=" T0k2ZF031Q"/> + </ExtraEditor1> + <UsageCount Value="200"/> + </Unit2> + <Unit3> + <Filename Value="FormPICExplorer.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmPICExplorer"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <CursorPos X="17" Y="9"/> + <UsageCount Value="203"/> + </Unit3> + <Unit4> + <Filename Value="GenCod_PIC16.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="2"/> + <TopLine Value="3572"/> + <CursorPos X="63" Y="3612"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="3897"/> + <CursorPos X="3" Y="3905"/> + <FoldState Value=" TL00A1 T4i103 T8i847014F"/> + </ExtraEditor1> + <UsageCount Value="202"/> + <Loaded Value="True"/> + </Unit4> + <Unit5> + <Filename Value="GenCodBas_PIC16.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="6"/> + <TopLine Value="752"/> + <CursorPos X="19" Y="771"/> + <ExtraEditorCount Value="2"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="2632"/> + <CursorPos X="31" Y="2661"/> + <FoldState Value=" T5806 TCHC8U"/> + </ExtraEditor1> + <ExtraEditor2> + <EditorIndex Value="-1"/> + <TopLine Value="1267"/> + <CursorPos X="3" Y="1274"/> + <FoldState Value=" T8lZ2j="/> + </ExtraEditor2> + <UsageCount Value="200"/> + <Bookmarks Count="1"> + <Item0 Y="66" ID="2"/> + </Bookmarks> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="CompBase.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="1418"/> + <CursorPos Y="1442"/> + <FoldState Value=" T4C03 T5G01 T0.BVT0E22]C6,Y091'"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="184"/> + <CursorPos Y="202"/> + <FoldState Value=" T6-E041 T0-Ql4021H"/> + </ExtraEditor1> + <UsageCount Value="200"/> + </Unit6> + <Unit7> + <Filename Value="FrameSyntaxTree.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraSyntaxTree"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="57" Y="7"/> + <FoldState Value=" T3k00aS"/> + <UsageCount Value="202"/> + </Unit7> + <Unit8> + <Filename Value="Globales.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="102"/> + <CursorPos X="4" Y="184"/> + <UsageCount Value="202"/> + </Unit8> + <Unit9> + <Filename Value="XpresElementsPIC.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="1152"/> + <CursorPos Y="1170"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="1983"/> + <CursorPos Y="2002"/> + <FoldState Value=" T3imG0tY"/> + </ExtraEditor1> + <UsageCount Value="211"/> + <Bookmarks Count="1"> + <Item0 Y="387" ID="1"/> + </Bookmarks> + </Unit9> + <Unit10> + <Filename Value="FormConfig.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Config"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <TopLine Value="421"/> + <CursorPos X="16" Y="440"/> + <FoldState Value=" T4704 T5lF02 TMoB4112111 T8k82312]M3lf0t5 piYk9040171]L6lg033 T0n4F49q"/> + <UsageCount Value="200"/> + </Unit10> + <Unit11> + <Filename Value="PicPasProject.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="26"/> + <CursorPos Y="52"/> + <UsageCount Value="204"/> + </Unit11> + <Unit12> + <Filename Value="FrameEditView.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraEditView"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="1323"/> + <CursorPos X="31" Y="1349"/> + <FoldState Value=" T4405 T5lD051 TLJ21]9312]D7DC32 T8E416311]IMnI01231A]C3lR056 pibj8084 pjPiJ2J4]IckJ0B1]I2I2O5]HYkb0B[Q5jC0671212[44 THldO6](6m701a T0mLcEL]fZl3B4E]9XlZW1H]9bnBMCC11221J TDx444 TEx64]/F-H23q"/> + <UsageCount Value="200"/> + </Unit12> + <Unit13> + <Filename Value="FrameMessagesWin.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraMessagesWin"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="470"/> + <CursorPos X="31" Y="485"/> + <UsageCount Value="200"/> + </Unit13> + <Unit14> + <Filename Value="FormElemProperty.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmElemProperty"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <TopLine Value="79"/> + <CursorPos X="30" Y="93"/> + <UsageCount Value="201"/> + <Bookmarks Count="1"> + <Item0 X="37" Y="153" ID="3"/> + </Bookmarks> + </Unit14> + <Unit15> + <Filename Value="FrameArcExplor.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmArcExplor"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="188"/> + <CursorPos X="20" Y="500"/> + <FoldState Value=" TL00b02121 T4f03 T5i208 T8iV2r TMnc[R43l20C417 T0l5S47 pj4kP8C3 piZHn2E3A T6lZ01815 TDmK2K21]vEmc224 TFoR6q THr7N91H"/> + <UsageCount Value="200"/> + </Unit15> + <Unit16> + <Filename Value="FrameCfgSyntax.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraCfgSyntax"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="551"/> + <CursorPos X="5" Y="577"/> + <FoldState Value=" TL00601224 T7iWDF T8iX25311 T3k92P023351A21[I46lX[944]43 T0lcV20E1]E2[U4Mp421P"/> + <UsageCount Value="210"/> + </Unit16> + <Unit17> + <Filename Value="FrameCfgSynEdit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraCfgSynEdit"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="28" Y="22"/> + <FoldState Value=" TL005 T8iS23 TMia01011 T3jc08]P0lNC2j"/> + <UsageCount Value="200"/> + </Unit17> + <Unit18> + <Filename Value="CodeTools.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <CursorPos X="44" Y="8"/> + <UsageCount Value="201"/> + </Unit18> + <Unit19> + <Filename Value="ParserAsm_PIC16.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="380"/> + <CursorPos X="11" Y="404"/> + <UsageCount Value="200"/> + </Unit19> + <Unit20> + <Filename Value="ParserDirec_PIC16.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="7"/> + <CursorPos Y="42"/> + <UsageCount Value="200"/> + </Unit20> + <Unit21> + <Filename Value="FrameCfgExtTool.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraCfgExtTool"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="333"/> + <CursorPos X="9" Y="365"/> + <FoldState Value=" T6j3015 T3k10O016 pifje0F61121 TMjJ21]80kBX3042 TDkJ24 TEkL22-"/> + <UsageCount Value="200"/> + </Unit21> + <Unit22> + <Filename Value="FormDebugger.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmDebugger"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <UsageCount Value="202"/> + </Unit22> + <Unit23> + <Filename Value="FrameRamExplorer.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraRamExplorer"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="369"/> + <CursorPos Y="390"/> + <UsageCount Value="200"/> + </Unit23> + <Unit24> + <Filename Value="FormRAMExplorer.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="frmRAMExplorer"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <EditorIndex Value="-1"/> + <CursorPos X="49" Y="6"/> + <UsageCount Value="200"/> + </Unit24> + <Unit25> + <Filename Value="FrameRomExplorer.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraRomExplorer"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="48" Y="6"/> + <FoldState Value=" TL82102211 TCAE4 T8a23 T3i20e012 T6i603015 T0iDRO437215]eMiO81;"/> + <UsageCount Value="200"/> + </Unit25> + <Unit26> + <Filename Value="FramePicRegisters.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraPicRegisters"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="46" Y="6"/> + <UsageCount Value="201"/> + </Unit26> + <Unit27> + <Filename Value="FrameRegWatcher.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraRegWatcher"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="56" Y="7"/> + <FoldState Value=" T3mD0G4212111G"/> + <UsageCount Value="211"/> + </Unit27> + <Unit28> + <Filename Value="FramePICDiagram.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraPICDiagram"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <TopLine Value="588"/> + <CursorPos X="46" Y="606"/> + <UsageCount Value="200"/> + </Unit28> + <Unit29> + <Filename Value="GenCodBas_PIC10.pas"/> + <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="7"/> + <TopLine Value="111"/> + <CursorPos X="18" Y="124"/> + <FoldState Value=" T0i!7BIg"/> + <UsageCount Value="202"/> + <Loaded Value="True"/> + </Unit29> + <Unit30> + <Filename Value="GenCod_PIC10.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="1"/> + <TopLine Value="2797"/> + <CursorPos X="35" Y="2805"/> + <UsageCount Value="205"/> + <Loaded Value="True"/> + </Unit30> + <Unit31> + <Filename Value="ParserAsm_PIC10.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="381"/> + <CursorPos X="11" Y="410"/> + <UsageCount Value="201"/> + </Unit31> + <Unit32> + <Filename Value="ParserDirec_PIC10.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <CursorPos X="22" Y="8"/> + <UsageCount Value="200"/> + </Unit32> + <Unit33> + <Filename Value="Compiler_PIC10.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="111"/> + <CursorPos Y="133"/> + <FoldState Value=" T4504 T5A0J1 T7CKG T8D213 TMiX610P]N3i004112 T0i8S2914872]f6iK21016 TDn32@ TEoO24Q"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="298"/> + <CursorPos X="45" Y="321"/> + </ExtraEditor1> + <UsageCount Value="200"/> + </Unit33> + <Unit34> + <Filename Value="ParserDirec.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="1152"/> + <CursorPos X="11" Y="1160"/> + <UsageCount Value="206"/> + </Unit34> + <Unit35> + <Filename Value="FramePicAsm.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="fraPicAsm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <EditorIndex Value="-1"/> + <CursorPos X="46" Y="6"/> + <UsageCount Value="207"/> + </Unit35> + <Unit36> + <Filename Value="GenCodBas_PIC17.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="5"/> + <TopLine Value="1515"/> + <CursorPos Y="1534"/> + <UsageCount Value="203"/> + <Loaded Value="True"/> + </Unit36> + <Unit37> + <Filename Value="GenCod_PIC17.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="3"/> + <TopLine Value="183"/> + <CursorPos X="20" Y="244"/> + <UsageCount Value="202"/> + <Loaded Value="True"/> + </Unit37> + <Unit38> + <Filename Value="ParserAsm_PIC17.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="388"/> + <CursorPos X="48" Y="396"/> + <UsageCount Value="200"/> + </Unit38> + <Unit39> + <Filename Value="ParserDirec_PIC17.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="7"/> + <CursorPos X="5" Y="10"/> + <UsageCount Value="200"/> + </Unit39> + <Unit40> + <Filename Value="Compiler_PIC17.pas"/> + <IsPartOfProject Value="True"/> + <TopLine Value="291"/> + <CursorPos Y="416"/> + <UsageCount Value="200"/> + <Loaded Value="True"/> + </Unit40> + <Unit41> + <Filename Value="CompOperands.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="4"/> + <TopLine Value="102"/> + <CursorPos X="12" Y="116"/> + <UsageCount Value="209"/> + <Loaded Value="True"/> + </Unit41> + <Unit42> + <Filename Value="CompMain.pas"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="9"/> + <TopLine Value="1173"/> + <CursorPos Y="1283"/> + <UsageCount Value="200"/> + <Loaded Value="True"/> + </Unit42> + <Unit43> + <Filename Value="GenCod.inc"/> + <EditorIndex Value="8"/> + <TopLine Value="93"/> + <CursorPos X="21" Y="136"/> + <UsageCount Value="32"/> + <Loaded Value="True"/> + </Unit43> + <Unit44> + <Filename Value="..\..\_Librerias\PicUtils-1.6\Pic17Utils.pas"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="1"/> + <TopLine Value="806"/> + <CursorPos X="46" Y="819"/> + <UsageCount Value="16"/> + </Unit44> + <Unit45> + <Filename Value="..\..\_Librerias\PicUtils-1.6\PicCore.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="80"/> + <CursorPos X="5" Y="100"/> + <ExtraEditorCount Value="1"/> + <ExtraEditor1> + <EditorIndex Value="-1"/> + <TopLine Value="513"/> + <CursorPos X="17" Y="515"/> + </ExtraEditor1> + <UsageCount Value="12"/> + </Unit45> + <Unit46> + <Filename Value="..\..\_Librerias\PicUtils-1.6\Pic16Utils.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="748"/> + <CursorPos X="14" Y="763"/> + <UsageCount Value="19"/> + </Unit46> + <Unit47> + <Filename Value="..\..\_Librerias\PicUtils-1.6\Pic10Utils.pas"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="1"/> + <TopLine Value="107"/> + <CursorPos X="5" Y="125"/> + <UsageCount Value="16"/> + </Unit47> + <Unit48> + <Filename Value="XpresTypesPIC.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="215"/> + <CursorPos Y="251"/> + <UsageCount Value="99"/> + </Unit48> + <Unit49> + <Filename Value="C:\lazarus\components\synedit\synedit.pp"/> + <UnitName Value="SynEdit"/> + <EditorIndex Value="-1"/> + <TopLine Value="4524"/> + <CursorPos Y="4543"/> + <UsageCount Value="5"/> + </Unit49> + <Unit50> + <Filename Value="..\..\_libraries\PicUtils-1.6\Pic17Utils.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="510"/> + <CursorPos Y="936"/> + <UsageCount Value="33"/> + </Unit50> + </Units> + <JumpHistory Count="30" HistoryIndex="29"> + <Position1> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="256" TopLine="222"/> + </Position1> + <Position2> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="255" TopLine="222"/> + </Position2> + <Position3> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="256" Column="21" TopLine="222"/> + </Position3> + <Position4> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="255" TopLine="222"/> + </Position4> + <Position5> + <Filename Value="GenCodBas_PIC17.pas"/> + <Caret Line="1532" TopLine="1515"/> + </Position5> + <Position6> + <Filename Value="GenCodBas_PIC17.pas"/> + <Caret Line="1232" TopLine="1214"/> + </Position6> + <Position7> + <Filename Value="GenCodBas_PIC17.pas"/> + <Caret Line="1533" TopLine="1515"/> + </Position7> + <Position8> + <Filename Value="GenCodBas_PIC17.pas"/> + <Caret Line="1534" TopLine="1515"/> + </Position8> + <Position9> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="255" Column="16" TopLine="185"/> + </Position9> + <Position10> + <Filename Value="CompOperands.pas"/> + <Caret Line="116" Column="12" TopLine="100"/> + </Position10> + <Position11> + <Filename Value="CompOperands.pas"/> + <Caret Line="523" Column="18" TopLine="505"/> + </Position11> + <Position12> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="257" Column="9" TopLine="185"/> + </Position12> + <Position13> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="255" Column="18" TopLine="185"/> + </Position13> + <Position14> + <Filename Value="GenCod_PIC17.pas"/> + <Caret Line="256" Column="10" TopLine="185"/> + </Position14> + <Position15> + <Filename Value="GenCodBas_PIC10.pas"/> + <Caret Line="501" Column="19" TopLine="478"/> + </Position15> + <Position16> + <Filename Value="GenCodBas_PIC10.pas"/> + </Position16> + <Position17> + <Filename Value="GenCodBas_PIC10.pas"/> + <Caret Line="131" Column="49" TopLine="117"/> + </Position17> + <Position18> + <Filename Value="GenCodBas_PIC10.pas"/> + <Caret Line="1031" Column="23" TopLine="1014"/> + </Position18> + <Position19> + <Filename Value="GenCodBas_PIC10.pas"/> + <Caret Line="1079" Column="23" TopLine="1061"/> + </Position19> + <Position20> + <Filename Value="GenCod.inc"/> + <Caret Line="102" Column="51" TopLine="64"/> + </Position20> + <Position21> + <Filename Value="GenCodBas_PIC10.pas"/> + <Caret Line="956" Column="22" TopLine="938"/> + </Position21> + <Position22> + <Filename Value="GenCod.inc"/> + <Caret Line="125" Column="51" TopLine="125"/> + </Position22> + <Position23> + <Filename Value="GenCod.inc"/> + <Caret Line="138" Column="53" TopLine="109"/> + </Position23> + <Position24> + <Filename Value="GenCod.inc"/> + <Caret Line="147" Column="53" TopLine="126"/> + </Position24> + <Position25> + <Filename Value="GenCod.inc"/> + <Caret Line="259" Column="51" TopLine="226"/> + </Position25> + <Position26> + <Filename Value="GenCod.inc"/> + <Caret Line="282" Column="51" TopLine="262"/> + </Position26> + <Position27> + <Filename Value="GenCod.inc"/> + <Caret Line="290" Column="53" TopLine="262"/> + </Position27> + <Position28> + <Filename Value="GenCod.inc"/> + <Caret Line="299" Column="53" TopLine="282"/> + </Position28> + <Position29> + <Filename Value="GenCod.inc"/> + <Caret Line="406" Column="55" TopLine="378"/> + </Position29> + <Position30> + <Filename Value="GenCod.inc"/> + <Caret Line="409" Column="51" TopLine="378"/> + </Position30> + </JumpHistory> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0" ActiveMode="default"/> + </RunParams> + </ProjectSession> + <Debugging> + <BreakPoints Count="2"> + <Item1> + <Kind Value="bpkSource"/> + <WatchScope Value="wpsLocal"/> + <WatchKind Value="wpkWrite"/> + <Source Value="FormElemProperty.pas"/> + <Line Value="71"/> + </Item1> + <Item2> + <Kind Value="bpkSource"/> + <WatchScope Value="wpsLocal"/> + <WatchKind Value="wpkWrite"/> + <Source Value="CompMain.pas"/> + <Line Value="1093"/> + </Item2> + </BreakPoints> + </Debugging> +</CONFIG> diff --git a/Source/project1.res b/Source/PicPas.res similarity index 61% rename from Source/project1.res rename to Source/PicPas.res index 552785fa..4462e503 100644 Binary files a/Source/project1.res and b/Source/PicPas.res differ diff --git a/Source/XpresElementsPIC.pas b/Source/XpresElementsPIC.pas index 329b9806..46e1cf0e 100644 --- a/Source/XpresElementsPIC.pas +++ b/Source/XpresElementsPIC.pas @@ -1,12 +1,13 @@ { XpresElementsPIC ================ -Definiciones para el manejo de los elementos del compilador: procedimientos, constantes, -variables, tipos, .... -Todos estos elementos se deberían almacenar en una estrucutura de arbol. -Esta unidad esta basada en la unidad XpresElements de Xpres, pero adaptada a la -arquitectura de los PIC y al lenguaje de PicPas. -Por Tito Hinostroza. +Definitions for syntactic elements of the compiler: functions, constants, variables, +types, ... +All these elements are stored in a Tree structure, that represents the syntax Tree. +This unit is based in the unit XpresElements from the framework Xpres, and is adapted +to the PIC architecture and to the Pascal dialect used here. + + By Tito Hinostroza. } unit XpresElementsPIC; {$mode objfpc}{$H+} @@ -15,6 +16,7 @@ interface Classes, SysUtils, fgl, XpresTypesPIC, XpresBas, LCLProc; const ADRR_ERROR = $FFFF; + type //TxpElement y clases previas TVarOffs = word; TVarBank = byte; @@ -22,10 +24,8 @@ interface TxpOperator = class; TxpOperation = class; - {Evento que llama a una ROB. A las ROP binarias, se les envía la referencia a la - operación, para que puedan acceder a información adicional de la ROP. También se usa - el parámetro "Opt", para que se pueda identificar mejor a las ROB, y no confundirlas - con las ROU} + {Event to call a ROB. The "Opt" parameter, is used to give aditional information of + the ROP. } TProcBinaryROB = procedure(Opt: TxpOperation; SetRes: boolean) of object; {Evento que llama a una Rutina de Operación (ROP). @@ -77,23 +77,34 @@ TxpOperator = class eltCodeCont, //Contenedor de código eltMain, //Programa principal eltVar, //Variable + eltFuncDec, //Declaración de función eltFunc, //Función + eltInLin, //Función INLINE eltCons, //Constante eltType, //Tipo eltUnit, //Unidad - eltBody //Cuerpo del programa + eltBody, //Cuerpo del programa/procedimiento + eltFinal //Sección FINALIZATION de unidad ); - + //Ubicación primaria de un elemento + TxpEleLocation = ( + locMain, //En el programa principal. + locInterface, //En INTERFACE de una unidad. + locImplement //En IMPLEMENTATION de una unidad. + ); TxpElement = class; TxpElements = specialize TFPGObjectList<TxpElement>; TxpEleBody = class; - //Datos sobre la llamada a un elemento desde otro elemento + + { TxpEleCaller } + //Information about the call to one element from other element. TxpEleCaller = class curPos: TSrcPos; //Posición desde donde es llamado curBnk: byte; //banco RAM, desde donde se llama caller: TxpElement; //función que llama a esta función + function CallerUnit: TxpElement; //Unidad/Programa de donde se llama end; TxpListCallers = specialize TFPGObjectList<TxpEleCaller>; @@ -134,14 +145,26 @@ TxpExitCall = class TxpEleVar = class; - {Descripción de la parte adicional en la declaración de una variable (como si - es ABSOLUTE)} + { TxpAdicDeclar } + {Define aditional declaration settings for variable. Depends on target CPU architecture.} + TxpAdicDeclar = ( + decNone, //Normal declaration. Will be mapped in free RAM. + decAbsol, //Mapped in ABSOLUTE address + decRegis{, //Mapped at RT + decRegisA, //Mapped at A register + decRegisX, //Mapped at X register + decRegisY //Mapped at Y register} + ); + + {Description for aditional information in variables declaration: ABSOLUTE , + REGISTER, or initialization. } TAdicVarDec = record - //Por el momento, el único parámetro adicional es ABSOLUTE - isAbsol : boolean; //Indica si es ABSOLUTE + hasAdic : TxpAdicDeclar; //ABSOLUTE, REGISTERA, ... absVar : TxpEleVar; //Referencia a variable, cuando es ABSOLUTE <variable> absAddr : integer; //dirección ABSOLUTE absBit : byte; //bit ABSOLUTE + hasInit : boolean; //Indica si tiene valor inicial + iniVal : TConsValue; //Initial constant value //Posición donde empieza la declaración de parámetros adicionales de la variable srcDec : TPosCont; end; @@ -150,19 +173,23 @@ TAdicVarDec = record //Clase base para todos los elementos TxpElement = class private - function AddElement(elem: TxpElement): TxpElement; + Fname : string; //Nombre del elemnto + Funame : string; //Nombre en mayúscula para acelerar las bísquedas. + procedure Setname(AValue: string); + function AddElement(elem: TxpElement; AtBegin: boolean): TxpElement; public //Gestion de llamadas al elemento //Lista de funciones que llaman a esta función. lstCallers: TxpListCallers; function nCalled: integer; virtual; //número de llamadas function IsCalledBy(callElem: TxpElement): boolean; //Identifica a un llamador + function IsCalledByChildOf(callElem: TxpElement): boolean; //Identifica a un llamador function IsCalledAt(callPos: TSrcPos): boolean; function IsDeclaredAt(decPos: TSrcPos): boolean; function FindCalling(callElem: TxpElement): TxpEleCaller; //Identifica a un llamada function RemoveCallsFrom(callElem: TxpElement): integer; //Elimina llamadas procedure RemoveLastCaller; //Elimina la última llamada procedure ClearCallers; //limpia lista de llamantes - function DuplicateIn(list: TxpElements): boolean; virtual; + function ExistsIn(list: TxpElements): boolean; public //Gestión de los elementos llamados curNesting: Integer; //Nivel de anidamiento de llamadas maxNesting: Integer; //Máximo nivel de anidamiento @@ -170,18 +197,16 @@ TxpElement = class lstCalled : TxpListCalled; //Lista de funciones que son llamadas dirceta o indirectamente (Se llena en el enlazado) lstCalledAll: TxpListCalled; - {Se está asumiendo que solo los TxpEleCodeCont, puden llamar a otros elementos, - peor podría considerarse también que elementos, como las variables, pueden llamar - también a otros elementos (como las referencias absolute).} + //Métodos para el llemado procedure AddCalled(elem: TxpElement); - procedure AddCalledAll(elem: TxpElement); - procedure AddCalledAll_FromList(lstCalled0: TxpListCalled); - procedure UpdateCalledAll; + function UpdateCalledAll: integer; public - name : string; //Nombre de la variable, constante, unidad, tipo, ... - Parent: TxpElement; //Referencia al padre - idClass: TxpIDClass; //No debería ser necesario + Parent: TxpElement; //Referencia al elemento padre + idClass: TxpIDClass; //Para no usar RTTI elements: TxpElements; //Referencia a nombres anidados, cuando sea función + location: TxpEleLocation; //Ubicación del elemento + property name: string read Fname write Setname; + property uname: string read Funame; function Path: string; function FindIdxElemName(const eName: string; var idx0: integer): boolean; function LastNode: TxpElement; @@ -202,11 +227,11 @@ TxpElement = class destructor Destroy; override; end; -type //Clases de elementos +type //Elements class { TxpEleCodeCont } - {Clase que define a un elemento que puede servir como contenedor general de código, - como el programa principal, un procedimeinto o una unidad} + {Define a element that can be used as a general code conatiner, like the main program, + a procedure or a unit.} TxpEleCodeCont = class(TxpElement) public {Banco de RAM, que tiene la función al ejecutar la útlima instrucción. No es @@ -234,11 +259,26 @@ TxpEleCodeCont = class(TxpElement) destructor Destroy; override; end; + //Model an attribute of a RECORD or OBJECT + TTypAttrib = class + name: string; //Name od the field + offs: integer; //Offset for Physycal address + typ : TxpEleType; //Only reference to the type + end; + TTypATtributes = specialize TFPGObjectList<TTypAttrib>; + + TxpEleTypes= specialize TFPGObjectList<TxpEleType>; //lista de variables + { TxpEleType } {Clase para modelar a los tipos definidos por el usuario y a los tipos del sistema. Es una clase relativamente extensa, debido a la flxibilidad que ofrecen lso tipos en Pascal.} TxpEleType= class(TxpElement) + private + fSize: SmallInt; + internalTypes: TxpEleTypes; //Container for types recursively defined. + function getSize: smallint; + procedure setSize(AValue: smallint); public //Eventos {Estos eventos son llamados automáticamente por el Analizador de expresiones. Por seguridad, debe implementarse siempre para cada tipo creado. La implementación @@ -246,32 +286,35 @@ TxpEleType= class(TxpElement) OperationLoad: TProcExecOperat; {Evento. Es llamado cuando se pide evaluar una expresión de un solo operando de este tipo. Es un caso especial que debe ser tratado por la implementación} - OnGetItem : TTypFieldProc; {Es llamado cuando se pide acceder a un ítem de un - arreglo (lectura o escritura). Debe devolver una - expresión con el resultado dal ítem leído.} - OnClearItems : TTypFieldProc; {Usado para la rutina que limpia los ítems de - un arreglo.} {Estos eventos NO se generan automáticamente en TCompilerBase, sino que es la implementación del tipo, la que deberá llamarlos. Son como una ayuda para facilitar la implementación. OnPush y OnPop, son útiles para cuando la implementación va a manejar pila.} - OnSaveToStk : procedure of object; //Salva datos en reg. de Pila - OnLoadToRT : TProcLoadOperand; {Se usa cuando se solicita cargar un operando + OnSaveToStk : procedure of object; //Salva datos en reg. de Pila + OnLoadToRT : TProcLoadOperand; {Se usa cuando se solicita cargar un operando (de este tipo) en la pila. } OnDefRegister: procedure of object; {Se usa cuando se solicita descargar un operando (de este tipo) de la pila. } - OnGlobalDef : TProcDefineVar; {Es llamado cada vez que se encuentra la + OnGlobalDef : TProcDefineVar; {Es llamado cada vez que se encuentra la declaración de una variable (de este tipo) en el ámbito global.} public copyOf : TxpEleType; //Indica que es una copia de otro tipo grp : TTypeGroup; //Grupo del tipo (numérico, cadena, etc) - size : smallint; //Tamaño en bytes del tipo catType : TxpCatType; - arrSize : integer; //Tamaño, cuando es tctArray - refType : TxpEleType; //Referencia a otro tipo. Valido cuando es puntero o arreglo. - {Bandera para indicar si la variable, ha sido declarada en la sección INTERFACE. Este - campo es úitl para cuando se procesan unidades.} - InInterface: boolean; + property size: smallint read getSize write setSize; //Tamaño en bytes del tipo + public //Arrays and pointers + nItems : integer; //Number of items, when is tctArray (-1 if it's dynamic.) + itmType : TxpEleType; {Reference to the item type when it's array. + TArr = array[255] of byte; //itemType = byte + } + ptrType : TxpEleType; {Reference to the type pointed, when it's pointer. + TPtr = ^integer; //ptrType = integer + } + public //Attributes (When it's used as object: OBJECT ... END; ). + attribs: TTypATtributes; + public //Manejo de campos + fields: TTypFields; + procedure CreateField(metName: string; procGet, procSet: TTypFieldProc); public //Campos de operadores Operators: TxpOperators; //Operadores soportados operAsign: TxpOperator; //Se guarda una referencia al operador de aignación @@ -285,20 +328,19 @@ TxpEleType= class(TxpElement) function FindUnaryPreOperator(const OprTxt: string): TxpOperator; function FindUnaryPostOperator(const OprTxt: string): TxpOperator; procedure SaveToStk; - public //Manejo de campos - fields: TTypFields; - procedure CreateField(metName: string; proc: TTypFieldProc); public //Identificación function IsBitSize: boolean; function IsByteSize: boolean; function IsWordSize: boolean; function IsDWordSize: boolean; procedure DefineRegister; + function IsArrayOf(itTyp: TxpEleType; numIt: integer): boolean; + function IsPointerTo(ptTyp: TxpEleType): boolean; + function IsEquivalent(typ: TxpEleType): boolean; public constructor Create; override; destructor Destroy; override; end; - TxpEleTypes= specialize TFPGObjectList<TxpEleType>; //lista de variables { TxpEleCon } //Clase para modelar a las constantes @@ -315,26 +357,15 @@ TxpEleCon = class(TxpElement) TxpEleVar = class(TxpElement) private ftyp: TxpEleType; - function GetHavAdicPar: boolean; - procedure SetHavAdicPar(AValue: boolean); function Gettyp: TxpEleType; procedure Settyp(AValue: TxpEleType); public //Manejo de parámetros adicionales adicPar: TAdicVarDec; //Parámetros adicionales en la declaración de la variable. //Referencia al elemento de tipo property typ: TxpEleType read Gettyp write Settyp; - //Indica si la variable tiene parámetros adicionales en la declaración - property havAdicPar: boolean read GetHavAdicPar write SetHavAdicPar; public - {Bandera para indicar si la variable, ha sido declarada en la sección INTERFACE. Este - campo es úitl para cuando se procesan unidades.} - InInterface: boolean; //Bandera para indicar si la variable, se está usando como parámetro IsParameter: boolean; - {Bandera para indicar que el valor de la variable se alamcena en lso registros de - trabajo, es decir que se manejan, más como expresión que como variables. Se diseñó, - como una forma rápida para pasar parámetros a funciones.} - IsRegister : boolean; {Indica si la variables es temporal, es decir que se ha creado solo para acceder a una parte de otra variable, que si tiene almacenamiento físico.} IsTmp : boolean; @@ -380,10 +411,22 @@ TxpEleVar = class(TxpElement) //Parámetro de una función TxpParFunc = record - name: string; //nombre de parámetro - typ : TxpEleType; //Referencia al tipo - pvar: TxpEleVar; //referencia a la variable que se usa para el parámetro + name : string; //nombre de parámetro + typ : TxpEleType; //Referencia al tipo + pvar : TxpEleVar; //referencia a la variable que se usa para el parámetro + srcPos : TSrcPos; //Posición del parámetro. + adicVar: TAdicVarDec; //Parámetros adicionales end; + TxpParFuncArray = array of TxpParFunc; + + //Parámetro de una función INLINE + TxpParInlin = record + name: string; //nombre de parámetro + typ : TxpEleType; //Referencia al tipo + sto : TStoOperand; //Tipo de almacenamiento + srcPos: TSrcPos; //Posición del parámetro. + end; + TxpParInlinArray = array of TxpParInlin; //Clase para modelar al bloque principal { TxpEleMain } @@ -395,71 +438,138 @@ TxpEleMain = class(TxpEleCodeCont) end; TxpEleFun = class; - { TxpEleFun } + TxpEleFunBase = class; //Clase para almacenar información de las funciones - TProcExecFunction = procedure(fun: TxpEleFun) of object; - TxpEleFun = class(TxpEleCodeCont) - public + TxpProcParam = procedure(fun: TxpEleFunBase) of object; + TxpProcCall = procedure(fun: TxpEleFunBase; out AddrUndef: boolean) of object; + + { TxpEleFunBase } + + TxpEleFunBase = class(TxpEleCodeCont) typ : TxpEleType; //Referencia al tipo - pars : array of TxpParFunc; //parámetros de entrada - adrr : integer; //Dirección física, en donde se compila - srcSize: integer; {Tamaño del código compilado. En la primera pasada, es referencial, - porque el tamaño puede variar al reubicarse.} - //Banco de RAM, al iniciar la ejecución de la subrutina. - iniBnk: byte; + IsInterrupt : boolean; + IsForward : boolean; //Identifies a forward declaration. + public //References {Referencia a la función que implemanta, la rutina de porcesamiento que se debe hacer, antes de empezar a leer los parámetros de la función.} - procParam: TProcExecFunction; + procParam: TxpProcParam; {Referencia a la función que implementa, la llamada a la función en ensamblador. En funciones del sistema, puede que se implemente INLINE, sin llamada a subrutinas, pero en las funciones comunes, siempre usa CALL ... } - procCall: TProcExecFunction; - {Método que llama a una rutina que codificará la rutina ASM que implementa la función. - La idea es que este campo solo se use para algunas funciones del sistema.} - compile: TProcExecFunction; - {Bandera para indicar si la función, ha sido implementada. Este campo es util, para - cuando se usa FORWARD o cuando se compilan unidades.} - Implemented: boolean; - {Bandera para indicar si la función, ha sido declarada en la sección INTERFACE. Este - campo es úitl para cuando se procesan unidades.} - InInterface: boolean; - {Indica si la función es una ISR. Se espera que solo exista una.} - IsInterrupt : boolean; - /////////////// + procCall: TxpProcCall; + public //Parameters manage + pars : TxpParFuncArray; //parámetros de entrada procedure ClearParams; - procedure CreateParam(parName: string; typ0: TxpEleType; pvar: TxpEleVar); - function SameParams(Fun2: TxpEleFun): boolean; + function SameParamsType(const funpars: TxpParFuncArray): boolean; function ParamTypesList: string; - function DuplicateIn(list: TxpElements): boolean; override; + end; + + TProcExecFunction = procedure(fun: TxpEleFun) of object; + + { TxpEleFunDec } + {Basic class to represent a function header or declaration (INTERFASE o FORWARD). + Basically whar we store here is the name, the parameters ante return type.} + TxpEleFunDec = class(TxpEleFunBase) + public + implem : TxpEleFun; //Reference to implementation element. + public //Initialization + constructor Create; override; + end; + + { TxpEleFun } + TxpEleFun = class(TxpEleFunBase) + public + adrr : integer; //Dirección física, en donde se compila + srcSize: integer; {Tamaño del código compilado. En la primera pasada, es referencial, + porque el tamaño puede variar al reubicarse.} + //Banco de RAM, al iniciar la ejecución de la subrutina. + iniBnk: byte; + linked : boolean; //Indicates the function was compiled in its real address + {Call to routine that generate code for the function, when the function has not body + like used in system fucntions.} + compile: TProcExecFunction; procedure SetElementsUnused; + public //Declaration + {These properties allows to have reference to the function declaration, when there is + one: Interface versions or Forward version. + In other cases there is just a function element without separated declaration. + According to design: + Declaration elements -> Contain information about: + - The parameters and return value. + - The calls. + Implementation elements -> Contain information about: + - The parameters and return value. + - The calls. + - Local variables. + - The body (Calls to other elements.) + Declaration elements are included too in the Syntax Tree, but they aer used only for + declaration. All the information must be read in the funtion. + } + declar : TxpEleFunDec; //Reference to declaration (When it's FORWARD or in INTERFACE) + function HasDeclar: boolean; inline; public //Manejo de referencias function nCalled: integer; override; //número de llamadas function nLocalVars: integer; function IsTerminal: boolean; function IsTerminal2: boolean; + private //Manage of pending calls + curSize: integer; + public //Manage of pending calls + {Address of pending calls (JSR) made when the function was not still implemented } + nAddresPend : integer; + addrsPend : array of word; + procedure AddAddresPend(ad: word); public //Inicialización constructor Create; override; destructor Destroy; override; end; TxpEleFuns = specialize TFPGObjectList<TxpEleFun>; + { TxpEleInline } + //Clase para modelar a las funciones Inline + TxpEleInlin = class(TxpEleCodeCont) + public + typ : TxpEleType; //Referencia al tipo + pars : TxpParInlinArray; //parámetros de entrada + /////////////// + procedure ClearParams; + procedure CreateParam(parName: string; typ0: TxpEleType; sto0: TStoOperand); + function SameParamsType(const funpars: TxpParInlinArray): boolean; + function Duplicated: boolean; + public //Inicialización + constructor Create; override; + destructor Destroy; override; + end; + TxpEleInlins = specialize TFPGObjectList<TxpEleInlin>; + { TxpEleUnit } //Clase para modelar a las constantes TxpEleUnit = class(TxpEleCodeCont) public srcFile: string; //El archivo en donde está físicamente la unidad. + InterfaceElements: TxpElements; //Lista de eleemntos en la sección INTERFACE + procedure ReadInterfaceElements; constructor Create; override; + destructor Destroy; override; end; TxpEleUnits = specialize TFPGObjectList<TxpEleUnit>; //lista de constantes { TxpEleBody } - //Clase para modelar al cuerpo principal del programa + //Clase para modelar al cuerpo principal del programa principal o de un procedimiento TxpEleBody = class(TxpElement) adrr : integer; //dirección física constructor Create; override; destructor Destroy; override; end; + { TxpEleFinal } + //Clase para modelar al bloque FINALIZATION de una unidad + TxpEleFinal = class(TxpElement) + adrr : integer; //dirección física + constructor Create; override; + destructor Destroy; override; + end; + { TxpEleDIREC } //Representa a una directiva. Diseñado para representar a los nodos {$IFDEF} TxpEleDIREC = class(TxpElement) @@ -481,54 +591,100 @@ TXpTreeElements = class curFindIdx : integer; inUnit : boolean; public - main : TxpEleMain; //nodo raiz - curNode : TxpElement; //referencia al nodo actual - AllVars : TxpEleVars; - AllFuncs : TxpEleFuns; + main : TxpEleMain; //nodo raiz + curNode : TxpElement; //referencia al nodo actual + AllCons : TxpEleCons; + AllVars : TxpEleVars; + AllUnits : TxpEleUnits; + AllFuncs : TxpEleFuns; + AllInLns : TxpEleInlins; + AllTypes : TxpEleTypes; OnAddElement: procedure(xpElem: TxpElement) of object; //Evento OnFindElement: procedure(elem: TxpElement) of object; procedure Clear; - procedure RefreshAllVars; - procedure RefreshAllFuncs; + procedure RefreshAllUnits; function CurNodeName: string; function CurCodeContainer: TxpEleCodeCont; function LastNode: TxpElement; function BodyNode: TxpEleBody; - //funciones para llenado del arbol - function AddElement(elem: TxpElement; verifDuplic: boolean=true): boolean; + public //Funciones para llenado del arbol + procedure AddElement(elem: TxpElement; AtBegin: boolean = false); procedure AddElementAndOpen(elem: TxpElement); + procedure AddElementParent(elem: TxpElement; AtBegin: boolean); procedure OpenElement(elem: TxpElement); - function ValidateCurElement: boolean; procedure CloseElement; - //Métodos para identificación de nombres + public //Métodos para identificación de nombres function FindNext: TxpElement; function FindFirst(const name: string): TxpElement; - function FindNextFunc: TxpEleFun; + function FindNextFuncName: TxpEleFun; + function FindFirstType: TxpEleType; + function FindNextType: TxpEleType; function FindVar(varName: string): TxpEleVar; function FindType(typName: string): TxpEleType; + function ExistsArrayType(itemType: TxpEleType; nEle: integer; + out typFound: TxpEleType): boolean; + function ExistsPointerType(ptrType: TxpEleType; + out typFound: TxpEleType): boolean; function GetElementBodyAt(posXY: TPoint): TxpEleBody; function GetElementAt(posXY: TPoint): TxpElement; function GetElementCalledAt(const srcPos: TSrcPos): TxpElement; function GetELementDeclaredAt(const srcPos: TSrcPos): TxpElement; + function FunctionExistInCur(funName: string; const pars: TxpParFuncArray + ): boolean; public //constructor y destructror constructor Create; virtual; destructor Destroy; override; end; var - /////////// Tipos del sistema //////////////// + // Tipo nulo. Usado para elementos sin tipo. typNull : TxpEleType; - typBit : TxpEleType; - typBool : TxpEleType; - typByte : TxpEleType; - typWord : TxpEleType; - typDWord: TxpEleType; - typChar : TxpEleType; - //Operador nulo. Usado como valor cero. + // Operador nulo. Usado como valor cero. nullOper : TxpOperator; + function GenArrayTypeName(itTypeName: string; nItems: integer): string; inline; + function GenPointerTypeName(refTypeName: string): string; inline; + implementation +{Functions to Generates standard names for dinamyc types creation. Have standard +names is important to let the compiler: + * Reuse types definitions. + * Implement compatibility for types. +} +function GenArrayTypeName(itTypeName: string; nItems: integer): string; inline; +begin + if nItems=-1 then begin //dynamic + exit(PREFIX_ARR + '-' + itTypeName); + end else begin //static + exit(PREFIX_ARR + IntToSTr(nItems) + '-' + itTypeName); + end; +end; +function GenPointerTypeName(refTypeName: string): string; inline; +begin + exit(PREFIX_PTR + '-' +refTypeName); +end; + +{ TxpEleCaller } +function TxpEleCaller.CallerUnit: TxpElement; +{Devuelve el elemento unidad o programa principal, desde donde se hace esta llamada.} +var + container: TxpElement; +begin + {Se asume que la llamda se puede hacer solo desde dos puntos: + - Desde una declaración. + - Desde el cuerpo de una función. + } + if caller = nil then exit(nil); + //La idea es retorceder hasta encontrar una unidad o el programa principal + container := caller; + while not (container.idClass in [eltUnit, eltMain]) do begin + container := container.Parent; //Go back in the Tree + end; + Result := container; + //No debería haber otro caso +end; + { TxpExitCall } function TxpExitCall.IsObligat: boolean; {Indica si el exit se encuentra dentro de código obligatorio} @@ -556,28 +712,43 @@ function TxpSynBlock.idStr: string; function TxpOperation.OperationString: string; {Devuelve una cadena que representa a la operación, sobre los tipos. Algo como: byte + byte} +var + type1: TxpEleType; begin - Result := parent.parent.name + ' ' + parent.txt + ' ' + ToType.name; + type1 := parent.parent; + Result := type1.name + ' ' + parent.txt + ' ' + ToType.name; end; + + { TxpElement } -function TxpElement.AddElement(elem: TxpElement): TxpElement; +function TxpElement.AddElement(elem: TxpElement; AtBegin: boolean): TxpElement; {Agrega un elemento hijo al elemento actual. Devuelve referencia. } begin - elem.Parent := self; //actualzia referencia - elements.Add(elem); //agrega a la lista de nombres - Result := elem; //no tiene mucho sentido + elem.Parent := self; //Update reference + if AtBegin then begin + elements.Insert(0, elem); //Add to list of elements + end else begin + elements.Add(elem); //Add to list of elements + end; + Result := elem; //No so useful +end; +procedure TxpElement.Setname(AValue: string); +begin + if Fname=AValue then Exit; + Fname:=AValue; + Funame:=Upcase(AValue); end; function TxpElement.FindIdxElemName(const eName: string; var idx0: integer): boolean; {Busca un nombre en su lista de elementos. Inicia buscando desde idx0, hasta el inicio. Si encuentra, devuelve TRUE y deja en idx0, la posición en donde se encuentra.} var i: Integer; - uName: String; + uEleName: String; begin - uName := upcase(eName); + uEleName := upcase(eName); //empieza la búsqueda en "idx0" for i := idx0 downto 0 do begin - if upCase(elements[i].name) = uName then begin + if upCase(elements[i].name) = uEleName then begin //sale dejando idx0 en la posición encontrada idx0 := i; exit(true); @@ -613,6 +784,17 @@ function TxpElement.IsCalledBy(callElem: TxpElement): boolean; end; exit(false); end; +function TxpElement.IsCalledByChildOf(callElem: TxpElement): boolean; +{Indica si el elemento es llamado por algún elemento hijo de "callElem". +Puede haber varias llamadas desde "callElem", pero basta que haya una para devolver TRUE.} +var + cal : TxpEleCaller; +begin + for cal in lstCallers do begin + if cal.caller.Parent = callElem then exit(true); + end; + exit(false); +end; function TxpElement.IsCalledAt(callPos: TSrcPos): boolean; {Indica si el elemento es llamado, desde la posición indicada.} var @@ -652,6 +834,7 @@ function TxpElement.RemoveCallsFrom(callElem: TxpElement): integer; if cal.caller = callElem then begin lstCallers.Delete(i); inc(n); + //debugln('Eliminando llamada a %s desde: %s', [self.name, callElem.name]); end; end; Result := n; @@ -665,15 +848,13 @@ procedure TxpElement.ClearCallers; begin lstCallers.Clear; end; -function TxpElement.DuplicateIn(list: TxpElements): boolean; +function TxpElement.ExistsIn(list: TxpElements): boolean; {Debe indicar si el elemento está duplicado en la lista de elementos proporcionada.} var - uName: String; ele: TxpElement; begin - uName := upcase(name); for ele in list do begin - if upcase(ele.name) = uName then begin + if ele.uname = uname then begin exit(true); end; end; @@ -686,40 +867,92 @@ procedure TxpElement.AddCalled(elem: TxpElement); lstCalled.Add(elem); end; end; -procedure TxpElement.AddCalledAll(elem: TxpElement); -{Agrega referencia a procedimiento llamado.} -begin - //Solo agrega una vez el elemento - if lstCalledAll.IndexOf(elem) = -1 then begin - lstCalledAll.Add(elem); +function TxpElement.UpdateCalledAll: integer; +{Update list "lstCalledAll", using AddCalledAll_FromList(). + The return value is: + * curNesting -> if not error happens. + * <0 -> If found recursion. +} + function AddCalledAll(elem: TxpElement): boolean; + {Add reference to lstCalledAll. That is, indicates some element is called from this + element. + If reference already exists, retunr FALSE.} + begin + //Solo agrega una vez el elemento + if lstCalledAll.IndexOf(elem) = -1 then begin + lstCalledAll.Add(elem); + exit(true); + end else begin + exit(false); + end; end; -end; -procedure TxpElement.AddCalledAll_FromList(lstCalled0: TxpListCalled); -{Agrega referencia a procedimiento llamado, a partir de una lista, de forma recursiva} -var - elem: TxpElement; -begin - inc(curNesting); //incrementa el anidamiento - if curNesting>maxNesting then maxNesting := curNesting; + function AddCalledAll_FromList(lstCalled0: TxpListCalled): integer; + {Add the call references (to lstCalledAll) of all elements of the list lstCalled0, + including its called too (recursive).} + var + elem: TxpElement; + err: Integer; + begin + inc(curNesting); //incrementa el anidamiento + if curNesting>maxNesting then maxNesting := curNesting; - if lstCalled0.Count = 0 then exit; - for elem in lstCalled0 do begin - AddCalledAll(elem); //Agrega elemento - if elem.lstCalled.Count <> 0 then begin //Tiene otros elementos - AddCalledAll_FromList(elem.lstCalled); + if lstCalled0.Count = 0 then exit; + for elem in lstCalled0 do begin +// debugln('Call to ' + elem.name + ' from ' + self.name); +// if elem = self then begin +// {This is some way to detect circular references like: +// procedure proc2; +// begin +// proc1; +// end; +// procedure proc1; +// begin +// proc2; +// end; +// But fails whe this element is not part of the circualr reference like +// procedure proc2; <-- We are proc2 +// begin +// proc1; +// end; +// procedure proc1; <-- Here is the recursion +// begin +// proc1; +// end; +// In this case, several call to proc1() will be adding. +// } +// if curNesting = 1 then begin +// exit(-1); +// end else begin +// exit(-2); +// end; +// end; + //Add element reference + if not AddCalledAll(elem) then begin + //This is better way to detect circle references, because lstCalled, doesn't + //contain duplicated calls. + exit(-1); + end; + if curNesting > 100 then begin + //This is a secure way (but less elegant) for checking recursion. (If curNesting + //grows too much). I don't expect this happens, unless exists some case I haven't + //considered. + exit(-1); + end; + //Verify if this element have other calls to add too. + if elem.lstCalled.Count <> 0 then begin + err := AddCalledAll_FromList(elem.lstCalled); + if err<0 then exit(err); + end; end; + dec(curNesting); //incrementa el anidamiento + exit(curNesting); end; - dec(curNesting); //incrementa el anidamiento -end; -procedure TxpElement.UpdateCalledAll; -{Actualiza la lista "lstCalledAll", usando AddCalledAll_FromList().} begin - lstCalledAll.Clear; //Por si acaso - curNesting := 0; //Inicia - maxNesting := 0; //Inicia - AddCalledAll_FromList(lstCalled); - {Falta actualizar maxNesting, con las llamadas a funciones del sistema y - llamadas de interrupciones.} +//debugln('UpdateCalledAll' + IntToStr(lstCalledAll.Count)); + lstCalledAll.Clear; //By security + curNesting := 0; + maxNesting := 0; + Result := AddCalledAll_FromList(lstCalled); end; function TxpElement.Path: string; @@ -932,10 +1165,6 @@ constructor TxpEleCon.Create; idClass:=eltCons; end; { TxpEleVar } -function TxpEleVar.GetHavAdicPar: boolean; -begin - Result := adicPar.isAbsol; //De momento, es el único parámetro adicional -end; function TxpEleVar.Gettyp: TxpEleType; begin if ftyp.copyOf<>nil then Result := ftyp.copyOf else Result := ftyp; @@ -976,24 +1205,12 @@ function TxpEleVar.bank: TVarBank; {Devuelve el banco de memoria en donde se ubica la variable actual. Asumiendo que toda la variables se ubica en el mismo banco.} begin - if (Typ = typBit) or (Typ = typBool) then begin - Result := adrBit.bank; - end else begin //Char o byte - Result := adrByte0.bank; - end; + Result := addr0 >> 7; //La variable siempre empieza en "addr0" end; function TxpEleVar.offs: TVarOffs; {Devuelve la dirección de inicio, en donde empieza a almacenarse la variable.} begin - if (Typ = typBit) or (Typ = typBool) then begin - Result := adrBit.offs; - end else begin //Char o byte - Result := adrByte0.offs; - end; -end; -procedure TxpEleVar.SetHavAdicPar(AValue: boolean); -begin - adicPar.isAbsol := Avalue; //De momento, es el único parámetro adicional + Result := addr0 and $7F; //La variable siempre empieza en "addr0" end; function TxpEleVar.addr: word; {Devuelve la dirección absoluta de la variable. Tener en cuenta que la variable, no @@ -1037,11 +1254,7 @@ function TxpEleVar.addrH: word; function TxpEleVar.addrE: word; begin if typ.catType = tctAtomic then begin - if (typ = typDWord) then begin - Result := adrByte2.addr; - end else begin - Result := ADRR_ERROR; - end; + Result := addr2; end else begin //No soportado Result := ADRR_ERROR; @@ -1050,11 +1263,7 @@ function TxpEleVar.addrE: word; function TxpEleVar.addrU: word; begin if typ.catType = tctAtomic then begin - if (typ = typDWord) then begin - Result := adrByte3.addr; - end else begin - Result := ADRR_ERROR; - end; + Result := addr3; end else begin //No soportado Result := ADRR_ERROR; @@ -1117,7 +1326,7 @@ function TxpOperator.CreateOperation(OperandType: TxpEleType; r: TxpOperation; begin //agrega - r := TxpOperation.Create; + r := TxpOperation.Create; r.ToType:=OperandType; r.proc:=proc; r.parent := self; @@ -1151,7 +1360,27 @@ destructor TxpOperator.Destroy; Operations.Free; inherited Destroy; end; - +function TxpEleType.getSize: smallint; +var + lastAttrib: TTypAttrib; +begin + if catType = tctArray then begin + //Array size is calculated + if nItems = -1 then exit(0) else exit(itmType.size * nItems); + end else if catType = tctPointer then begin + exit(1); //Pointer are like bytes + end else if catType = tctObject then begin + if attribs.Count = 0 then exit(0); + lastAttrib := attribs[attribs.Count-1]; + exit(lastAttrib.offs + lastAttrib.typ.size); // + end else begin + exit(fSize) + end; +end; +procedure TxpEleType.setSize(AValue: smallint); +begin + fSize := AValue; +end; { TxpEleType } function TxpEleType.CreateBinaryOperator(txt: string; prec: byte; OpName: string ): TxpOperator; @@ -1277,7 +1506,8 @@ procedure TxpEleType.SaveToStk; if OnSaveToStk<>nil then OnSaveToStk; end; -procedure TxpEleType.CreateField(metName: string; proc: TTypFieldProc); +procedure TxpEleType.CreateField(metName: string; procGet, + procSet: TTypFieldProc); {Crea una función del sistema. A diferencia de las funciones definidas por el usuario, una función del sistema se crea, sin crear espacios de nombre. La idea es poder crearlas rápidamente.} @@ -1286,7 +1516,8 @@ procedure TxpEleType.CreateField(metName: string; proc: TTypFieldProc); begin fun := TTypField.Create; //Se crea como una función normal fun.Name := metName; - fun.proc := proc; + fun.procGet := procGet; + fun.procSet := procSet; //no verifica duplicidad fields.Add(fun); end; @@ -1294,43 +1525,77 @@ function TxpEleType.IsBitSize: boolean; {Indica si el tipo, tiene 1 bit de tamaño} begin // if copyOf<>nil then exit(copyOf.IsBitSize); //verifica - Result := (self = typBit) or (self = typBool); + Result := size = -1; end; function TxpEleType.IsByteSize: boolean; {Indica si el tipo, tiene 1 byte de tamaño} begin // if copyOf<>nil then exit(copyOf.IsByteSize); //verifica - Result := (self = typByte) or (self = typChar); + Result := size = 1; end; function TxpEleType.IsWordSize: boolean; {Indica si el tipo, tiene 2 bytes de tamaño} begin // if copyOf<>nil then exit(copyOf.IsWordSize); //verifica - Result := (self = typWord); + Result := size = 2; end; function TxpEleType.IsDWordSize: boolean; {Indica si el tipo, tiene 4 bytes de tamaño} begin // if copyOf<>nil then exit(copyOf.IsDWordSize); //verifica - Result := (self = typDWord); + Result := size = 4; end; procedure TxpEleType.DefineRegister; {Define los registros que va a usar el tipo de dato.} begin if OnDefRegister<>nil then OnDefRegister; end; + +function TxpEleType.IsArrayOf(itTyp: TxpEleType; numIt: integer): boolean; +{Indicates if this type is an array of the specified type and with the specified +number of elements.} +begin + exit( (catType = tctArray) and (nItems = numIt) and itmType.IsEquivalent(itTyp) ); +end; +function TxpEleType.IsPointerTo(ptTyp: TxpEleType): boolean; +begin + exit( (catType = tctPointer) and ptrType.IsEquivalent(ptTyp) ); +end; +function TxpEleType.IsEquivalent(typ: TxpEleType): boolean; +{Indicates if the type is the same type as the specified or has the same definition.} +begin + if self = typ then exit(true); + if catType <> typ.catType then exit(false); + //Have the same category + if (self.copyOf = typ) or (typ.copyOf = self) then exit(true); + if (self.copyOf<>nil) and (self.copyOf = typ.copyOf) then exit(true); + if catType = tctArray then begin + //Equivalence for arrays + if (self.nItems = typ.nItems) and itmType.IsEquivalent(typ.itmType) then exit(true); + end else if catType = tctPointer then begin + //Equivalence for pointers + if (self.ptrType.IsEquivalent(typ.ptrType)) then exit(true); + end; + exit(false); +end; + constructor TxpEleType.Create; begin inherited; idClass:=eltType; - //Crea lista de campos + //Create list of methods fields:= TTypFields.Create(true); - //Ceea lista de operadores - Operators := TxpOperators.Create(true); //Lista de operadores aplicables a este tipo + //Create list of attributes + attribs:= TTypATtributes.Create(true); + //Ceeate list of operators + Operators := TxpOperators.Create(true); //Operators apllyed to this type + internalTypes:= TxpEleTypes.Create(true); end; destructor TxpEleType.Destroy; begin + internalTypes.Destroy; Operators.Destroy; + attribs.Destroy; fields.Destroy; inherited; end; @@ -1342,41 +1607,29 @@ constructor TxpEleMain.Create; Parent := nil; //la raiz no tiene padre end; { TxpEleFun } -procedure TxpEleFun.ClearParams; -//Elimina los parámetros de una función -begin - setlength(pars,0); -end; -procedure TxpEleFun.CreateParam(parName: string; typ0: TxpEleType; pvar: TxpEleVar); -//Crea un parámetro para la función -var - n: Integer; -begin - //agrega - n := high(pars)+1; - setlength(pars, n+1); - pars[n].name := parName; - pars[n].typ := typ0; //agrega referencia - pars[n].pvar := pvar; -end; -function TxpEleFun.SameParams(Fun2: TxpEleFun): boolean; -{Compara los parámetros de la función con las de otra. Si tienen el mismo número -de parámetros y el mismo tipo, devuelve TRUE.} +function TxpEleFunBase.SameParamsType(const funpars: TxpParFuncArray): boolean; +{Compara los parámetros de la función con una lista de parámetros. Si tienen el mismo +número de parámetros y el mismo tipo, devuelve TRUE.} var i: Integer; begin - Result:=true; //se asume que son iguales - if High(pars) <> High(Fun2.pars) then - exit(false); //distinto número de parámetros - //hay igual número de parámetros, verifica + Result:=true; //We assume they are the same + if High(pars) <> High(funpars) then + exit(false); //Distinct parameters number + //They have the same numbers of parameters, verify: for i := 0 to High(pars) do begin - if pars[i].typ <> Fun2.pars[i].typ then begin + if pars[i].typ <> funpars[i].typ then begin exit(false); end; end; //si llegó hasta aquí, hay coincidencia, sale con TRUE end; -function TxpEleFun.ParamTypesList: string; +procedure TxpEleFunBase.ClearParams; +//Elimina los parámetros de una función +begin + setlength(pars,0); +end; +function TxpEleFunBase.ParamTypesList: string; {Devuelve una lista con los nombres de los tipos de los parámetros, de la forma: (byte, word) } var @@ -1391,29 +1644,6 @@ function TxpEleFun.ParamTypesList: string; if length(tmp)>0 then tmp := copy(tmp,1,length(tmp)-2); Result := '('+tmp+')'; end; -function TxpEleFun.DuplicateIn(list: TxpElements): boolean; -var - uName: String; - ele: TxpElement; -begin - uName := upcase(name); - for ele in list do begin - if ele = self then Continue; //no se compara el mismo - if upcase(ele.name) = uName then begin - //hay coincidencia de nombre - if ele.idClass = eltFunc then begin - //para las funciones, se debe comparar los parámetros - if SameParams(TxpEleFun(ele)) then begin - exit(true); - end; - end else begin - //si tiene el mismo nombre que cualquier otro elemento, es conflicto - exit(true); - end; - end; - end; - exit(false); -end; procedure TxpEleFun.SetElementsUnused; {Marca todos sus elementos con "nCalled = 0". Se usa cuando se determina que una función no es usada.} @@ -1429,6 +1659,10 @@ procedure TxpEleFun.SetElementsUnused; end; end; end; +function TxpEleFun.HasDeclar: boolean; +begin + exit(declar<>nil); +end; function TxpEleFun.nCalled: integer; begin if IsInterrupt then exit(1); //Los INTERRUPT son llamados implícitamente @@ -1475,22 +1709,141 @@ function TxpEleFun.IsTerminal2: boolean; exit(false); end; end; +const CONS_ITEM_BLOCK = 10; + +procedure TxpEleFun.AddAddresPend(ad: word); +{Add a pending address to the function to be completed later.} +begin + addrsPend[nAddresPend] := ad; + inc(nAddresPend); + if nAddresPend > curSize then begin + curSize += CONS_ITEM_BLOCK; //Increase size by block + setlength(addrsPend, curSize); //make space + end; +end; //Inicialización constructor TxpEleFun.Create; begin inherited; idClass:=eltFunc; + //Init addrsPend[] + nAddresPend := 0; + curSize := CONS_ITEM_BLOCK; //Block size + setlength(addrsPend, curSize); //initial size end; destructor TxpEleFun.Destroy; begin inherited Destroy; end; + +{ TxpEleInlin } +procedure TxpEleInlin.ClearParams; +//Elimina los parámetros de una función +begin + setlength(pars,0); +end; +procedure TxpEleInlin.CreateParam(parName: string; typ0: TxpEleType; + sto0: TStoOperand); +//Crea un parámetro para la función +var + n: Integer; +begin + //agrega + n := high(pars)+1; + setlength(pars, n+1); + pars[n].name := parName; + pars[n].typ := typ0; //agrega referencia + pars[n].sto := sto0; //captura almacenamiento +end; +function TxpEleInlin.SameParamsType(const funpars: TxpParInlinArray): boolean; +{Compara los parámetros de la función con las de otra. Si tienen el mismo número +de parámetros, el mismo tipo y almacenamiento, devuelve TRUE.} +var + i: Integer; +begin + Result:=true; //se asume que son iguales + if High(pars) <> High(funpars) then + exit(false); //distinto número de parámetros + //hay igual número de parámetros, verifica + for i := 0 to High(pars) do begin + if pars[i].typ <> funpars[i].typ then begin + exit(false); + end; + //Estos parámetros tienen el mismo tipo + if pars[i].sto<> funpars[i].sto then begin + exit(false); //Pero otro almacenamiento + end; + end; + //si llegó hasta aquí, hay coincidencia, sale con TRUE +end; +function TxpEleInlin.Duplicated: boolean; +{Revisa la duplicidad de la función en su entorno. La función ya debe estar ingresada al +árbol de sintaxis. ******* ¿Realmente se usa?} +var + ele: TxpElement; +begin + for ele in parent.elements do begin + if ele = self then Continue; //no se compara el mismo + if ele.uname = uname then begin + //hay coincidencia de nombre + if ele.idClass = eltInLin then begin + //para las funciones, se debe comparar los parámetros + if SameParamsType(TxpEleInlin(ele).pars) then begin + exit(true); + end; + end else begin + //si tiene el mismo nombre que cualquier otro elemento, es conflicto + exit(true); + end; + end; + end; + exit(false); +end; +constructor TxpEleInlin.Create; +begin + inherited Create; + idClass:=eltInLin; +end; +destructor TxpEleInlin.Destroy; +begin + inherited Destroy; +end; + +{ TxpEleFunDec } +constructor TxpEleFunDec.Create; +begin + inherited Create; + idClass:=eltFuncDec; +end; + + +procedure TxpEleUnit.ReadInterfaceElements; +{Actualiza la lista "InterfaceElements", con los elementos accesibles desde la +sección INTERFACE.} +var + ele: TxpElement; +begin + InterfaceElements.Clear; + if elements = nil then exit; + //Solo basta explorar a un nivel + for ele in elements do begin + if ele.location = locInterface then begin + InterfaceElements.Add(ele); + end; + end; +end; { TxpEleUnit } constructor TxpEleUnit.Create; begin inherited; idClass:=eltUnit; + InterfaceElements:= TxpElements.Create(false); +end; +destructor TxpEleUnit.Destroy; +begin + InterfaceElements.Destroy; + inherited Destroy; end; { TxpEleBody } constructor TxpEleBody.Create; @@ -1502,6 +1855,16 @@ destructor TxpEleBody.Destroy; begin inherited Destroy; end; +{ TxpEleFinal } +constructor TxpEleFinal.Create; +begin + inherited Create; + idClass := eltFinal; +end; +destructor TxpEleFinal.Destroy; +begin + inherited Destroy; +end; { TxpEleDIREC } constructor TxpEleDIREC.Create; @@ -1517,8 +1880,36 @@ procedure TXpTreeElements.Clear; curNode := main; //retorna al nodo principal //ELimina lista internas + AllCons.Clear; AllVars.Clear; + AllUnits.Clear; AllFuncs.Clear; + AllTypes.Clear; +end; +{********* No se utilizan ya estos métodos porque se está agregando código de +identificación en TXpTreeElements.AddElement(). +procedure TXpTreeElements.RefreshAllCons; +{Devuelve una lista de todas las constantes del árbol de sintaxis, incluyendo las de las +funciones y procedimientos. La lista se obtiene ordenada de acuerdo a como se haría en +una exploración sintáctica normal.} + procedure AddCons(nod: TxpElement); + var + ele : TxpElement; + begin + if nod.elements<>nil then begin + for ele in nod.elements do begin + if ele.idClass = eltCons then begin + AllCons.Add(TxpEleCon(ele)); + end else begin + if ele.elements<>nil then + AddCons(ele); //recursivo + end; + end; + end; + end; +begin + AllCons.Clear; //por si estaba llena + AddCons(main); end; procedure TXpTreeElements.RefreshAllVars; {Devuelve una lista de todas las variables del árbol de sintaxis, incluyendo las de las @@ -1565,6 +1956,41 @@ procedure TXpTreeElements.RefreshAllFuncs; AllFuncs.Clear; //por si estaba llena AddFuncs(main); end; +procedure TXpTreeElements.RefreshAllTypes; +{Devuelve una lista de todas las constantes del árbol de sintaxis, incluyendo las de las +funciones y procedimientos. La lista se obtiene ordenada de acuerdo a como se haría en +una exploración sintáctica normal.} + procedure AddTypes(nod: TxpElement); + var + ele : TxpElement; + begin + if nod.elements<>nil then begin + for ele in nod.elements do begin + if ele.idClass = eltType then begin + AllTypes.Add(TxpEleType(ele)); + end else begin + if ele.elements<>nil then + AddTypes(ele); //recursivo + end; + end; + end; + end; +begin + AllTypes.Clear; //por si estaba llena + AddTypes(main); +end; +} +procedure TXpTreeElements.RefreshAllUnits; +var + ele : TxpElement; +begin + AllUnits.Clear; //por si estaba llena + for ele in main.elements do begin + if ele.idClass = eltUnit then begin + AllUnits.Add( TxpEleUnit(ele) ); + end; + end; +end; function TXpTreeElements.CurNodeName: string; {Devuelve el nombre del nodo actual} begin @@ -1601,18 +2027,23 @@ function TXpTreeElements.BodyNode: TxpEleBody; Result := main.BodyNode; end; //funciones para llenado del arbol -function TXpTreeElements.AddElement(elem: TxpElement; verifDuplic: boolean = true): boolean; -{Agrega un elemento al nodo actual. Si ya existe el nombre del nodo, devuelve false. -Este es el punto único de entrada para realizar cambios en el árbol.} +procedure TXpTreeElements.AddElement(elem: TxpElement; AtBegin: boolean = false); +{Add a new element to the current node. Commonly elements are add at the end of the list +unless "AtBegin" is TRUE. +This is the unique entry point to add elements to the Syntax Tree.} begin - Result := true; - //Verifica si hay conflicto. Solo es necesario buscar en el nodo actual. - if verifDuplic and elem.DuplicateIn(curNode.elements) then begin - exit(false); //ya existe - end; //Agrega el nodo - curNode.AddElement(elem); + curNode.AddElement(elem, AtBegin); if OnAddElement<>nil then OnAddElement(elem); + //Update Lists + case elem.idClass of + eltCons: AllCons.Add(TxpEleCon(elem)); + eltVar : AllVars.Add(TxpEleVar(elem)); + eltFunc: AllFuncs.Add(TxpEleFun(elem)); //Declarations are now stored in AllFuncs. + eltType: AllTypes.Add(TxpEleType(elem)); + eltInLin: AllInLns.Add(TxpEleInlin(elem)); + //No se incluye el código de RefreshAllUnits() porque solo trabaja en el "main". + end; end; procedure TXpTreeElements.AddElementAndOpen(elem: TxpElement); {Agrega un elemento y cambia el nodo actual al espacio de este elemento nuevo. Este @@ -1620,28 +2051,26 @@ procedure TXpTreeElements.AddElementAndOpen(elem: TxpElement); begin {las funciones o procedimientos no se validan inicialmente, sino hasta que tengan todos sus parámetros agregados, porque pueden ser sobrecargados.} - AddElement(elem, false); + AddElement(elem); //Genera otro espacio de nombres elem.elements := TxpElements.Create(true); //su propia lista curNode := elem; //empieza a trabajar en esta lista end; +procedure TXpTreeElements.AddElementParent(elem: TxpElement; AtBegin: boolean); +{Add element to the parent of the current element.} +var + tmp: TxpElement; +begin + tmp := curNode; //Save currente node + curNode := curNode.Parent; //Set to parent + AddElement(elem, AtBegin); //Add type at the beginning + curNode := tmp; //Restore position +end; procedure TXpTreeElements.OpenElement(elem: TxpElement); {Accede al espacio de nombres del elemento indicado.} begin curNode := elem; //empieza a trabajar en esta lista end; -function TXpTreeElements.ValidateCurElement: boolean; -{Este método es el complemento de OpenElement(). Se debe llamar cuando ya se - tienen creados los parámetros de la función o procedimiento, para verificar - si hay duplicidad, en cuyo caso devolverá FALSE} -begin - //Se asume que el nodo a validar ya se ha abierto, con OpenElement() y es el actual - if curNode.DuplicateIn(curNode.Parent.elements) then begin //busca en el nodo anterior - exit(false); - end else begin - exit(true); - end; -end; procedure TXpTreeElements.CloseElement; {Sale del nodo actual y retorna al nodo padre} begin @@ -1655,11 +2084,9 @@ function TXpTreeElements.FindNext: TxpElement; la búsqueda en unidades. Esta rutina es quien define la resolución de nombres (alcance) en PicPas.} var - tmp: String; elem: TxpElement; begin // debugln(' Explorando nivel: [%s] en pos: %d', [curFindNode.name, curFindIdx - 1]); - tmp := UpCase(curFindName); //convierte pra comparación repeat curFindIdx := curFindIdx - 1; //Siempre salta a la posición anterior if curFindIdx<0 then begin @@ -1679,10 +2106,14 @@ function TXpTreeElements.FindNext: TxpElement; end; //Verifica ahora este elemento elem := curFindNode.elements[curFindIdx]; - //Genera evento para indicar que está buscando + if inUnit and (elem.location = locImplement) then begin + //No debería ser accesible + continue; + end; + //Genera evento para indicar que está buscando. if OnFindElement<>nil then OnFindElement(elem); //Compara - if UpCase(elem.name) = tmp then begin + if (curFindName = '') or (elem.uname = curFindName) then begin //Encontró en "curFindIdx" Result := elem; //La siguiente búsqueda empezará en "curFindIdx-1". @@ -1704,13 +2135,13 @@ function TXpTreeElements.FindNext: TxpElement; until false; end; function TXpTreeElements.FindFirst(const name: string): TxpElement; -{Rutina que permite resolver un identificador dentro del árbol de sintaxis, siguiendo las -reglas de alcance de identificacdores (primero en el espacio actual y luego en los -espacios padres). -Si encuentra devuelve la referencia. Si no encuentra, devuelve NIL} +{Routine to resolve an identifier inside the SyntaxTree, following the scope rules for +identifiers of the Pascal syntax (first the current space and then the parents spaces). +If found returns the reference to the element otherwise returns NIL. +If "name" is empty string, all the elements, of the Syntax Tree, will be scanned.} begin //Busca recursivamente, a partir del espacio actual - curFindName := name; //Este valor no cambiará en toda la búsqueda + curFindName := UpCase(name); //This value won't change in all the search inUnit := false; //Inicia bandera if curNode.idClass = eltBody then begin {Para los cuerpos de procemientos o de programa, se debe explorar hacia atrás a @@ -1734,7 +2165,7 @@ function TXpTreeElements.FindFirst(const name: string): TxpElement; Result := FindNext; end; end; -function TXpTreeElements.FindNextFunc: TxpEleFun; +function TXpTreeElements.FindNextFuncName: TxpEleFun; {Explora recursivamente haciá la raiz, en el arbol de sintaxis, hasta encontrar el nombre de la fución indicada. Debe llamarse después de FindFirst(). Si no enecuentra devuelve NIL.} @@ -1748,6 +2179,32 @@ function TXpTreeElements.FindNextFunc: TxpEleFun; if ele = nil then exit(nil); //No encontró Result := TxpEleFun(ele); //devuelve como función end; + +function TXpTreeElements.FindFirstType: TxpEleType; +{Starts the search for a element type in the syntax Tree.} +var + ele: TxpElement; +begin + ele := FindFirst(''); + while (ele<>nil) and (ele.idClass <> eltType) do begin + ele := FindNext; + end; + if ele = nil then exit(nil) else exit( TxpEleType(ele) ); +end; +function TXpTreeElements.FindNextType: TxpEleType; +{Scan recursively toward root, in the syntax tree, until find a type element. +Must be called after calling FindFirst(). If not found, returns NIL.} +var + ele: TxpElement; +begin + repeat + ele := FindNext; + until (ele=nil) or (ele.idClass = eltType); + //Puede que haya encontrado la función o no + if ele = nil then exit(nil); //No encontró + Result := TxpEleType(ele); //devuelve como función +end; + function TXpTreeElements.FindVar(varName: string): TxpEleVar; {Busca una variable con el nombre indicado en el espacio de nombres actual} var @@ -1764,20 +2221,43 @@ function TXpTreeElements.FindVar(varName: string): TxpEleVar; exit(nil); end; function TXpTreeElements.FindType(typName: string): TxpEleType; -{Busca un tipo con el nombre indicado en el espacio de nombres actual} +{Find a type, by name, in the current element of the Synyax Tree.} var - ele : TxpElement; - uName: String; + ele: TxpElement; begin - uName := upcase(typName); - for ele in curNode.elements do begin - if (ele.idClass = eltType) and (upCase(ele.name) = uName) then begin - Result := TxpEleType(ele); - exit; - end; + ele := FindFirst(typName); +// while (ele<>nil) and (ele.idClass <> eltType) do begin +// ele := FindNext; +// end; + if ele = nil then exit(nil); + if ele.idClass = eltType then exit( TxpEleType(ele) ) else exit(nil); +end; + +function TXpTreeElements.ExistsArrayType(itemType: TxpEleType; nEle: integer; + out typFound: TxpEleType): boolean; +{Finds an array type declaration, accesible from the current position in the syntax tree. +If found, returns TRUE and the type reference in "typFound".} +begin + typFound := FindFirstType; + while (typFound <> nil) and not typFound.IsArrayOf(itemType, nEle) do begin + typFound := FindNextType; end; - exit(nil); + //Verify result + Result := typFound <> nil; end; +function TXpTreeElements.ExistsPointerType(ptrType: TxpEleType; out + typFound: TxpEleType): boolean; +{Finds a pointer type declaration, accesible from the current position in the syntax tree. +If found, returns TRUE and the type reference in "typFound".} +begin + typFound := FindFirstType; + while (typFound <> nil) and not typFound.IsPointerTo(ptrType) do begin + typFound := FindNextType; + end; + //Verify result + Result := typFound <> nil; +end; + function TXpTreeElements.GetElementBodyAt(posXY: TPoint): TxpEleBody; {Busca en el árbol de sintaxis, dentro del nodo principal, y sus nodos hijos, en qué cuerpo (nodo Body) se encuentra la coordenada del cursor "posXY". @@ -1858,7 +2338,10 @@ function TXpTreeElements.GetElementCalledAt(const srcPos: TSrcPos): TxpElement; if nod.elements<>nil then begin //Explora a todos sus elementos for ele in nod.elements do begin - if ele.IsCAlledAt(srcPos) then begin + {Busca un elemento que sea llamado desde desde esa posición pero que no sea + unidad, porque a los elementos Unidad también se les asigna llamadas cuando + se usa TCompilerBase.UpdateCallersToUnits;} + if ele.IsCAlledAt(srcPos) and (ele.idClass<>eltUnit) then begin res := ele; //guarda referencia exit; end else begin @@ -1904,28 +2387,68 @@ function TXpTreeElements.GetELementDeclaredAt(const srcPos: TSrcPos): TxpElement ExploreForDec(main); Result := res; end; +function TXpTreeElements.FunctionExistInCur(funName: string; + const pars: TxpParFuncArray): boolean; +{Indica si la función definida por el nombre y parámetros, existe en el nodo actual. +La búsqueda se hace bajo la consideración de que dos funciones son iguales si tiene el +mismo nombre y los mismos tipos de parámetros.} +var + ele: TxpElement; + uname: String; + funbas: TxpEleFunBase; +begin + uname := Upcase(funName); + for ele in curNode.elements do begin + if ele.uname = uname then begin + //hay coincidencia de nombre + if ele.idClass in [eltFunc, eltFuncDec] then begin + funbas := TxpEleFunBase(ele); + //para las funciones, se debe comparar los parámetros + if funbas.SameParamsType(pars) then begin + exit(true); + end; + end else begin + //Ssi tiene el mismo nombre que cualquier otro elemento, es conflicto + exit(true); + end; + end; + end; + exit(false); +end; + //constructor y destructor constructor TXpTreeElements.Create; begin main:= TxpEleMain.Create; //No debería main.name := 'Main'; main.elements := TxpElements.Create(true); //debe tener lista + AllCons := TxpEleCons.Create(false); //Crea lista + AllVars := TxpEleVars.Create(false); //Crea lista AllFuncs := TxpEleFuns.Create(false); //Crea lista - AllVars := TxpEleVars.Create(false); //Crea lista + AllInLns := TxpEleInlins.Create(false); //Crea lista + AllUnits := TxpEleUnits.Create(false); //Crea lista + AllTypes := TxpEleTypes.Create(false); curNode := main; //empieza con el nodo principal como espacio de nombres actual end; destructor TXpTreeElements.Destroy; begin main.Destroy; - AllVars.Free; //por si estaba creada + AllTypes.Destroy; + AllUnits.Destroy; + AllInLns.Destroy; AllFuncs.Free; + AllVars.Free; //por si estaba creada + AllCons.Free; inherited Destroy; end; initialization //crea el operador NULL nullOper := TxpOperator.Create; + typNull := TxpEleType.Create; + typNull.name := 'null'; finalization + typNull.Destroy; nullOper.Free; end. //1512 diff --git a/Source/XpresParserPIC.pas b/Source/XpresParserPIC.pas deleted file mode 100644 index ef7044ac..00000000 --- a/Source/XpresParserPIC.pas +++ /dev/null @@ -1,1593 +0,0 @@ -{XpresParserPIC - -Versión de XpresParser, orientada a trabajar con microcontroladores PIC. -La idea es tener aquí todas las rutinas que en lo posible sean independientes del -lenguaje y del modelo de PIC. - -Para mayor información sobre el uso del framework Xpres, consultar la documentación -técnica. -} -//{$Define LogExpres} -unit XpresParserPIC; -interface -uses - Classes, SysUtils, Forms, LCLType, lclProc, SynEditHighlighter, - SynFacilHighlighter, XpresBas, XpresTypesPIC, XpresElementsPIC, MisUtils, - Pic16Utils; -const - TIT_BODY_ELE = 'Body'; -type -//Tipo de expresión, de acuerdo a la posición en que aparece -TPosExpres = (pexINDEP, //Expresión independiente - pexASIG, //Expresión de asignación - pexPROC, //Expresión de procedimiento - pexSTRUC, //Expresión de estructura - pexPARAM, //Expresión de parámetro de función - pexPARSY //Expresión de parámetro de función de sistema - ); -TOperType = (operUnary, //Operación Unaria - operBinary //Operación Binaria - ); -{ TOperand } -//Objeto Operando. Para información sobre operandos, ver la documentación técnica. -TOperand = object -private - FSto : TStoOperand; //Almacenamiento del operando - FTyp : TxpEleType; //Tipo del operando, cuando no es stVariab - FVar : TxpEleVar; //Referencia a variable - //FVarOff: TxpEleVar; //Referencia a variable - FVal : TConsValue; //Valores constantes, cuando el operando es constante - function GetTyp: TxpEleType; - procedure SetvalBool(AValue: boolean); - procedure SetvalFloat(AValue: extended); - procedure SetvalInt(AValue: Int64); -public //Campos generales - txt : string; //Texto del operando o expresión, tal como aparece en la fuente - Inverted: boolean; {Este campo se usa para cuando el operando es de tipo Bit o Boolean. - Indica que la lógica debe leerse de forma invertida.} - rVarBase: TxpEleVar; {Referencia a variable base, cuando el operando es de tipo: - <variable>.<campo>.<campo>. } - {"Sto", "Typ" y "rVar" se consideran de solo lectura. Para cambiarlos, se han definido - los métodos: SetAsConst(), SetAsVariab(), SetAsExpres() y SetAsNull, que ofrecen una - forma más sencilla y segura que cambiar "Cat", "Typ", y rVar" individualmente (que es - como se hacía en versiones anteriores).} - property Sto : TStoOperand read FSto; //Alamcenamiento de operando - property Typ : TxpEleType read GetTyp; //Tipo del operando - property rVar: TxpEleVar read FVar; //Referencia a la variable. - //property rVarOff: TxpEleVar read FVarOff; //Referencia a la variable. - procedure SetAsConst(xtyp: TxpEleType); - procedure SetAsVariab(xvar: TxpEleVar); - procedure SetAsExpres(xtyp: TxpEleType); - procedure SetAsVarRef(VarBase: TxpEleVar); - procedure SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); - procedure SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); - procedure SetAsNull; - function StoOpStr: string; - function StoOpChr: char; - procedure DefineRegister; inline; - function FindOperator(const oper: string): TxpOperator; //devuelve el objeto operador - procedure Invert; //Invierte la lógica del operando -public //Campos acceso cuando sea variable. - function VarName: string; inline; //nombre de la variable, cuando sea de categ. coVariab - function offs : TVarOffs; //dirección de la variable - function Boffs: TVarOffs; inline; //dirección del byte del bit - function Loffs: TVarOffs; inline; //dirección del byte bajo - function Hoffs: TVarOffs; inline; //dirección del byte alto - function Eoffs: TVarOffs; inline; //dirección del byte alto - function Uoffs: TVarOffs; inline; //dirección del byte alto - function bank : TVarBank; inline; //banco - function addr : TVarOffs; //dirección absoluta de la variable - function Lbank: TVarBank; inline; //banco - function bit : byte; inline; //posición del bit -public //Campos de acceso a los valores constantes - property valInt : Int64 read Fval.ValInt write SetvalInt; - property valFloat: extended read Fval.ValFloat write SetvalFloat; - property valBool : boolean read Fval.ValBool write SetvalBool; - //funciones de ayuda para adaptar los tipos numéricos - function aWord: word; inline; //devuelve el valor en Word - function LByte: byte; inline; //devuelve byte bajo de valor entero - function HByte: byte; inline; //devuelve byte alto de valor entero - function EByte: byte; inline; //devuelve byte bajo de valor entero - function UByte: byte; inline; //devuelve byte bajo de valor entero - //campos para validar el rango de los valores - function CanBeByte: boolean; //indica si cae en el rango de un BYTE - function CanBeWord: boolean; //indica si cae en el rango de un WORD - //métodos para mover valores desde/hacia una constante externa - procedure CopyConsValTo(var c: TxpEleCon); - procedure GetConsValFrom(const c: TxpEleCon); -end; - -{ TCompilerBase } -{Clase base para crear al objeto compilador} -TCompilerBase = class -protected //Variables de expresión. - {Estas variables, se inician al inicio de cada expresión y su valor es válido - hasta el final de la expresión.} - CurrBank : Byte; //Banco RAM actual - //Variables de estado de las expresiones booleanas - InvertedFromC: boolean; {Indica que el resultado de una expresión Booleana o Bit, se - ha obtenido, en la última subexpresion, copaindo el bit C al - bit Z, con inversión lógica. Se usa para opciones de - optimziación de código.} -protected - procedure IdentifyField(xOperand: TOperand); - procedure LogExpLevel(txt: string); - function AddCallerTo(elem: TxpElement; callerElem: TxpElement = nil): TxpEleCaller; - function AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; -protected //Eventos del compilador - OnExprStart: procedure of object; {Se genera al iniciar la - evaluación de una expresión.} - OnExprEnd : procedure(posExpres: TPosExpres) of object; {Se genera al terminar de - evaluar una expresión.} - ExprLevel : Integer; //Nivel de anidamiento de la rutina de evaluación de expresiones - RTstate : TxpEleType; {Estado de los RT. Si es NIL, indica que los RT, no tienen - ningún dato cargado, sino indican el tipo cargado en los RT.} - function CaptureDelExpres: boolean; - procedure ProcComments; virtual; abstract; - procedure TipDefecNumber(var Op: TOperand; toknum: string); virtual; abstract; - procedure TipDefecString(var Op: TOperand; tokcad: string); virtual; abstract; - procedure TipDefecBoolean(var Op: TOperand; tokcad: string); virtual; abstract; - function EOExpres: boolean; - function EOBlock: boolean; - //Manejo de tipos - procedure ClearTypes; - function CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint - ): TxpEleType; - function FindSysEleType(TypName: string): TxpEleType; - //Manejo de constantes - function CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; - //Manejo de variables - function CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; - //Manejo de tipos - function CreateEleType(typName: string): TxpEleType; - //Manejo de funciones - function CreateFunction(funName: string; typ: TxpEleType; procParam, - procCall: TProcExecFunction): TxpEleFun; - function ValidateFunction: boolean; - function CreateSysFunction(funName: string; procParam, - procCall: TProcExecFunction): TxpEleFun; - procedure CaptureParamsFinal(fun: TxpEleFun); - function CaptureTok(tok: string): boolean; - function CaptureStr(str: string): boolean; - procedure CaptureParams(func0: TxpEleFun); - //Manejo del cuerpo del programa - function CreateBody: TxpEleBody; - //Manejo de Unidades - function CreateUnit(uniName: string): TxpEleUnit; - //Manejo de expresiones - procedure GetOperandIdent(var Op: TOperand); - function GetOperand: TOperand; virtual; - function GetOperandPrec(pre: integer): TOperand; - function GetOperator(const Op: Toperand): TxpOperator; - procedure GetExpressionE(const prec: Integer; posExpres: TPosExpres = pexINDEP); -public - FirstPass : boolean; //Indica que está en la primera pasada. - TreeElems : TXpTreeElements; //Árbol de sintaxis del lenguaje - TreeDirec : TXpTreeElements; //Árbol de sinatxis para directivas - listFunSys : TxpEleFuns; //lista de funciones del sistema - listTypSys : TxpEleTypes; //lista de tipos del sistema - pic : TPIC16; //Objeto PIC de la serie 16. -protected - procedure LoadToRT(Op: TOperand; modReturn: boolean = false); - function GetExpression(const prec: Integer): TOperand; - //LLamadas a las rutinas de operación - procedure Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); - procedure OperPre(var Op1: TOperand; opr: TxpOperator); - procedure OperPost(var Op1: TOperand; opr: TxpOperator); -public //Referencias a los tipos predefinidos de tokens. - tnEol : integer; - tnSymbol : integer; - tnSpace : integer; - tnIdentif : integer; - tnNumber : integer; - tnKeyword : integer; - tnString : integer; - tnComment : integer; - //Atributos - tkEol : TSynHighlighterAttributes; - tkSymbol : TSynHighlighterAttributes; - tkSpace : TSynHighlighterAttributes; - tkIdentif : TSynHighlighterAttributes; - tkNumber : TSynHighlighterAttributes; - tkKeyword : TSynHighlighterAttributes; - tkString : TSynHighlighterAttributes; - tkComment : TSynHighlighterAttributes; - //otras referencias - tnOperator: integer; - tnBoolean : integer; - tnSysFunct: integer; - tnType : integer; - //Atributos - tkOperator: TSynHighlighterAttributes; - tkBoolean : TSynHighlighterAttributes; - tkSysFunct: TSynHighlighterAttributes; - tkType : TSynHighlighterAttributes; -public //Tipos adicionales de tokens - tnStruct : integer; - tnDirective: integer; - tnAsm : integer; - tnExpDelim : integer; - tnBlkDelim : integer; - tnChar : integer; - tnOthers : integer; -public - xLex : TSynFacilSyn; //resaltador - lexer - cIn : TContexts; //entrada de datos - //variables públicas del compilador - ejecProg: boolean; //Indica que se está ejecutando un programa o compilando - DetEjec: boolean; //para detener la ejecución (en intérpretes) - -// func0 : TxpEleFun; //función interna para almacenar parámetros - p1, p2 : ^TOperand; //Pasa los operandos de la operación actual - res : TOperand; //resultado de la evaluación de la última expresión. - function stoOperation: TStoOperandsROB; inline; -public //Manejo de errores y advertencias - HayError: boolean; - OnWarning: procedure(warTxt: string; fileName: string; row, col: integer) of object; - OnError : procedure(errTxt: string; fileName: string; row, col: integer) of object; - OnInfo : procedure(infTxt: string) of object; - procedure ClearError; - //Rutinas de generación de mensajes - procedure GenInfo(msg: string); - //Rutinas de generación de advertencias - procedure GenWarn(msg: string; fil: String; row, col: integer); - procedure GenWarn(msg: string; const Args: array of const; fil: String; row, col: integer); - procedure GenWarn(msg: string); - procedure GenWarn(msg: string; const Args: array of const); - procedure GenWarnPos(msg: string; const Args: array of const; srcPos: TSrcPos); - //Rutinas de generación de error - procedure GenError(msg: string; fil: String; row, col: integer); - procedure GenError(msg: String; const Args: array of const; fil: String; row, col: integer); - procedure GenError(msg: string); - procedure GenError(msg: String; const Args: array of const); - procedure GenErrorPos(msg: String; const Args: array of const; srcPos: TSrcPos); -public //Inicialización - constructor Create; virtual; - destructor Destroy; override; -end; - -implementation -uses Graphics; - -{TCompilerBase} -function TCompilerBase.EOExpres: boolean; inline; -//Indica si se ha llegado al final de una expresión. -begin - Result := cIn.tok = ';'; //en este caso de ejemplo, usamos punto y coma - {En la práctica, puede ser conveniente definir un tipo de token como "tkExpDelim", para - mejorar el tiempo de respuesta del procesamiento, de modo que la condición sería: - Result := cIn.tokType = tkExpDelim; - } -end; -function TCompilerBase.EOBlock: boolean; inline; -//Indica si se ha llegado el final de un bloque -begin - Result := cIn.tokType = tnBlkDelim; - {No está implementado aquí, pero en la práctica puede ser conveniente definir un tipo de token - como "tnBlkDelim", para mejorar el tiempo de respuesta del procesamiento, de modo que la - condición sería: - Result := cIn.tokType = tnBlkDelim;} -end; -function TCompilerBase.CaptureDelExpres: boolean; -//Verifica si sigue un delimitador de expresión. Si encuentra devuelve false. -begin - cIn.SkipWhites; - if EOExpres then begin //encontró - cIn.Next; //pasa al siguiente - exit(true); - end else begin //es un error - GenError('";" expected.'); - exit(false); //sale con error - end; - -end; -//Manejo de tipos -procedure TCompilerBase.ClearTypes; //Limpia los tipos del sistema -begin - listTypSys.Clear; -end; -function TCompilerBase.CreateSysType(nom0: string; cat0: TTypeGroup; siz0: smallint): TxpEleType; -{Crea un elemento tipo, del sistema.} -var - eType: TxpEleType; -begin - //Verifica nombre - if FindSysEleType(nom0) <> nil then begin - GenError('Duplicated identifier: "%s"', [nom0]); - {%H-}exit; //Devuelve valor indeterminado - end; - //Crea elemento de tipo - eType := TxpEleType.Create; - eType.name := nom0; - eType.grp := cat0; - eType.size := siz0; - eType.catType := tctAtomic; - listTypSys.Add(eType); - //Devuelve referencia al tipo - Result:=eType; -end; -function TCompilerBase.FindSysEleType(TypName: string): TxpEleType; -{Busca un elemento de tipo por su nombre. Si no encuentra, devuelve NIL.} -var - etyp: TxpEleType; -begin - typName := upcase(typName); - for etyp in listTypSys do begin - if UpCase(etyp.name) = typName then exit(etyp); //devuelve referencia - end; - exit(nil); -end; -function TCompilerBase.CreateCons(consName: string; eletyp: TxpEleType): TxpEleCon; -{Rutina para crear una constante. Devuelve referencia a la constante creada.} -var - conx : TxpEleCon; -begin - //registra variable en la tabla - conx := TxpEleCon.Create; - conx.name:=consName; - conx.typ := eletyp; //fija referencia a tipo - Result := conx; -end; -//Manejo de variables -function TCompilerBase.CreateVar(varName: string; eleTyp: TxpEleType): TxpEleVar; -{Rutina para crear una variable. Devuelve referencia a la variable creada.} -var - xVar: TxpEleVar; -begin - xVar := TxpEleVar.Create; - xVar.name := varName; - xVar.typ := eleTyp; - xVar.havAdicPar := false; - Result := xVar; -end; -//Manejo de tipos -function TCompilerBase.CreateEleType(typName: string): TxpEleType; -var - xTyp: TxpEleType; -begin - xTyp := TxpEleType.Create; - xTyp.name := typName; -// xTyp.typ := typ; - Result := xTyp; -end; -//Manejo de funciones -function TCompilerBase.CreateFunction(funName: string; typ: TxpEleType; - procParam, procCall: TProcExecFunction): TxpEleFun; -{Crea una nueva función y devuelve la referecnia a la función.} -var - fun : TxpEleFun; -begin - fun := TxpEleFun.Create; - fun.name:= funName; - fun.typ := typ; - fun.procParam := procParam; - fun.procCall:= procCall; - fun.ClearParams; - Result := fun; -end; -function TCompilerBase.ValidateFunction: boolean; -{Valida la última función introducida, verificando que no haya otra función con el - mismo nombre y mismos parámetros. De ser así devuelve FALSE. - Se debe llamar después de haber leido los parámetros de la función. } -begin - if not TreeElems.ValidateCurElement then begin - GenError('Duplicated function: %s',[TreeElems.CurNodeName]); - exit(false); - end; - exit(true); //validación sin error -end; -function TCompilerBase.CreateSysFunction(funName: string; - procParam, procCall: TProcExecFunction): TxpEleFun; -{Crea una función del sistema. A diferencia de las funciones definidas por el usuario, -una función del sistema se crea, sin crear espacios de nombre. La idea es poder -crearlas rápidamente. "procParam", solo es necesario, cuando la función del sistema -debe devolver valores (No es procedimiento).} -var - fun : TxpEleFun; -begin - fun := TxpEleFun.Create; //Se crea como una función normal - fun.name:= funName; - fun.typ := typNull; - fun.procParam := procParam; - fun.procCall:= procCall; - fun.ClearParams; - listFunSys.Add(fun); //Las funciones de sistema son accesibles siempre - Result := fun; -end; -function TCompilerBase.CaptureTok(tok: string): boolean; -{Toma el token indicado del contexto de entrada. Si no lo encuentra, genera error y -devuelve FALSE.} - procedure GenErrorInLastLine(var p: TSrcPos); - {Genera error posicionando el punto del error, en una línea anterior, que no esté - vacía.} - var - lin: String; - begin - if p.row>1 then begin - //Hay línea anterior - repeat - p.row := p.row - 1; - lin := cIn.curCon.curLines[p.row - 1]; - until (p.row<=1) or (trim(lin)<>''); - //Encontró línea anterior no nula o llegó a la primera línea. -// xlex.ExploreLine(Point(length(lin), p.row), toks, CurTok ); - p.col := length(lin); //mueve al final (antes del EOL) - GenErrorPos('"%s" expected.', [tok], p); //Genera error - end else begin - //No hay línea anterior - p.col := 1; //mueve al inicio - GenErrorPos('"%s" expected.', [tok], p); //Genera error - end; - end; - -var - x: integer; - lin: String; - p: TSrcPos; -begin - //Debe haber parámetros - if cIn.tok<>tok then begin - //No se encontró el token. Muestra mensaje de error. - {Pero el error, debe estar antes, así que hacemos la magia de explorar hacia atrás, - hasta encontrar el token involucrado.} - p := cIn.ReadSrcPos; //posición actual - x := p.col; //lee posición actual - if x>1 then begin - //Hay algo antes del token - lin := cIn.curCon.CurLine; - repeat - dec(x); - until (x<=1) or (lin[x] <> ' '); - if x<=1 then begin - //Está lleno de espacios, hasta el inicio. - //Es muy probable que el error esté en la línea anterior. - GenErrorInLastLine(p); - end else begin - //Encontró, en la misma línea un caracter diferente de espacio - GenErrorPos('"%s" expected.', [tok], p); //Genera error ahí mismo - end; - end else begin - //Está al inicio de la línea. El error debe estar antes - GenErrorInLastLine(p); - end; - exit(false); - end; - cin.Next; - exit(true); -end; -function TCompilerBase.CaptureStr(str: string): boolean; -//Similar a CaptureTok(), pero para cadenas. Se debe dar el texto en minúscula. -begin - //Debe haber parámetros - if cIn.tokL<>str then begin - GenError('"%s" expected.', [str]); - exit(false); - end; - cin.Next; - exit(true); -end; -procedure TCompilerBase.CaptureParams(func0: TxpEleFun); -//Lee los parámetros de una función en la función interna funcs[0] -begin - //func0.ClearParams; - if EOBlock or EOExpres then begin - //no tiene parámetros - end else begin - //Debe haber parámetros - if cIn.tok <> '(' then begin - //Si no sigue '(', significa que no hay parámetros. - exit; - end; - cIn.Next; //Toma paréntesis - repeat - GetExpressionE(0, pexPARAM); //captura parámetro - if HayError then exit; //aborta - //guarda tipo de parámetro - func0.CreateParam('',res.Typ, nil); - if cIn.tok = ',' then begin - cIn.Next; //toma separador - cIn.SkipWhites; - end else begin - //No sigue separador de parámetros, - //debe terminar la lista de parámetros - //¿Verificar EOBlock or EOExpres ? - break; - end; - until false; - //busca paréntesis final - if not CaptureTok(')') then exit; - end; -end; -procedure TCompilerBase.CaptureParamsFinal(fun: TxpEleFun); -{Captura los parámetros asignándolos a las variables de la función que representan a los -parámetros. No hace falta verificar, no debería dar error, porque ya se verificó con -CaptureParams. } -var - i: Integer; - par: TxpParFunc; - Op1, Op2: TOperand; - op: TxpOperator; -begin - if EOBlock or EOExpres then exit; //sin parámetros - CaptureTok('('); //No debe dar error porque ya se verificó - for i := 0 to high(fun.pars) do begin - par := fun.pars[i]; - {Ya sirvió "RTstate", ahora lo limpiamos, no vaya a pasar que las rutinas de - asignación, piensen que los RT están ocupados, cuando la verdad es que han sido - liberados, precisamente para ellas.} - RTstate := nil; - //Evalúa parámetro - Inc(ExprLevel); //cuenta el anidamiento - Op2 := GetExpression(0); //llama como sub-expresión - Dec(ExprLevel); - if HayError then exit; //aborta - if cIn.tok = ',' then begin - cIn.Next; - cIn.SkipWhites; - end; - //Genera código para la asignación - if par.pvar.IsRegister then begin - {Cuando es parámetro registro, no se asigna, se deja en el registro(s) de - trabajo.} - LoadToRT(Op2); - end else begin - //Crea un operando-variable para generar código de asignación - Op1.SetAsVariab(par.pvar); //Apunta a la variable - AddCallerTo(par.pvar); //Agrega la llamada - op := Op1.Typ.operAsign; - Oper(Op1, op, Op2); //Codifica la asignación - end; - end; - if not CaptureTok(')') then exit; -end; -function TCompilerBase.CreateBody: TxpEleBody; -var - body: TxpEleBody; -begin - body := TxpEleBody.Create; - body.name := TIT_BODY_ELE; - Result := body; -end; -function TCompilerBase.CreateUnit(uniName: string): TxpEleUnit; -var - uni: TxpEleUnit; -begin - uni := TxpEleUnit.Create; - uni.name := uniName; - Result := uni; -end; -procedure TCompilerBase.IdentifyField(xOperand: TOperand); -{Identifica el campo de una variable. Si encuentra algún problema genera error. -Notar que el parámetro es por valor, es decir, se crea una copia, por seguridad. -Puede generar código de evaluación. Devuelve el resultado en "res". } -var - field: TTypField; - identif: String; -begin - if cIn.tok = '[' then begin - //Caso especial de llamada a Item(). - for field in xOperand.Typ.fields do begin - if LowerCase(field.Name) = 'item' then begin - field.proc(@xOperand); //Devuelve resultado en "res" - if cIn.tok = '.' then begin - //Aún hay más campos, seguimos procesando - //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado - IdentifyField(res); - end; - exit; - end; - end; - //No encontró setitem() - GenError('Cannot access to index in: %s', [xOperand.txt]); - exit; - end; - cIn.Next; //Toma el "." - if (cIn.tokType<>tnIdentif) and (cIn.tokType<>tnNumber) then begin - GenError('Identifier expected.'); - cIn.Next; //Pasa siempre - exit; - end; - //Hay un identificador - identif := cIn.tokL; - //Prueba con campos del tipo - for field in xOperand.Typ.fields do begin - if LowerCase(field.Name) = identif then begin - //Encontró el campo - field.proc(@xOperand); //Devuelve resultado en "res" - //cIn.Next; //Coge identificador - if cIn.tok = '.' then begin - //Aún hay más campos, seguimos procesando - //Como "IdentifyField", crea una copia del parámetro, no hay cruce con el resultado - IdentifyField(res); - end; - exit; - end; - end; - //No encontró - GenError('Unknown identifier: %s', [identif]); -end; -//Manejo de expresiones -procedure TCompilerBase.GetOperandIdent(var Op: TOperand); -{Lee un operando de tipo identificador, devuelve en "Op". Esta rutina era inicialmente -parte de GetOperand(), pero se separó porque: -* Es una rutina larga y se piensa agregar más código, aún. -* Porque se piensa usarla también, de forma independiente. -Se declara como procedimiento, en lugar de función, para evitar crear copias del -operando y mejorar así el desempeño. Incluso se espera que GetOperand(), se declare -luego de la misma forma.} -var - ele : TxpElement; - xvar : TxpEleVar; - xcon : TxpEleCon; - posCall : TSrcPos; - posPar : TPosCont; - posFlash: Integer; - RTstate0: TxpEleType; - xfun : TxpEleFun; - Found : Boolean; - func0 : TxpEleFun; //función interna para almacenar parámetros -begin -//cIn.ShowCurContInformat; -//debugln(' ++CurNode:' + TreeElems.curNode.Path); - ele := TreeElems.FindFirst(cIn.tok); //identifica elemento - if ele = nil then begin - //No identifica a este elemento - GenError('Unknown identifier: %s', [cIn.tok]); - exit; - end; -//debugln(' --Element ' + cIn.tok + ':' + ele.Path); - if ele.idClass = eltVar then begin - //Es una variable - xvar := TxpEleVar(ele); //Referencia con tipo - //Lleva la cuenta de la llamada. - {Notar que se agrega la referencia a la variable, pero que finalmente el operando - puede apuntar a otra variable, si es que se tiene la forma: <variable>.<campo> } - AddCallerTo(xvar); - cIn.Next; //Pasa al siguiente - if xvar.IsRegister then begin - //Es una variables REGISTER - Op.SetAsExpres(xvar.typ); - //Faltaría asegurarse de que los registros estén disponibles - Op.DefineRegister; - end else begin - //Es una variable común - Op.SetAsVariab(xvar); //Guarda referencia a la variable (y actualiza el tipo). - {$IFDEF LogExpres} Op.txt:= xvar.name; {$ENDIF} //toma el texto - //Verifica si tiene referencia a campos con "." - if (cIn.tok = '.') or (cIn.tok = '[') then begin - IdentifyField(Op); - Op := res; //notar que se usa "res". - if HayError then exit; - {Como este operando es de tipo <variable>.<algo>... , actualizamos el campo - "rVarBase", y se hace al final porque los métodos Op.SetAsXXXX() } - Op.rVarBase := xvar; //Fija referencia a la variable base - end; - end; - end else if ele.idClass = eltCons then begin //es constante - //es una constante - xcon := TxpEleCon(ele); - AddCallerTo(xcon);//lleva la cuenta - cIn.Next; //Pasa al siguiente - Op.SetAsConst(xcon.typ); //fija como constante - Op.GetConsValFrom(xcon); //lee valor - {$IFDEF LogExpres} Op.txt:= xcon.name; {$ENDIF} //toma el texto - //Verifica si tiene referencia a campos con "." - if (cIn.tok = '.') or (cIn.tok = '[') then begin - IdentifyField(Op); - Op := res; //notar que se usa "res". - if HayError then exit;; - end; - end else if ele.idClass = eltFunc then begin //es función - {Se sabe que es función, pero no se tiene la función exacta porque puede haber - versiones, sobrecargadas de la misma función.} - posCall := cIn.ReadSrcPos; //gaurda la posición de llamada. - cIn.Next; //Toma identificador - cIn.SkipWhites; //Quita posibles blancos - posPar := cIn.PosAct; //guarda porque va a pasar otra vez por aquí - posFlash := pic.iFlash; //guarda posición, antes del código de evaluación. - RTstate0 := RTstate; //guarda porque se va a alterar con CaptureParams(). - {Crea func0 localmente, para permitir la recursividad en las llamadas a las funciones. - Adicionalmenet, deberái plantearse otor método en la exploración de parámetros, tal - vez la creeación de un árbol de funciones sobrecargdas. Y así se podría incluso - implementar más fácilmente la adpatación de parámetros como byte->word.} - try - func0 := TxpEleFun.Create; //crea la función 0, para uso interno - CaptureParams(func0); //primero lee parámetros - if HayError then begin - exit; - end; - //Aquí se identifica la función exacta, que coincida con sus parámetros - xfun := TxpEleFun(ele); - //Primero vemos si la primera función encontrada, coincide: - if func0.SameParams(xfun) then begin - //Coincide - Found := true; - end else begin - //No es, es una pena. Ahora tenemos que seguir buscando en el árbol de sintaxis. - repeat - //Usar FindNextFunc, es la forma es eficiente, porque retoma la búsqueda anterior. - xfun := TreeElems.FindNextFunc; - until (xfun = nil) or func0.SameParams(xfun); - Found := (xfun <> nil); - end; - if Found then begin - //Ya se identificó a la función que cuadra con los parámetros - {$IFDEF LogExpres} Op.txt:= cIn.tok; {$ENDIF} //toma el texto - {Ahora que ya sabe cúal es la función referenciada, captura de nuevo los - parámetros, pero asignándola al parámetro que corresponde.} - cIn.PosAct := posPar; - pic.iFlash := posFlash; - RTstate := RTstate0; - xfun.procParam(xfun); //Antes de leer los parámetros - if high(func0.pars)+1>0 then - CaptureParamsFinal(xfun); //evalúa y asigna - //Se hace después de leer parámetros, para tener información del banco. - AddCallerTo(xfun, posCall); {Corrige posición de llamada, sino estaría apuntando - al final de los parámetros} - xfun.procCall(xfun); //codifica el "CALL" - RTstate := xfun.typ; //para indicar que los RT están ocupados - Op.SetAsExpres(xfun.typ); - exit; - end else begin - //Encontró la función, pero no coincidió con los parámetros - GenError('Type parameters error on %s', [ele.name + '()']); - exit; - end; - finally - func0.Destroy; - end; -// end else if DefinedMacro(cIn.tok) then begin //verifica macro -// //Es una macro - end else begin - GenError('Not implemented.'); - exit; - end; -end; -function TCompilerBase.GetOperand: TOperand; -{Parte de la funcion analizadora de expresiones que genera codigo para leer un operando. -Debe devolver el tipo del operando y también el valor. En algunos casos, puede modificar -"res".} -var - xfun : TxpEleFun; - tmp, oprTxt: String; - Op : TOperand; - posAct: TPosCont; - opr : TxpOperator; - cod : Longint; -begin - //cIn.SkipWhites; - ProcComments; - Result.Inverted := false; //inicia campo - if cIn.tokType = tnNumber then begin //constantes numéricas - {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto - TipDefecNumber(Result, cIn.tok); //encuentra tipo de número, tamaño y valor - if HayError then exit; //verifica - cIn.Next; //Pasa al siguiente - end else if cIn.tokType = tnChar then begin //constante caracter - {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto - if not TryStrToInt(copy(cIn.tok, 2), cod) then begin - GenError('Error in character.'); //tal vez, sea muy grande - exit; - end; - if (cod<0) or (cod>255) then begin - GenError('Invalid code for char.'); - exit; - end; - Result.SetAsConst(typChar); - Result.valInt := cod; - cIn.Next; //Pasa al siguiente - end else if cIn.tokType = tnString then begin //constante cadena - if length(cIn.tok)=2 then begin //Es '' - GenError('Char expected.'); - exit; - end else if length(cIn.tok)>3 then begin //Es 'aaaa...' - GenError('Too long string for a Char.'); - exit; - end; - {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto - Result.SetAsConst(typChar); - Result.valInt := ord(cIn.tok[2]); - cIn.Next; //Pasa al siguiente - end else if (cIn.tokType = tnSysFunct) or //función del sistema - (cIn.tokL = 'bit') or //"bit" es de tipo "tnType" - (cIn.tokL = 'boolean') or //"boolean" es de tipo "tnType" - (cIn.tokL = 'byte') or //"byte" es de tipo "tnType" - (cIn.tokL = 'word') or //"word" es de tipo "tnType" - (cIn.tokL = 'dword') then begin //"dword" es de tipo "tnType" - {Se sabe que es función, pero no se tiene la función exacta porque puede haber - versiones, sobrecargadas de la misma función.} - tmp := UpCase(cIn.tok); //guarda nombre de función - cIn.Next; //Toma identificador - //Busca la función - for xfun in listFunSys do begin - if (Upcase(xfun.name) = tmp) then begin - {Encontró. Llama a la función de procesamiento, quien se encargará de - extraer los parámetros y analizar la sintaxis.} - if xfun.compile<>nil then begin - {LLeva la cuenta de llamadas, solo cuando hay subrutinas. Para funciones - INLINE, no vale la pena, gastar recursos.} - AddCallerTo(xfun); - end; - xfun.procCall(xfun); //Para que devuelva el tipo y codifique el _CALL o lo implemente - //Puede devolver typNull, si no es una función. - Result := res; //copia tipo, almacenamiento y otros campos relevantes - {$IFDEF LogExpres} Result.txt:= tmp; {$ENDIF} //toma el texto - exit; - end; - end; - GenError('Not implemented.'); - end else if cIn.tokType = tnIdentif then begin //puede ser variable, constante, función - GetOperandIdent(Result); - //Puede salir con error. - end else if cIn.tokType = tnBoolean then begin //true o false - {$IFDEF LogExpres} Result.txt:= cIn.tok; {$ENDIF} //toma el texto - TipDefecBoolean(Result, cIn.tok); //encuentra tipo y valor - if HayError then exit; //verifica - cIn.Next; //Pasa al siguiente - end else if cIn.tok = '(' then begin //"(" - cIn.Next; - Inc(ExprLevel); //cuenta el anidamiento - Result := GetExpression(0); - Dec(ExprLevel); - if HayError then exit; - If cIn.tok = ')' Then begin - cIn.Next; //lo toma - if (cIn.tok = '.') or (cIn.tok = '[') then begin - IdentifyField(Result); - Result := res; //notar que se usa "res". - if HayError then exit;; - end; - end Else begin - GenError('Error in expression. ")" expected.'); - Exit; //error - end; -{ end else if (cIn.tokType = tkString) then begin //constante cadena - Result.Sto:=stConst; //constante es Mono Operando - TipDefecString(Result, cIn.tok); //encuentra tipo de número, tamaño y valor - if pErr.HayError then exit; //verifica - if Result.typ = nil then begin - GenError('No hay tipo definido para albergar a esta constante cadena'); - exit; - end; - cIn.Next; //Pasa al siguiente -} - end else if cIn.tokType = tnOperator then begin - {Si sigue un operador puede ser un operador Unario. - El problema que tenemos, es que no sabemos de antemano el tipo, para saber si el - operador aplica a ese tipo como operador Unario Pre. Así que asumiremos que es así, - sino retrocedemos.} - posAct := cIn.PosAct; //Esto puede ser pesado en términos de CPU - oprTxt := cIn.tok; //guarda el operador - cIn.Next; //pasa al siguiente - Op := GetOperand(); //toma el operando. ¡¡¡Importante los peréntesis!!! - if HayError then exit; - //Ahora ya tenemos el tipo. Hay que ver si corresponde el operador - opr := Op.Typ.FindUnaryPreOperator(oprTxt); - if opr = nullOper then begin - {Este tipo no permite este operador Unario (a lo mejor ni es unario)} - cIn.PosAct := posAct; - GenError('Cannot apply the operator "%s" to type "%s"', [oprTxt, Op.Typ.name]); - exit; - end; - //Sí corresponde. Así que apliquémoslo - OperPre(Op, opr); - Result := res; - end else begin - //No se reconoce el operador - GenError('Operand expected.'); - end; -end; -procedure TCompilerBase.LogExpLevel(txt: string); -{Genera una cadena de registro , considerando el valor de "ExprLevel"} -begin - debugln(space(3*ExprLevel)+ txt ); -end; -function TCompilerBase.AddCallerTo(elem: TxpElement; callerElem: TxpElement=nil): TxpEleCaller; -{Agregar una llamada a un elemento de la sintaxis. -Agrega información sobre el elemento "llamador", es decir, el elemento que hace -referencia a este elemento. -El elemento llamador es "callerElem". Si no se especifica se asumirá un elemento -llamador por defecto, que debería ser la función/cuerpo desde donde se hace la llamada. -Devuelve la referencia al elemento llamador, cuando es efectiva al agregación.} -var - fc: TxpEleCaller; -begin - if not FirstPass then begin - //Solo se agregan llamadas en la primera pasada - Result := nil; - exit; - end; - fc:= TxpEleCaller.Create; - //Carga información del estado actual del parser - if callerElem = nil then begin - {Por defecto se toma el nodo actual que es el ceurpo de alguna función o el cuerpo - del programa principal.} - fc.caller := TreeElems.curNode; - end else begin - fc.caller := callerElem; - end; - fc.curBnk := CurrBank; - fc.curPos := cIn.ReadSrcPos; - elem.lstCallers.Add(fc); - Result := fc; -end; -function TCompilerBase.AddCallerTo(elem: TxpElement; const curPos: TSrcPos): TxpEleCaller; -{Versión de AddCallerTo() que agrega además la posición de la llamada, en lugar de usar -la posición actual.} -var - caller: TxpEleCaller; -begin - caller := AddCallerTo(elem); - if caller = nil then exit; - caller.curPos := curPos; //Corrige posición de llamada -end; -procedure TCompilerBase.Oper(var Op1: TOperand; opr: TxpOperator; var Op2: TOperand); -{Ejecuta una operación con dos operandos y un operador. "opr" es el operador de Op1. -El resultado debe devolverse en "res". En el caso de intérpretes, importa el -resultado de la Operación. -En el caso de compiladores, lo más importante es el tipo del resultado, pero puede -usarse también "res" para cálculo de expresiones constantes. -} -var - Operation: TxpOperation; - tmp: String; -begin - {$IFDEF LogExpres} - LogExpLevel('-- Op1='+Op1.txt+', Op2='+Op2.txt+' --'); - {$ENDIF} - //Busca si hay una operación definida para: <tipo de Op1>-opr-<tipo de Op2> -//debugln('Op1: cat=%s, typ=%s',[Op1.StoOpStr, Op1.Typ.name]); -//debugln('Op2: cat=%s, typ=%s',[Op2.StoOpStr, Op2.Typ.name]); - Operation := opr.FindOperation(Op2.Typ); - if Operation = nil then begin - tmp := '(' + Op1.Typ.name + ') '+ opr.txt; - tmp := tmp + ' ('+Op2.Typ.name+')'; - GenError('Illegal Operation: %s', - [tmp]); - exit; - end; - {Llama al evento asociado con p1 y p2 como operandos. } - p1 := @Op1; p2 := @Op2; { Se usan punteros por velocidad. De otra forma habría que - copiar todo el objeto.} - {Ejecuta la operación. - Los parámetros de entrada se dejan en p1 y p2. El resultado debe dejarse en "res"} - Operation.proc(Operation, true); //Llama normalmente - //Completa campos de "res", si es necesario - {$IFDEF LogExpres} - LogExpLevel('Oper('+Op1.catOpChr + ' ' + opr.txt + ' ' + Op2.catOpChr+') -> ' + - res.catOpChr); - res.txt := Op1.txt + ' ' + opr.txt + ' ' + Op2.txt; //texto de la expresión - {$ENDIF} -End; -procedure TCompilerBase.OperPre(var Op1: TOperand; opr: TxpOperator); -{Ejecuta una operación con un operando y un operador unario de tipo Pre. "opr" es el -operador de Op1. -El resultado debe devolverse en "res".} -begin - {$IFDEF LogExpres} - LogExpLevel('-- Op1='+Op1.txt+' --'); - {$ENDIF} - if opr.OperationPre = nil then begin - GenError('Illegal Operation: %s', - [opr.txt + '('+Op1.Typ.name+')']); - exit; - end; - {Llama al evento asociado con p1 como operando. } - p1 := @Op1; {Solo hay un parámetro} - {Ejecuta la operación. El resultado debe dejarse en "res"} - opr.OperationPre(opr, true); //Llama normalmente - //Completa campos de "res", si es necesario - {$IFDEF LogExpres} - LogExpLevel('Oper('+ opr.txt + ' ' + Op1.catOpChr+ ') -> ' + res.catOpChr); - res.txt := opr.txt + Op1.txt; - {$ENDIF} -end; -procedure TCompilerBase.OperPost(var Op1: TOperand; opr: TxpOperator); -{Ejecuta una operación con un operando y un operador unario de tipo Post. "opr" es el -operador de Op1. -El resultado debe devolverse en "res".} -begin - {$IFDEF LogExpres} - LogExpLevel('-- Op1='+Op1.txt+' --'); - {$ENDIF} - if opr.OperationPost = nil then begin - GenError('Illegal Operation: %s', - ['('+Op1.Typ.name+')' + opr.txt]); - exit; - end; - {Llama al evento asociado con p1 como operando. } - p1 := @Op1; {Solo hay un parámetro} - {Ejecuta la operación. El resultado debe dejarse en "res"} - opr.OperationPost(opr, true); //Llama normalmente - //Completa campos de "res", si es necesario - {$IFDEF LogExpres} - LogExpLevel('Oper('+Op1.catOpChr+ ' ' +opr.txt +') -> ' + res.catOpChr); - res.txt := Op1.txt + opr.txt; //indica que es expresión - {$ENDIF} -end; -function TCompilerBase.stoOperation: TStoOperandsROB; -begin - //Combinación de los almacenamientos de los operandos - Result := TStoOperandsROB((Ord(p1^.Sto) << 3) or ord(p2^.Sto)); -end; -function TCompilerBase.GetOperandPrec(pre: integer): TOperand; -//Toma un operando realizando hasta encontrar un operador de precedencia igual o menor -//a la indicada -var - Op1: TOperand; - Op2: TOperand; - opr: TxpOperator; - pos: TPosCont; -begin - {$IFDEF LogExpres} -// LogExpLevel('GetOperandP('+IntToStr(pre)+')'); - {$ENDIF} - Op1 := GetOperand; //toma el operador - if HayError then exit; - //verifica si termina la expresion - pos := cIn.PosAct; //Guarda por si lo necesita - cIn.SkipWhites; - opr := GetOperator(Op1); - if opr = nil then begin //no sigue operador - Result:=Op1; - end else if opr=nullOper then begin //hay operador pero, .. - //no está definido el operador siguente para el Op1, (no se puede comparar las - //precedencias) asumimos que aquí termina el operando. - cIn.PosAct := pos; //antes de coger el operador - GenError('Undefined operator: %s for type: %s', [opr.txt, Op1.Typ.name]); - exit; -// Result:=Op1; - end else begin //si está definido el operador (opr) para Op1, vemos precedencias - If opr.prec > pre Then begin //¿Delimitado por precedencia de operador? - //es de mayor precedencia, se debe Oper antes. - Op2 := GetOperandPrec(pre); //toma el siguiente operando (puede ser recursivo) - if HayError then exit; - Oper(Op1, opr, Op2); //devuelve en "res" - Result:=res; - End else begin //la precedencia es menor o igual, debe salir - cIn.PosAct := pos; //antes de coger el operador - Result:=Op1; - end; - end; -end; -function TCompilerBase.GetOperator(const Op: Toperand): TxpOperator; -{Busca la referencia a un operador de "Op", leyendo del contexto de entrada -Si no encuentra un operador en el contexto, devuelve NIL, pero no lo toma. -Si el operador encontrado no se aplica al operando, devuelve nullOper.} -begin - if cIn.tokType <> tnOperator then exit(nil); - //Hay un operador - Result := Op.Typ.FindBinaryOperator(cIn.tok); - if Result = nullOper then begin - //No lo encontró, puede ser oeprador unario - Result := Op.Typ.FindUnaryPostOperator(cIn.tok); - end; - cIn.Next; //toma el token -end; -function TCompilerBase.GetExpression(const prec: Integer): TOperand; //inline; -{Analizador de expresiones. Esta es probablemente la función más importante del - compilador. Procesa una expresión en el contexto de entrada llama a los eventos - configurados para que la expresión se evalúe (intérpretes) o se compile (compiladores). - Devuelve un operando con información sobre el resultado de la expresión.} -var - Op1, Op2 : TOperand; //Operandos - opr1: TxpOperator; //Operadores - p: TPosCont; -begin - //----------------coger primer operando------------------ - Op1 := GetOperand; - if HayError then exit; - //Verifica si termina la expresion - cIn.SkipWhites; - p := cIn.PosAct; //por si necesita volver - opr1 := GetOperator(Op1); - if opr1 = nil then begin //no sigue operador - //Expresión de un solo operando. Lo carga por si se necesita - //Oper(Op1); - Result:=Op1; - exit; //termina ejecucion - end; - //------- sigue un operador --------- - //verifica si el operador aplica al operando - if opr1 = nullOper then begin - GenError('Undefined operator: %s for type: %s', [opr1.txt, Op1.Typ.name]); - exit; - end; - //inicia secuencia de lectura: <Operador> <Operando> - while opr1<>nil do begin - //¿Delimitada por precedencia? - If opr1.prec<= prec Then begin //es menor que la que sigue, expres. - Result := Op1; //solo devuelve el único operando que leyó - cIn.PosAct := p; //vuelve - exit; - End; - if opr1.OperationPost<>nil then begin //Verifica si es operación Unaria - OperPost(Op1, opr1); - if HayError then exit; - Op1 := res; - cIn.SkipWhites; - //Verificación - if (cIn.tok = '.') or (cIn.tok = '[') then begin - IdentifyField(Op1); - if HayError then exit;; - Op1 := res; //notar que se usa "res". - cIn.SkipWhites; - end; - p := cIn.PosAct; //actualiza por si necesita volver - //Verifica operador - opr1 := GetOperator(Op1); - continue; - end; - //--------------------coger segundo operando-------------------- -// Op2 := GetOperandPrec(Opr1.prec); //toma operando con precedencia - Op2 := GetExpression(Opr1.prec); //toma operando con precedencia - if HayError then exit; - //prepara siguiente operación - Oper(Op1, opr1, Op2); //evalua resultado en "res" - Op1 := res; - if HayError then exit; - cIn.SkipWhites; - opr1 := GetOperator(Op1); {lo toma ahora con el tipo de la evaluación Op1 (opr1) Op2 - porque puede que Op1 (opr1) Op2, haya cambiado de tipo} - end; //hasta que ya no siga un operador - Result := Op1; //aquí debe haber quedado el resultado -end; -procedure TCompilerBase.GetExpressionE(const prec: Integer; - posExpres: TPosExpres); -{Se usa para compilar expresiones completas, no subexpresiones. -Toma una expresión del contexto de entrada y devuelve el resultado em "res". -"isParam" indica que la expresión evaluada es el parámetro de una función.} -begin - Inc(ExprLevel); //cuenta el anidamiento - {$IFDEF LogExpres} LogExpLevel('>Inic.expr'); {$ENDIF} - if OnExprStart<>nil then OnExprStart; //llama a evento - res := GetExpression(prec); - if HayError then exit; - if OnExprEnd<>nil then OnExprEnd(posExpres); //llama al evento de salida - {$IFDEF LogExpres} LogExpLevel('>Fin.expr'); {$ENDIF} - Dec(ExprLevel); - {$IFDEF LogExpres} - if ExprLevel = 0 then debugln(''); - {$ENDIF} -end; -procedure TCompilerBase.LoadToRT(Op: TOperand; modReturn: boolean = false); -{Carga un operando a los Registros de Trabajo (RT). -El parámetrto "modReturn", indica que se quiere generar un RETURN, dejando en ls RT -el valor de la expresión.} -begin - if Op.Typ.OnLoadToRT=nil then begin - //No implementado - GenError('Not implemented.'); - end else begin - Op.Typ.OnLoadToRT(@Op, modReturn); - end; -end; -//Manejo de mensjes, errores y advertencias -procedure TCompilerBase.ClearError; -{Limpia la bandera de errores. Tomar en cuenta que solo se debe usar para iniciar el -procesamiento de errores. Limpiar errores en medio de la compilación, podría hacer que -se pierda el rastro de errores anteriores, y que inclusive, la compilación termine sin -error, aún cuando haya generado errores intermedios. -Como norma, se podría decir que solo se debe usar, después de haber proecsado un posible -error anterior.} -begin - HayError := false; -end; -procedure TCompilerBase.GenInfo(msg: string); -begin - if OnInfo<>nil then OnInfo(msg); -end; -procedure TCompilerBase.GenWarn(msg: string; fil: String; row, col: integer); -{Genera un mensaje de advertencia en la posición indicada.} -begin - if OnWarning<>nil then OnWarning(msg, fil, row, col); -end; -procedure TCompilerBase.GenWarn(msg: string; const Args: array of const; - fil: String; row, col: integer); -begin - GenWarn(Format(msg, Args), fil, row, col); -end; -procedure TCompilerBase.GenWarn(msg: string); -{Genera un mensaje de Advertencia, en la posición actual del contexto. } -begin - if (cIn = nil) or (cIn.curCon = nil) then begin - GenWarn(msg, '', -1, -1); - end else begin - GenWarn(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); - end; -end; -procedure TCompilerBase.GenWarn(msg: string; const Args: array of const); -{Genera un mensaje de Advertencia, en la posición actual del contexto. } -begin - GenWarn(Format(msg, Args)); -end; -procedure TCompilerBase.GenWarnPos(msg: string; const Args: array of const; - srcPos: TSrcPos); -begin - GenWarn(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); -end; -//Rutinas de generación de error -procedure TCompilerBase.GenError(msg: string; fil: String; row, col: integer); -{Genera un mensaje de error en la posición indicada.} -begin - //Protección - if cIn.curCon = nil then begin - HayError := true; - exit; - end; - if cIn.curCon.FixErrPos then begin - //El contexto actual, tiene configurado uan posición fija para los errores - msg := cIn.curCon.PreErrorMsg + msg; //completa mensaje - if OnError<>nil then OnError(msg, cIn.curCon.ErrPosition.fil, - cIn.curCon.ErrPosition.row, - cIn.curCon.ErrPosition.col); - - end else begin - if OnError<>nil then OnError(msg, fil, row, col); - end; - HayError := true; -end; -procedure TCompilerBase.GenError(msg: String; const Args: array of const; - fil: String; row, col: integer); -{Versión con parámetros de GenError.} -begin - GenError(Format(msg, Args), fil, row, col); -end; -procedure TCompilerBase.GenError(msg: string); -{Función de acceso rápido para Perr.GenError(). Pasa como posición a la posición -del contexto actual. Realiza la traducción del mensaje también.} -begin - if (cIn = nil) or (cIn.curCon = nil) then begin - GenError(msg, '', -1, -1); - end else begin - GenError(msg, cIn.curCon.arc, cIn.curCon.row, cIn.curCon.col); - end; -end; -procedure TCompilerBase.GenError(msg: String; const Args: array of const); -{Genera un mensaje de error eb la posición actual del contexto.} -begin - GenError(Format(msg, Args)); -end; -procedure TCompilerBase.GenErrorPos(msg: String; const Args: array of const; - srcPos: TSrcPos); -{Genera error en una posición específica del código} -begin - GenError(Format(msg, Args), srcPos.fil, srcPos.row, srcPos.col); -end; - -//Inicialización -constructor TCompilerBase.Create; -begin - ClearError; //inicia motor de errores - //Crea arbol de elementos y listas - TreeElems := TXpTreeElements.Create; - TreeDirec := TXpTreeElements.Create; - listFunSys := TxpEleFuns.Create(true); - listTypSys := TxpEleTypes.Create(true); - //inicia la sintaxis - xLex := TSynFacilSyn.Create(nil); //crea lexer - - cIn := TContexts.Create(xLex); //Crea lista de Contextos - ejecProg := false; - //Actualiza las referencias a los tipos de tokens existentes en SynFacilSyn - tnEol := xLex.tnEol; - tnSymbol := xLex.tnSymbol; - tnSpace := xLex.tnSpace; - tnIdentif := xLex.tnIdentif; - tnNumber := xLex.tnNumber; - tnKeyword := xLex.tnKeyword; - tnString := xLex.tnString; - tnComment := xLex.tnComment; - //Atributos - tkEol := xLex.tkEol; - tkSymbol := xLex.tkSymbol; - tkSpace := xLex.tkSpace; - tkIdentif := xLex.tkIdentif; - tkNumber := xLex.tkNumber; - tkKeyword := xLex.tkKeyword; - tkString := xLex.tkString; - tkComment := xLex.tkComment; - //Crea nuevos tipos necesarios para el Analizador Sintáctico - tnOperator := xLex.NewTokType('Operator', tkOperator); //necesario para analizar expresiones - tnBoolean := xLex.NewTokType('Boolean', tkBoolean); //constantes booleanas - tnSysFunct := xLex.NewTokType('SysFunct', tkSysFunct); //funciones del sistema - tnType := xLex.NewTokType('Types', tkType); //tipos de datos -end; -destructor TCompilerBase.Destroy; -begin - cIn.Destroy; //Limpia lista de Contextos - xLex.Free; - listTypSys.Destroy; - listFunSys.Destroy; - TreeDirec.Destroy; - TreeElems.Destroy; - inherited Destroy; -end; - -{ TOperand } -function TOperand.VarName: string; inline; -begin - Result := rVar.name; -end; -function TOperand.offs: TVarOffs; -{Dirección de memoria, cuando es de tipo Char, Byte, Bit o Boolean.} -begin - if FSto = stVarRefVar then begin - //Caso especial, de stVarRefVar -// if FVar = nil then -// Result := FVarOff.offs -// else - Result := FVar.offs; - end else begin - //Para todos los otros casos, esto debe funcionar, según la docuemntación. - Result := FVar.offs; - end; -end; -function TOperand.Boffs: TVarOffs; -begin - Result := rVar.adrBit.offs; -end; -function TOperand.Loffs: TVarOffs; -{Dirección de memoria baja, cuando es de tipo Word.} -begin - Result := rVar.adrByte0.offs; -end; -function TOperand.Hoffs: TVarOffs; -begin - Result := rVar.adrByte1.offs; -end; -function TOperand.Eoffs: TVarOffs; -begin - Result := rVar.adrByte2.offs; -end; -function TOperand.Uoffs: TVarOffs; -begin - Result := rVar.adrByte3.offs; -end; -function TOperand.bank: TVarBank; -{Banco, del operando. Se supone que si se pide el banoo es porque es stVariab, o también -puede se el caso stVarRefVar. } -begin - if FSto = stVarRefVar then begin - //Caso especial, de stVarRefVar -// if FVar = nil then -// Result := FVarOff.bank -// else - Result := FVar.bank; - end else begin - //Para todos los otros casos, esto debe funcionar, según la docuemntación. - Result := FVar.bank; - end; -end; -function TOperand.addr: TVarOffs; -begin - Result := FVar.addr; -end; -function TOperand.Lbank: TVarBank; -{Banco del byte bajo, cuando es de tipo Word.} -begin - Result := rVar.adrByte0.bank; -end; -function TOperand.bit: byte; -begin - //Si se pide el bit, se asume que es de tipo "Bit". - Result := rVar.adrBit.bit; -end; -procedure TOperand.Invert; -begin - if Sto = stConst then begin - //Para constantes, no se puede negar la lógica, sino el valor - valBool := not valBool; - end else begin - //Variables y expresiones, sí. - Inverted := not Inverted; //invierte lógica - end; -end; -function TOperand.aWord: word; inline; -begin - Result := word(valInt); -end; -function TOperand.LByte: byte; inline; -begin - Result := LO(word(valInt)); -end; -function TOperand.HByte: byte; inline; -begin - Result := HI(word(valInt)); -end; -function TOperand.EByte: byte; -begin - Result := (valInt >> 16) and $FF; -end; - -function TOperand.UByte: byte; -begin - Result := (valInt >> 24) and $FF; -end; -function TOperand.CanBeWord: boolean; -{Indica si el valor constante que contiene, puede ser convertido a un WORD sin pérdida} -begin - Result := (valInt>=0) and (valInt<=$ffff); -end; -function TOperand.CanBeByte: boolean; -{Indica si el valor constante que contiene, puede ser convertido a un BYTE sin pérdida} -begin - Result := (valInt>=0) and (valInt<=$ff); -end; -procedure TOperand.CopyConsValTo(var c: TxpEleCon); -begin - //hace una copia selectiva por velocidad, de acuerdo al grupo - case Typ.grp of - t_boolean : c.val.ValBool:=Fval.ValBool; - t_integer, - t_uinteger: c.val.ValInt := Fval.ValInt; - t_float : c.val.ValFloat:= Fval.ValFloat; - t_string : c.val.ValStr := Fval.ValStr; - else - MsgErr('Internal PicPas error'); - {En teoría, cualquier valor constante que pueda contener TOperand, debería poder - transferirse a una constante, porque usan el mismo contenedor, así que si pasa esto - solo puede ser que faltó implementar.} - end; -end; -procedure TOperand.GetConsValFrom(const c: TxpEleCon); -{Copia valores constante desde una constante. Primero TOperand, debería tener inicializado - correctamente su campo "catTyp". } -begin - case Typ.grp of - t_boolean : Fval.ValBool := c.val.ValBool; - t_integer, - t_uinteger: Fval.ValInt := c.val.ValInt; - t_float : Fval.ValFloat := c.val.ValFloat; - t_string : Fval.ValStr := c.val.ValStr; - else - MsgErr('Internal PicPas error'); - //faltó implementar. - end; -end; -function TOperand.GetTyp: TxpEleType; -{Devuelve el tipo de la variable referenciada. } -begin - if Sto = stVariab then begin - Result := FVar.typ; - end else if Sto = stVarRefVar then begin - //Variable referenciada por variables. - //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sVarRef" - Result := FVar.typ.refType; //¿No debería ser solo FVar.typ? - end else if Sto = stVarRefExp then begin - //Variable referenciada por expresión. - //Se implementa de acuerdo a la Doc. Técnica - Sección "Operandos sExpRef" - if FVar = nil then begin - //Debe ser puntero. - Result := FTyp.refType; - end else begin - //Debe ser arreglo - Result := FVar.typ; - end; - end else begin - //Constante o expresión - Result := FTyp; - end; -end; -procedure TOperand.SetvalBool(AValue: boolean); -begin - Fval.ValBool:=AValue; -end; -procedure TOperand.SetvalFloat(AValue: extended); -begin -// if FvalFloat=AValue then Exit; - Fval.ValFloat:=AValue; -end; -procedure TOperand.SetvalInt(AValue: Int64); -begin -// if FvalInt=AValue then Exit; - Fval.ValInt:=AValue; -end; -procedure TOperand.SetAsConst(xtyp: TxpEleType); -{Fija el almacenamiento del Operando como Constante, del tipo indicado} -begin - FSto := stConst; - FTyp := xtyp; - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsVariab(xvar: TxpEleVar); -{Fija el almacenamiento del Operando como Variable, del tipo de la variable} -begin - FSto := stVariab; - FVar := xvar; //No hace falta actualziar el tipo - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsExpres(xtyp: TxpEleType); -{Fija el almacenamiento del Operando como Expresión, del tipo indicado} -begin - FSto := stExpres; - FTyp := xtyp; - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsVarRef(VarBase: TxpEleVar); -{Fija el operando como de tipo stVarRefVar.} -begin - FSto := stVarRefVar; - FVar := VarBase; - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsVarRef(VarBase: TxpEleVar; ValOff: integer); -{Versión de SetAsVarRef(), con desplazamiento constante.} -begin - FSto := stVarRefVar; - FVar := VarBase; - Fval.ValInt := ValOff; - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsExpRef(VarBase: TxpEleVar; Etyp: TxpEleType); -begin - FSto := stVarRefExp; - FVar := VarBase; - FTyp := Etyp; - rVarBase := nil; //Inicia a este valor -end; -procedure TOperand.SetAsNull; -{Configura al operando como de tipo Null} -begin - {Se pone como constante, que es el tipo más simple, además se protege, pro si era - variable} - FSto := stConst; - FTyp := typNull; //Este es el tipo NULO -end; -function TOperand.StoOpStr: string; -{Devuelve lmacenamiento como cadena.} -begin - case Sto of - stConst : exit('Constant'); - stVariab, stVarRefVar, stVarRefExp: exit('Variable'); - stExpres: exit('Expression'); - end; -end; -function TOperand.StoOpChr: char; -{Devuelve lmacenamiento como caracter.} -begin - Result := ' '; - case Sto of - stConst : exit('k'); - stVariab: exit('v'); - stExpres: exit('X'); - end; -end; -procedure TOperand.DefineRegister; -begin - //llama al evento de pila - if Typ.OnDefRegister<> nil then Typ.OnDefRegister; -end; -function TOperand.FindOperator(const oper: string): TxpOperator; -//Recibe la cadena de un operador y devuelve una referencia a un objeto Toperator, del -//operando. Si no está definido el operador para este operando, devuelve nullOper. -begin - Result := Typ.FindBinaryOperator(oper); -end; -procedure SetLanguage(lang: string); -begin - case lang of - 'en': begin - dicClear; //it's yet in English - end; - 'es': begin - //Update messages - dicSet('Not implemented.', 'No implementado'); - dicSet('Duplicated identifier: "%s"', 'Identificador duplicado: "%s"'); - dicSet('Undefined type "%s"', 'Tipo "%s" no definido.'); - dicSet('";" expected.', 'Se esperaba ";"'); - dicSet('"%s" expected.', 'Se esperaba "%s"'); - dicSet('Type parameters error on %s', 'Error en tipo de parámetros de %s'); - dicSet('Unknown identifier: %s', 'Identificador desconocido: %s'); - dicSet('Function not implemented: %s', 'Función no implementada: "%s"'); - dicSet('Error in expression. ")" expected.', 'Error en expresión. Se esperaba ")"'); - dicSet('Operand expected.', 'Se esperaba operando.'); - dicSet('Illegal Operation: %s', 'Operación no válida: %s'); - dicSet('Undefined operator: %s for type: %s','No está definido el operador: %s para tipo: %s'); - dicSet('Duplicated function: %s','Función duplicada: %s'); - dicSet('Cannot apply the operator "%s" to type "%s"', 'No se puede aplicar el operador "%s" al tipo "%s"'); - end; - end; -end; - -end. diff --git a/Source/XpresTypesPIC.pas b/Source/XpresTypesPIC.pas index adfbdcdf..f449b829 100644 --- a/Source/XpresTypesPIC.pas +++ b/Source/XpresTypesPIC.pas @@ -3,9 +3,8 @@ ========== Por Tito Hinostroza. -Definiciones básicas para el manejo de elementos que representan a tipos. -Aquí están definidas los objetos claves para el manejo de expresiones: -Los tipos, los operadores y las operaciones +Basic definitions for the manage of elements representing types. +Here are defined objets for the manage of expressions: Types, operands, operations. } unit XpresTypesPIC; {$mode objfpc}{$H+} @@ -33,61 +32,40 @@ TConsValue = record ValFloat: extended; //Para alojar a los valores t_float ValBool : boolean; //Para alojar a los valores t_boolean ValStr : string; //Para alojar a los valores t_string + items : array of TConsValue; //Lista de items cuando sea array + nItems : integer; //Number of items end; - //Almacenamiento de Operando + //Operand storage TStoOperand = ( - stConst =%000, {El operando es una Constante y por lo tanto su valor se almacena - directamente en el operando sin usar memoria del PIC. Incluyendo - expresiones de constantes evaluadas.} - stVariab=%001, {El operando es una Variable simple (atómica), y tampoco ocupa - espacio en la memoria física, sino que solo se guarda su dirección - (y número de bit para el caso de los tipos boolean o bit).} - stExpres=%010, {El operando es una Expresión, por lo general es el resultado de - algún cálculo entre variables y constantes. (incluyendo el resulatdo - de a una función). Se valor está siempre en los RT} - stVarRefVar=%011,{El operando es la referencia a una variable, y esta referencia se - calcula en base a otras variables. No ocupa espacio a memoria, - porque su dirección real, se puede calcular, con parámetros - constantes (dirección, desplazamiento, y número de bit).} - stVarRefExp=%100 {El operando es la referencia a una variable, y esta referencia se - encuentra en los RT. Para obtener la dirección real de la variable - se debe calcular primero la dirección, usando el valor de los RT y - el desplazamiento, y número de bit} + //Without storage + stNull = %1111, //Operand is not stored + //Basic storage + stConst = %000, {Operand is constant and its value is stored directly in the Operand + without use CPU resources. Includes evaluated constant expressions.} + stExpres = %001, {Operand value is stored in RT. Generally is the result of a + expression, or the result of a function call.} + stVariab = %010, {Operand is addressed by a constants address.} + stVarRef = %011, {Operand is addressed by the value of a variable. Doesn't use RT.} +// stVarConRef=%100,{Operand is addressed by the value of a variable plus a constant +// offset. Doesn't use RT.} + stExpRef = %101 {Operand is addressed by the value stored in RT} ); {Almacenamiento combinado para una ROB. Se construye para poder representar dos valores de TStoOperand en una solo valor byte (juntando sus bits), para facilitar el uso de un CASE ... OF} TStoOperandsROB =( - stConst_Const = %000000, - stConst_Variab = %000001, - stConst_Expres = %000010, - stConst_VarRefVar = %000011, - stConst_VarRefExp = %000100, - - stVariab_Const = %001000, - stVariab_Variab = %001001, - stVariab_Expres = %001010, - stVariab_VarRefVar = %001011, - stVariab_VarRefExp = %001100, - - stExpres_Const = %010000, - stExpres_Variab = %010001, - stExpres_Expres = %010010, - stExpres_VarRefVar = %010011, - stExpres_VarRefExp = %010100, - - stVarRefVar_Const = %011000, - stVarRefVar_Variab = %011001, - stVarRefVar_Expres = %011010, - stVarRefVar_VarRefVar = %011011, - stVarRefVar_VarRefExp = %011100, - - stVarRefExp_Const = %100000, - stVarRefExp_Variab = %100001, - stVarRefExp_Expres = %100010, - stVarRefExp_VarRefVar = %100011, - stVarRefExp_VarRefExp = %100100 + stConst_Const = %000000, + stConst_Expres = %000001, + stConst_Variab = %000010, + + stExpres_Const = %001000, + stExpres_Expres = %001001, + stExpres_Variab = %001010, + + stVariab_Const = %010000, + stVariab_Expres = %010001, + stVariab_Variab = %010010 ); @@ -101,16 +79,84 @@ TConsValue = record opkUnaryPost, //operador Unario Post opkBinary //operador Binario ); + +type //Type Methods + {Evento para llamar al código de procesamiento de un campo. "OpPtr" debería ser "TOperand", pero aún no se define "TOperand".} TTypFieldProc = procedure(const OpPtr: pointer) of object; TTypField = class Name : string; //Nombre del campo - proc : TTypFieldProc; //rutina de procesamiento + procGet : TTypFieldProc; //routine to process when reading + procSet : TTypFieldProc; //routine to process when writing end; TTypFields = specialize TFPGObjectList<TTypField>; + +const //Prefixes used to name the anonym type declarations + //Short string are used to don't afect the speed of searchings + PREFIX_ARR = 'arr'; + PREFIX_PTR = 'ptr'; + PREFIX_OBJ = 'obj'; + +type + //Types categories + TxpCatType = ( + tctAtomic, //Tipo básico como (byte, word, char) + tctArray, //Arreglo de algún otro tipo. + tctPointer, //Puntero de otro tipo. + tctObject //Registro de varios campos (OBJECT <tipos> END o podría ser {...} ) + ); + {Types categories define the way a type is structured. + + ==== ATOMIC ==== + We say a type is atomic, when it cannot be expressed as a construction of other type. + For example: CHAR or BYTE types. WORD type should be atomic too. Although a WORD can be + expressed as an OBJECT. Here in P65Pas we define WORD as atomic. + Declaraction for atomic types are: + TYPE + mytype = byte; + mytype2 = char; + mytype3 = mytype; //Because "mytype" is tomic too. + + ==== ARRAY ==== + Array of some other type (atomic or not). + Declaration for array types are: + TYPE + artype = ARRAY[10] OF byte; + otherarray = artype; //Because artype is array + alsoarray = ARRAY OF noAtomicType; + + As an alternative notation we can use is: + TYPE + artype = [10]byte; + + ==== POINTER ==== + Pointer to some other type (atomic or not). + Declaration for pointer types are: + TYPE + ptrtype = POINTER TO byte; + otherptr = ptrtype; //Because ptrtype is pointer + alsoptr = POINTER TO noAtomicType; + + As an alternative notation we can use is: + TYPE + artype = ^byte; + + } + + //Type declaration style. + TTypDeclarStyle = ( + ttdDirect, {Like: + TYPE mytype = byte; + TYPE mytype2 = mytype; //"mytype" could be ARRAY/POINTER/OBJECT + } + ttdDeclar {Like: + TYPE mytype = ARRAY[30] OF char; + TYPE refchar = POINTER TO char; } + ); + type {Estos tipos están relacionados con el hardware, y tal vez deberían estar declarados en otra unidad. Pero se ponen aquí porque son pocos. @@ -161,15 +207,6 @@ TPicRegisterBit = class end; TPicRegisterBit_list = specialize TFPGObjectList<TPicRegisterBit>; //lista de registros - //Categorías de tipos - TxpCatType = ( - tctAtomic, //Tipo básico - tctArray, //Arreglo de otro tipo - tctPointer, //Puntero de otro tipo (Puntero corto, hasta la dirección $FF) - tctRecord //Registro de varios campos - ); - - implementation { TPicRegister } @@ -211,4 +248,4 @@ procedure TPicRegisterBit.Assign(srcReg: TPicRegisterBit); end; end. -//193 + diff --git a/Source/project1.lps b/Source/project1.lps deleted file mode 100644 index f49e22f6..00000000 --- a/Source/project1.lps +++ /dev/null @@ -1,641 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectSession> - <PathDelim Value="\"/> - <Version Value="9"/> - <BuildModes Active="Debug"/> - <Units Count="42"> - <Unit0> - <Filename Value="project1.lpr"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <CursorPos X="11" Y="17"/> - <UsageCount Value="219"/> - </Unit0> - <Unit1> - <Filename Value="FormPrincipal.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmPrincipal"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <IsVisibleTab Value="True"/> - <TopLine Value="406"/> - <CursorPos X="5" Y="408"/> - <FoldState Value=" TL0033 p6,e01 T4706 T5m701]E3mJ0D6 piZjC05513]BYkR044]9aj2031 pjd629[Q5lX0LJ[k5a0331C]S0kd0A T6n201G TMna23011D181G121I p0yO04]B T0n7g2G];gmRZ2D]9Xj8B2C[{15dg2E]9eoCp85 THvQ2D1@"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <TopLine Value="396"/> - <CursorPos X="5" Y="780"/> - <FoldState Value=" TL0034 T5F0}T1 T7HI}Q T8lD2M]F3m30D8 pidjI0n6]9Zk50P5 pkej02911A133A pjYpU038 T6mT0191 p0u1013 TMpO210F1115121F[P4b04]B T0mYe2D piglAXDH]*GlPV4H]Icn0YF7 THuK2D2O"/> - </ExtraEditor1> - <UsageCount Value="219"/> - <Bookmarks Count="1"> - <Item0 X="4" Y="970" ID="6"/> - </Bookmarks> - <Loaded Value="True"/> - </Unit1> - <Unit2> - <Filename Value="Parser.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="1"/> - <TopLine Value="1385"/> - <CursorPos X="23" Y="1401"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <TopLine Value="74"/> - <CursorPos X="24" Y="95"/> - </ExtraEditor1> - <UsageCount Value="200"/> - <Loaded Value="True"/> - </Unit2> - <Unit3> - <Filename Value="FormPICExplorer.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmPICExplorer"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <EditorIndex Value="-1"/> - <CursorPos X="17" Y="9"/> - <UsageCount Value="203"/> - </Unit3> - <Unit4> - <Filename Value="GenCod.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="2"/> - <TopLine Value="5484"/> - <CursorPos Y="5519"/> - <FoldState Value=" TL00AJ piCi;Q623 pF)G246 T4i103 T5i50{o T7i7E{l T8i8425]nXif475 TMlD011T7H6M p0tD810M2@]B-E01021N]BvB610D2A15[441o]J\F35]u31Q[W4R0M11182F1A[=4B0Q0L1M[Q4K210A1165]h T3lA05D piXjB033 pj4jC0{r2 pkLnT0H1]9FkY0H7]bbjK037]I6kI0{h1]lcmZ0s2]96kK0;111]C0sS0C6]KTk504[T4LjS0N4 plJm40{$[v4QnD0X]9kDl]b[94Q62N]jkKnT0{V[a4RmC0l]9ig]!u3 pjHka0;1]!Qn604[94AlG0{26 pjFlM0/[b4Jl80\2[t5V0c]9jMkK0^[!4dkZ0{D3]AflA]u[,5n90I011 T0laN2C]TajTF6F]9ZiYF55 pibMk29]8gi3i5H[~q56KA8]9YRFUC[Y4iaT[z4jJi4o35]9PPa59[Y4iPK4H[94l4F38[z4iBfdB[r5SE36[a56fi8[{X5JR19]-3iKfiE]IdjM-2G[a4jOI381373111]3312[AAK[y4vT-2C[{#5QIB[=49jPR27]9UibR18]9LiY[IB6 piciOEF[I40i0EL9[{=5OT3[96Fb7A]9ZjCI[}J5gjUI3A[{=5FIB7[#kG6d2[961I7B[j7BH pj3n0R5B[{95gR65 pk4iPQ4G[+5OI37[}k57p2]RjEjgIB6[_76CGE[~o52b7C pj1k7Z3C[\4jEt2I[_)58U4E[94iLU3E]R4iYU1D[~(53U2H[_I5Q+5G]RD]a5C[R5YC]RTHnZ2t2 pkMmO4{n1]ACog2F4]afkZ4a3]sEl54M2[}e5X2m3]J0xQ2+1]R5lF2E[s4Hm52{:2]JAn74Q[J42mD2{O[c4ZmS2{Q[A4HnF2{1],jHlc2b]mmaoC2}9]TiYnA2R4]S8pI2c[b4GlC2i2 pkFm12{64 T6:L02O pWi:I01FD"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <TopLine Value="271"/> - <CursorPos X="7" Y="293"/> - </ExtraEditor1> - <UsageCount Value="202"/> - <Bookmarks Count="1"> - <Item0 X="24" Y="4345" ID="5"/> - </Bookmarks> - <Loaded Value="True"/> - </Unit4> - <Unit5> - <Filename Value="GenCodPic.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="4"/> - <TopLine Value="53"/> - <CursorPos Y="314"/> - <FoldState Value=" TL001t piY\g01A pT}J214 T4502 T5806011 T8I29016[f4jY2k4]9ek525 TMr3010E122111]3O2m p0-6210617]BwG410P141R]Dsb050413]F21E]lC11[u6[T4W]g[J53 T3nW0MC[{W5S087]9djD084 pj5jK0T6 piZ]R9[I4fkE069]IbjB077]I3]aF8]IfjO035]I8jN0.G]IYkZ05F]9ajE[96cjI06D[{R5B]I]j9jW0U4 pjDk7033 pkZkg0?A]ISlS082[{j530}B[b4Qnc0I3[{S5K0P3[!5L0F1]t0kH0I THnY2J p0+E2B]NbyC2Y]ek9nL2+3].Mnd4{*[@5od2G5 T0nZ82H]HcqOP3K[{W5fD6J]9XmEt2G[94lUN17[a4iUB71 p9t1O3G[i4k0C2A pkLjHDC8 pjGiBv4[i4giDX2C[-4kEC56[_75BEA5]jgi9DT]aj5ZaK[84CiGYLE]9Bk3Q2H[i4lSB44 T6pY01F pS(]8OV"/> - <ExtraEditorCount Value="2"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <WindowIndex Value="-1"/> - <TopLine Value="870"/> - <CursorPos Y="888"/> - <FoldState Value=" TL00161122 T450]65806011 T8iC2801414 TMqM0]J3mb0MA18 THmd2J T0me8242H T6nK01fZ"/> - </ExtraEditor1> - <ExtraEditor2> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="1243"/> - <CursorPos Y="1317"/> - </ExtraEditor2> - <UsageCount Value="200"/> - <Bookmarks Count="1"> - <Item0 Y="314" ID="1"/> - </Bookmarks> - <Loaded Value="True"/> - </Unit5> - <Unit6> - <Filename Value="XpresParserPIC.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="5"/> - <TopLine Value="893"/> - <CursorPos X="10" Y="922"/> - <FoldState Value=" TL+g412"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="452"/> - <CursorPos Y="485"/> - <FoldState Value=" T0rWR3-"/> - </ExtraEditor1> - <UsageCount Value="200"/> - <Bookmarks Count="2"> - <Item0 X="3" Y="907" ID="2"/> - <Item1 Y="536" ID="3"/> - </Bookmarks> - <Loaded Value="True"/> - </Unit6> - <Unit7> - <Filename Value="FrameSyntaxTree.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraSyntaxTree"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="77"/> - <CursorPos X="34" Y="98"/> - <UsageCount Value="202"/> - </Unit7> - <Unit8> - <Filename Value="Globales.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="7"/> - <CursorPos Y="168"/> - <FoldState Value=" TL0022 T4601 T59033 TMW070A]G3i80h3 piejA2]P0iGl2I]GXjgf3]tHiO2Q]f6jC021}"/> - <UsageCount Value="202"/> - </Unit8> - <Unit9> - <Filename Value="XpresElementsPIC.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="6"/> - <TopLine Value="139"/> - <CursorPos Y="158"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <TopLine Value="1442"/> - <CursorPos X="58" Y="1448"/> - </ExtraEditor1> - <UsageCount Value="211"/> - <Bookmarks Count="1"> - <Item0 Y="601" ID="4"/> - </Bookmarks> - <Loaded Value="True"/> - </Unit9> - <Unit10> - <Filename Value="FormConfig.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="Config"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <EditorIndex Value="-1"/> - <TopLine Value="425"/> - <CursorPos Y="445"/> - <UsageCount Value="200"/> - </Unit10> - <Unit11> - <Filename Value="PicPasProject.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="26"/> - <CursorPos Y="52"/> - <UsageCount Value="204"/> - </Unit11> - <Unit12> - <Filename Value="FrameEditView.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraEditView"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="1065"/> - <CursorPos X="10" Y="1093"/> - <FoldState Value=" T4405 T5lC051 T7DC32 T8E416131]BLJ213 TMnH01231A]b3lQ056 pibj8084 pjPiJ2[e6Hlc26]a6m601X T0mKcEL]iZl3B4E]9XlZW1H[-4nBMCF2G25241"/> - <UsageCount Value="200"/> - </Unit12> - <Unit13> - <Filename Value="FrameMessagesWin.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraMessagesWin"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="86"/> - <CursorPos X="29" Y="176"/> - <FoldState Value=" T7CK6 T8G21 T5j9052 TMkW020[I43jW0m1172A T6jY02B T0jdS6B piamZD3H TLkS01]jHpU4Di"/> - <UsageCount Value="200"/> - </Unit13> - <Unit14> - <Filename Value="FormElemProperty.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmElemProperty"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <EditorIndex Value="-1"/> - <TopLine Value="97"/> - <CursorPos Y="120"/> - <UsageCount Value="201"/> - </Unit14> - <Unit15> - <Filename Value="FrameArcExplor.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmArcExplor"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="547"/> - <CursorPos X="47" Y="569"/> - <FoldState Value=" T4i102 T7iAG7 T8iB25 TMnL21 TLjQ07]83l004416 T0o9*t]l6lI01F THqX492I"/> - <UsageCount Value="200"/> - </Unit15> - <Unit16> - <Filename Value="FrameCfgSyntax.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraCfgSyntax"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="551"/> - <CursorPos X="5" Y="577"/> - <FoldState Value=" TL00601224 T7iWDF T8iX25311 T3k92P023351A21[I46lX[944]43 T0lcV20E1]E2[U4Mp421P"/> - <UsageCount Value="210"/> - </Unit16> - <Unit17> - <Filename Value="FrameCfgSynEdit.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraCfgSynEdit"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="162"/> - <CursorPos Y="199"/> - <FoldState Value=" TL005 T8iS23 TMia01011 T3jc08]P0lNC2j"/> - <UsageCount Value="200"/> - </Unit17> - <Unit18> - <Filename Value="CodeTools.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="74"/> - <CursorPos X="20" Y="90"/> - <UsageCount Value="201"/> - </Unit18> - <Unit19> - <Filename Value="ParserAsm.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="3"/> - <TopLine Value="533"/> - <CursorPos X="24" Y="551"/> - <UsageCount Value="200"/> - <Loaded Value="True"/> - </Unit19> - <Unit20> - <Filename Value="ParserDirec.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="972"/> - <CursorPos Y="988"/> - <UsageCount Value="200"/> - </Unit20> - <Unit21> - <Filename Value="FrameCfgExtTool.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraCfgExtTool"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="66"/> - <CursorPos X="27" Y="70"/> - <FoldState Value=" T4303 TMif211 T7BG9 T8C27]L3iS0A11512[44 T6iT01014 T0lRY2,"/> - <UsageCount Value="200"/> - </Unit21> - <Unit22> - <Filename Value="FormDebugger.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmDebugger"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <WindowIndex Value="1"/> - <TopLine Value="221"/> - <CursorPos X="5" Y="472"/> - <FoldState Value=" T580{51 T7AH{2 T8iW2E]F3jF0B115 pialf077 pjJjY0U T6jG019 T0jLI19]Xei6tFI]9YmSXD3 TMlR070C1413]$LqS271z"/> - <UsageCount Value="202"/> - <Loaded Value="True"/> - </Unit22> - <Unit23> - <Filename Value="FrameRamExplorer.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraRamExplorer"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="267"/> - <CursorPos X="50" Y="289"/> - <UsageCount Value="200"/> - </Unit23> - <Unit24> - <Filename Value="FormRAMExplorer.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="frmRAMExplorer"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Form"/> - <EditorIndex Value="-1"/> - <TopLine Value="24"/> - <CursorPos X="6" Y="39"/> - <UsageCount Value="200"/> - </Unit24> - <Unit25> - <Filename Value="FrameRomExplorer.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraRomExplorer"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="151"/> - <CursorPos X="34" Y="160"/> - <FoldState Value=" T3e0S032s"/> - <UsageCount Value="200"/> - </Unit25> - <Unit26> - <Filename Value="FramePicRegisters.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraPicRegisters"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="165"/> - <CursorPos X="15" Y="72"/> - <UsageCount Value="201"/> - </Unit26> - <Unit27> - <Filename Value="FrameRegWatcher.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraRegWatcher"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <EditorIndex Value="-1"/> - <TopLine Value="214"/> - <CursorPos X="36" Y="246"/> - <FoldState Value=" T5i304 T3i80D3 pj0jH05361 T6iA01]R0iGb3A piaiKX56q"/> - <UsageCount Value="211"/> - </Unit27> - <Unit28> - <Filename Value="FramePICDiagram.pas"/> - <IsPartOfProject Value="True"/> - <ComponentName Value="fraPICDiagram"/> - <HasResources Value="True"/> - <ResourceBaseClass Value="Frame"/> - <IsVisibleTab Value="True"/> - <EditorIndex Value="1"/> - <WindowIndex Value="1"/> - <TopLine Value="176"/> - <CursorPos X="25" Y="262"/> - <FoldState Value=" T4303 T5iU04 T7CFA1 T8D2431]93iZ0C2 piXj50563]Z0icS8E[J4kRm8]H6j60342"/> - <UsageCount Value="200"/> - <Loaded Value="True"/> - <LoadedDesigner Value="True"/> - </Unit28> - <Unit29> - <Filename Value="XpresTypesPIC.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="174"/> - <CursorPos X="9" Y="201"/> - <UsageCount Value="91"/> - </Unit29> - <Unit30> - <Filename Value="..\..\_Librerias\PicUtils 1.1\Pic16Utils.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="77"/> - <CursorPos X="5" Y="276"/> - <FoldState Value=" TL00EH T4J01 T5L042 pjLjS0c01]IMjd010M12]C7j3IH3 T8j427A piZkU2B[d5Ck7KG T3of08[Q4fjV0G9]9djQ0A7]9gjI03]Ij0jF0AE THp1248 T0pAP2L]YXoTB[95YnGB4B[94i7B4H]9ejKm4E3H T6r202XQ"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="434"/> - <CursorPos X="44" Y="448"/> - <FoldState Value=" TL00EQ p0ih401D T4J01 T5L042 pjMjT0c1 pkVlS05 TMje010M121?[q4i0610311]o7j3II4 T8j427A piakV2B2 TCk8KG T3p1088]v9]SXmP0C7[94jB]M]9Z]9AF]9YjH0J1 plIle0{03 pparZ0M5 pjWkJ0R[945jc0K6]9ckM0@2[;4kK0kA pkTk32t4 THp424]HiYu52}D3]jUnc2_]j0u2255 T0pDP27132O]dXuFB49 piai2H2I[{v53D4J[{B5JL1[I5iM89I]?3i[I4[j5UV9G[I5WN3[94FjQV56[j5bt1B4K]KNn7U3C[}\5cT39 pieiZT3[R4Bm4b22 T6r502aP"/> - </ExtraEditor1> - <UsageCount Value="27"/> - </Unit30> - <Unit31> - <Filename Value="..\..\_Librerias\PicUtils 1.1\Pic16Devices.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="10"/> - <CursorPos X="21" Y="27"/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <WindowIndex Value="-1"/> - <CursorPos X="27" Y="18"/> - </ExtraEditor1> - <UsageCount Value="79"/> - </Unit31> - <Unit32> - <Filename Value="..\..\_Librerias\PicUtils 1.2\Pic16Utils.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="1063"/> - <CursorPos X="24" Y="1078"/> - <FoldState Value=" TL00EG p0=902L T4J01 T5L040121]BMq70A]W'G61031[J47j3IJ3 T8j4277[d6CjeKH T3ob08A[J428 pidnV04C]9Xj804913 ppaye0M5 pj5jY093[95I0B6]92jK0G3]lbjE0@2]9ZkK0k41]lk3k42t0].THoe24512]g0t96L111 poe+T2D2 T0p6P2O1E]^Ct4H2I]/Yj3D45JH[B4mQL9[94XiH95[94aiOL[l50iHN3G]Icj194D[j4kVQVF]9dj2i4J]aJkYU3[}h6cT39]9eiZT371B31 T6ta0351 p0u001S("/> - <ExtraEditorCount Value="1"/> - <ExtraEditor1> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="178"/> - <CursorPos X="13" Y="187"/> - <FoldState Value=" TL00E012111141713 p0sb01318]AvF027]8wL01756 T4J01 T5L042 pjBjI0d01]IMq80A]f'F61031[J47j3IJ3 T8j427713[K4CjeKH T3oc08A28].9mJ039]90jF0AF piYjH0J011]KYoV082 ppSpd0M5]I5jY093[95I0B6]92jK0G3]ubjE0@2]9ZkK0kA pkUk42t4 THofB40191 p0t8GL[{C6FnHD_2]JvCGD3 T0p7P271N],XsBB4A]9Yi1H2D122E]n5lEZ2M[94k0L1H]VdiFL2H[n4iQ93F piaiK8G[I4fj494D[.4kVQVF[j4j2i4J]+JkYU3C[s4jcT39]9eiZT3K]RCm3b22 T6tb03Z TDihU2f2 pj2lU2]HEiiQ223^"/> - </ExtraEditor1> - <UsageCount Value="76"/> - </Unit32> - <Unit33> - <Filename Value="..\..\_Librerias\PicUtils-1.3\Pic16Utils.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="2272"/> - <CursorPos X="27" Y="2291"/> - <FoldState Value=" T4J01 T5L0422]9Mq90A T7j3IJ3 T8j427B1]P3od08C pj7k10A017 T0p8P2Q piZraB7[S41iAH2I]IYj3D4D[95An1J]9bjXL1E[94i7L1J]j4iPL1H[I5OW9F]9eiYN3[s4djBV58]9cjKt1N]9Xk5REC[94jat3C[I50NX[+4ZlT)3813 T6tc03YQ"/> - <UsageCount Value="10"/> - </Unit33> - <Unit34> - <Filename Value="..\..\_Librerias\MisUtils-0.6\MisUtils.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="419"/> - <CursorPos X="42" Y="435"/> - <UsageCount Value="0"/> - </Unit34> - <Unit35> - <Filename Value="..\..\_Librerias\ogEditGraf 1.6b\ogDefObjGraf.pas"/> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="211"/> - <CursorPos X="15" Y="226"/> - <UsageCount Value="2"/> - </Unit35> - <Unit36> - <Filename Value="..\..\_Librerias\ogEditGraf 1.6b\ogMotEdicion.pas"/> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="41"/> - <CursorPos X="30" Y="60"/> - <UsageCount Value="2"/> - </Unit36> - <Unit37> - <Filename Value="c:\lazarus32\lcl\lcltype.pp"/> - <UnitName Value="LCLType"/> - <EditorIndex Value="-1"/> - <TopLine Value="382"/> - <CursorPos X="3" Y="401"/> - <UsageCount Value="2"/> - </Unit37> - <Unit38> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <EditorIndex Value="3"/> - <WindowIndex Value="1"/> - <TopLine Value="305"/> - <CursorPos X="26" Y="323"/> - <UsageCount Value="50"/> - <Loaded Value="True"/> - </Unit38> - <Unit39> - <Filename Value="c:\lazarus32\lcl\controls.pp"/> - <UnitName Value="Controls"/> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="345"/> - <CursorPos X="47" Y="363"/> - <UsageCount Value="7"/> - </Unit39> - <Unit40> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogDefObjGraf.pas"/> - <EditorIndex Value="2"/> - <WindowIndex Value="1"/> - <TopLine Value="190"/> - <CursorPos X="15" Y="209"/> - <UsageCount Value="25"/> - <Loaded Value="True"/> - </Unit40> - <Unit41> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotGraf2D.pas"/> - <EditorIndex Value="-1"/> - <WindowIndex Value="1"/> - <TopLine Value="59"/> - <CursorPos X="51" Y="75"/> - <UsageCount Value="6"/> - </Unit41> - </Units> - <JumpHistory Count="30" HistoryIndex="29"> - <Position1> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="867" TopLine="849"/> - </Position1> - <Position2> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="870" TopLine="849"/> - </Position2> - <Position3> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="256" Column="31" TopLine="233"/> - </Position3> - <Position4> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="243" TopLine="233"/> - </Position4> - <Position5> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="246" Column="17" TopLine="233"/> - </Position5> - <Position6> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="30" Column="11" TopLine="9"/> - </Position6> - <Position7> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="261" Column="22" TopLine="231"/> - </Position7> - <Position8> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="59" Column="15" TopLine="48"/> - </Position8> - <Position9> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="197" Column="15" TopLine="71"/> - </Position9> - <Position10> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="204" TopLine="78"/> - </Position10> - <Position11> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="213" Column="3" TopLine="194"/> - </Position11> - <Position12> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="211" Column="13" TopLine="194"/> - </Position12> - <Position13> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogDefObjGraf.pas"/> - <Caret Line="776" Column="10" TopLine="755"/> - </Position13> - <Position14> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="270" Column="39" TopLine="255"/> - </Position14> - <Position15> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="237" Column="10" TopLine="203"/> - </Position15> - <Position16> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="61" Column="14" TopLine="44"/> - </Position16> - <Position17> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="320" Column="10" TopLine="298"/> - </Position17> - <Position18> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="59" Column="5" TopLine="42"/> - </Position18> - <Position19> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="40" Column="4" TopLine="23"/> - </Position19> - <Position20> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="59" Column="15" TopLine="31"/> - </Position20> - <Position21> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="320" Column="11" TopLine="293"/> - </Position21> - <Position22> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="61" Column="19" TopLine="42"/> - </Position22> - <Position23> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="320" Column="37" TopLine="292"/> - </Position23> - <Position24> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="60" Column="5" TopLine="44"/> - </Position24> - <Position25> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="61" Column="19" TopLine="44"/> - </Position25> - <Position26> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="320" Column="28" TopLine="294"/> - </Position26> - <Position27> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="60" Column="21" TopLine="44"/> - </Position27> - <Position28> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="61" Column="22" TopLine="44"/> - </Position28> - <Position29> - <Filename Value="..\..\_Librerias\ogEditGraf-1.7\ogMotEdicion.pas"/> - <Caret Line="40" TopLine="23"/> - </Position29> - <Position30> - <Filename Value="FramePICDiagram.pas"/> - <Caret Line="280" Column="48" TopLine="177"/> - </Position30> - </JumpHistory> - </ProjectSession> - <Debugging> - <Watches Count="2"> - <Item1> - <Expression Value="nUsed"/> - </Item1> - <Item2> - <Expression Value="ER_EXPEC_COMMA"/> - </Item2> - </Watches> - </Debugging> -</CONFIG> diff --git a/TestCode/MustFail/output.hex b/TestCode/MustFail/output.hex deleted file mode 100644 index a761e44e..00000000 --- a/TestCode/MustFail/output.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;PIC16F877A diff --git a/TestCode/MustFail/unit1.hex b/TestCode/MustFail/unit1.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustFail/unit1.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustFail/unit_dummy.hex b/TestCode/MustFail/unit_dummy.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustFail/unit_dummy.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/Test5_BankConditions.hex b/TestCode/MustPass/Test5_BankConditions.hex deleted file mode 100644 index 422e1d1c..00000000 --- a/TestCode/MustPass/Test5_BankConditions.hex +++ /dev/null @@ -1,25 +0,0 @@ -:020000040000FA -:100000000128A00102308316A0008312A001A001E4 -:10001000A001A00102308316A0008312A0010130CC -:10002000A000A001DE308316A00083120603031D8A -:100030001B280530860002300602031D22280530E9 -:100040008316860083120603031D292803308600C9 -:100050002B28043086000603031D32280330831644 -:100060008600352804308316860083120603031D9C -:100070003C28033086003F28043083168600831214 -:100080000603031D4628033086004F28023006026F -:10009000031D4D28043086004F28053086000603D6 -:1000A000031D56280330831686005F28023006029F -:1000B000031D5D28043086005F280530860083120A -:1000C0000603031D6728043083168600712802305A -:1000D00083120602031D6F28033086007128053045 -:1000E000860083120603031D7828033086008228C9 -:1000F00002300602031D8028043083168600822801 -:100100000530860083120603031D8928033086000C -:10011000932802300602031D90280530860093289C -:100120000430831686008312A001A00101308316DB -:10013000A00083129628A0018608031DA428013080 -:100140008316A00083129C28A00183168608031D35 -:0C015000AD2801308312A000A528630038 -:00000001FF -;PIC16C63 diff --git a/TestCode/MustPass/Test5_Banks.hex b/TestCode/MustPass/Test5_Banks.hex deleted file mode 100644 index ea8da3f6..00000000 --- a/TestCode/MustPass/Test5_Banks.hex +++ /dev/null @@ -1,32 +0,0 @@ -:020000040000FA -:1000000032288312A001080001308316A000831259 -:10001000A001080001308316A0008312A008031D70 -:1000200012280800A00108008316A0010800013072 -:100030008312A0008316A001080001308312A000E3 -:100040008316A008031D25280800A0010800013020 -:100050008312A0008316A008031D2F280800831216 -:10006000A0010800A00102308316A0008312A001A5 -:10007000A001A001A00102308316A0008312A001FC -:100080000130A000A001DE308316A0008312060319 -:10009000031D4C280530860002300602031D53283C -:1000A00005308316860083120603031D5A28033089 -:1000B00086005C28043086000603031D6328033095 -:1000C0008316860066280430831686008312060392 -:1000D000031D6D28033086007028043083168600C7 -:1000E00083120603031D7728033086008028023020 -:1000F0000602031D7E280430860080280530860015 -:100100000603031D872803308316860090280230DB -:100110000602031D8E2804308600902805308600D4 -:1001200083120603031D9828043083168600A22834 -:10013000023083120602031DA02803308600A22885 -:100140000530860083120603031DA92803308600AC -:10015000B32802300602031DB1280430831686003E -:10016000B3280530860083120603031DBA28033026 -:100170008600C42802300602031DC128053086000F -:10018000C4280430831686008312A001A001013028 -:100190008316A0008312C728A0018608031DD52856 -:1001A00001308316A0008312CD28A0018316860893 -:1001B000031DDE2801308312A000D6280120042070 -:0C01C0000A20142017201D2027206300B7 -:00000001FF -;PIC16C63 diff --git a/TestCode/MustPass/a_progam1.hex b/TestCode/MustPass/a_progam1.hex deleted file mode 100644 index 80b8047d..00000000 --- a/TestCode/MustPass/a_progam1.hex +++ /dev/null @@ -1,4 +0,0 @@ -:020000040000FA -:040000000128630070 -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/a_progam2.hex b/TestCode/MustPass/a_progam2.hex deleted file mode 100644 index 80b8047d..00000000 --- a/TestCode/MustPass/a_progam2.hex +++ /dev/null @@ -1,4 +0,0 @@ -:020000040000FA -:040000000128630070 -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/a_progam3.hex b/TestCode/MustPass/a_progam3.hex deleted file mode 100644 index 80b8047d..00000000 --- a/TestCode/MustPass/a_progam3.hex +++ /dev/null @@ -1,4 +0,0 @@ -:020000040000FA -:040000000128630070 -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/b_unit1.hex b/TestCode/MustPass/b_unit1.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustPass/b_unit1.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/b_unit2.hex b/TestCode/MustPass/b_unit2.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustPass/b_unit2.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/b_unit3.hex b/TestCode/MustPass/b_unit3.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustPass/b_unit3.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/b_unit4.hex b/TestCode/MustPass/b_unit4.hex deleted file mode 100644 index 56cbe951..00000000 --- a/TestCode/MustPass/b_unit4.hex +++ /dev/null @@ -1,3 +0,0 @@ -:020000040000FA -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/conditional1.hex b/TestCode/MustPass/conditional1.hex deleted file mode 100644 index 5a25d62b..00000000 --- a/TestCode/MustPass/conditional1.hex +++ /dev/null @@ -1,10 +0,0 @@ -:020000040000FA -:1000000001280C1C03280C1C05280C140C100C1CBB -:100010000B280C140C100C1C0F280C140C100C1CAE -:10002000122812280C1C152815280C140C100C1C56 -:100030001C280C140C101E280C140C100C1C23284B -:100040000C140C1025280C140C100C1C29280C1056 -:100050002B280C140C100C1C2F280C1435280C1CED -:0C00600033280C1035280C140C10630021 -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/conditional2.hex b/TestCode/MustPass/conditional2.hex deleted file mode 100644 index 55bbad17..00000000 --- a/TestCode/MustPass/conditional2.hex +++ /dev/null @@ -1,7 +0,0 @@ -:020000040000FA -:1000000001280C100C1C05280C100C1C08280C10C6 -:100010000C140C100C1C0E280C140C100C1C1228A8 -:100020000C140C100C100C1C17280C1018280C1099 -:0200300063006B -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/directives.hex b/TestCode/MustPass/directives.hex deleted file mode 100644 index 822523dd..00000000 --- a/TestCode/MustPass/directives.hex +++ /dev/null @@ -1,4 +0,0 @@ -:020000040000FA -:040000000128630070 -:00000001FF -;MIPIC diff --git a/TestCode/MustPass/loops1.hex b/TestCode/MustPass/loops1.hex deleted file mode 100644 index 80b8047d..00000000 --- a/TestCode/MustPass/loops1.hex +++ /dev/null @@ -1,4 +0,0 @@ -:020000040000FA -:040000000128630070 -:00000001FF -;DEFAULT diff --git a/TestCode/MustPass/output.hex b/TestCode/MustPass/output.hex deleted file mode 100644 index ea8da3f6..00000000 --- a/TestCode/MustPass/output.hex +++ /dev/null @@ -1,32 +0,0 @@ -:020000040000FA -:1000000032288312A001080001308316A000831259 -:10001000A001080001308316A0008312A008031D70 -:1000200012280800A00108008316A0010800013072 -:100030008312A0008316A001080001308312A000E3 -:100040008316A008031D25280800A0010800013020 -:100050008312A0008316A008031D2F280800831216 -:10006000A0010800A00102308316A0008312A001A5 -:10007000A001A001A00102308316A0008312A001FC -:100080000130A000A001DE308316A0008312060319 -:10009000031D4C280530860002300602031D53283C -:1000A00005308316860083120603031D5A28033089 -:1000B00086005C28043086000603031D6328033095 -:1000C0008316860066280430831686008312060392 -:1000D000031D6D28033086007028043083168600C7 -:1000E00083120603031D7728033086008028023020 -:1000F0000602031D7E280430860080280530860015 -:100100000603031D872803308316860090280230DB -:100110000602031D8E2804308600902805308600D4 -:1001200083120603031D9828043083168600A22834 -:10013000023083120602031DA02803308600A22885 -:100140000530860083120603031DA92803308600AC -:10015000B32802300602031DB1280430831686003E -:10016000B3280530860083120603031DBA28033026 -:100170008600C42802300602031DC128053086000F -:10018000C4280430831686008312A001A001013028 -:100190008316A0008312C728A0018608031DD52856 -:1001A00001308316A0008312CD28A0018316860893 -:1001B000031DDE2801308312A000D6280120042070 -:0C01C0000A20142017201D2027206300B7 -:00000001FF -;PIC16C63 diff --git a/TestCode/Simul_1/nuevo-0.pas b/TestCode/Simul_1/nuevo-0.pas deleted file mode 100644 index 209fe5b7..00000000 --- a/TestCode/Simul_1/nuevo-0.pas +++ /dev/null @@ -1,12 +0,0 @@ -{$PROCESSOR PIC16F84} -uses PIC16F84A; - -var - a: bit; -// x: word; -begin - a := 1; - delay_ms(1); -// x +1; //¿No genera H? -end. - diff --git a/TestCode/Simul_2/Test5_BankConditions.pas b/TestCode/Simul_2/Test5_BankConditions.pas deleted file mode 100644 index 200acecf..00000000 --- a/TestCode/Simul_2/Test5_BankConditions.pas +++ /dev/null @@ -1,166 +0,0 @@ -{Programa para la verifiación del manejo de bancos RAM, dentro de condicionales.} - -{$PROCESSOR PIC16C63} -{$FREQUENCY 8Mhz} -uses PIC16C63; //Se requiere un MCU con más de un banco -var - a0: byte; //at bank0 - a1: byte absolute $A0; //at bank 1 -begin - // NOTE: PicPas must be configured with optimization activated - // Validation must be done, verifying the messages. - // Correct execution of this code no necessary means the code generation is OK. - - /////////////////////////////////////////////////// - ///// Conditional defined in Compilation Time - /////////////////////////////////////////////////// - - //Simple IF - Case TRUE. - a0 := 0; //Bank 0 - if true then - a1 := 2; //Bank 1. Must include Bank selection - end; - {$MSGBOX 'Is this 1? -> ' + CURRBANK} - - //Simple IF - Case FALSE - a0 := 0; //Bank 0 - if false then - a1 := 2; //Bank 1. Must not generate code. - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Complete IF - Case TRUE - a0 := 0; //come from bank 0 - if true then - a0 := 0; //Bank 0 - else - a1 := 2; //Bank 1 - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Complete IF - Case FALSE - a0 := 0; //come from bank 0 - if false then - a1 := 1; //Bank 1 - else - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - a1 := 2; //Bank 1 - end; - - //Multiple IF - Case TRUE - a0 := 0; //come from bank 0 - if true then - a0 := 1; //Bank 0 - elsif true then - a1 := 2; //Bank 1 - elsif true then - a1 := 2; //Bank 1 - else - a1 := 2; //Bank 1 - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Multiple IF - Case FALSE - a0 := 0; //come from bank 0 - if false then - a0 := 1; //Bank 0 - elsif true then - a1 := 222; //Bank 1 - elsif true then - a0 := 3; //Bank 0 - else - a0 := 4; //Bank 0 - end; - {$MSGBOX 'Is this 1? -> ' + CURRBANK} - - /////////////////////////////////////////////////// - ///// Conditional not defined in Compilation Time - /////////////////////////////////////////////////// - - //Simple IF - Final bank defined. - if PORTB = 1 then //Condition in bank 0 - PORTB := 5; //Block in bank 0 - end; - //Here the CurrBank must be 0 - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Simple IF - Final bank undefined. - if PORTB = 2 then //Condition in bank 0 - TRISB := 5; //Block in bank 1 - end; - //Here the CurrBank must be 255 (undefined) - {$MSGBOX 'Is this 255? -> ' + CURRBANK} - - //Complete IF - Final bank defined. - if PORTB = 1 then - PORTB := 3; //Block in bank 0 - else - PORTB := 4; //Block in bank 0 - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - if PORTB = 1 then - TRISB := 3; //Block in bank 1 - else - TRISB := 4; //Block in bank 1 - end; - {$MSGBOX 'Is this 1? -> ' + CURRBANK} - - //Complete IF - Final bank undefined. - if PORTB = 1 then - PORTB := 3; //Block in bank 0 - else - TRISB := 4; //Block in bank 1 - end; - {$MSGBOX 'Is this 255? -> ' + CURRBANK} - - //Multiple IF - Final bank defined. - if PORTB = 1 then - PORTB := 3; //Block in bank 0 - elsif PORTB = 2 then - PORTB := 4; //Block in bank 0 - else - PORTB := 5; //Block in bank 0 - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Multiple IF - Final bank defined. - if PORTB = 1 then - TRISB := 3; //Block in bank 0 - elsif TRISB = 2 then - TRISB := 4; //Block in bank 0 - else - TRISB := 5; //Block in bank 0 - end; - {$MSGBOX 'Is this 1? -> ' + CURRBANK} - - //Multiple IF - Final bank undefined. - if PORTB = 1 then - TRISB := 4; //Block in bank 1 - elsif PORTB = 2 then - PORTB := 3; //Block in bank 0 - else - PORTB := 5; //Block in bank 0 - end; - {$MSGBOX 'Is this 255? -> ' + CURRBANK} - - //Multiple IF - Final bank undefined. - if PORTB = 1 then - PORTB := 3; //Block in bank 0 - elsif PORTB = 2 then - TRISB := 4; //Block in bank 1 - else - PORTB := 5; //Block in bank 0 - end; - {$MSGBOX 'Is this 255? -> ' + CURRBANK} - - //Multiple IF - Final bank undefined. - if PORTB = 1 then - PORTB := 3; //Block in bank 0 - elsif PORTB = 2 then - PORTB := 5; //Block in bank 0 - else - TRISB := 4; //Block in bank 1 - end; - {$MSGBOX 'Is this 255? -> ' + CURRBANK} -end. diff --git a/TestCode/Simul_2/Test5_BankLoops.pas b/TestCode/Simul_2/Test5_BankLoops.pas deleted file mode 100644 index 8ed1f5a5..00000000 --- a/TestCode/Simul_2/Test5_BankLoops.pas +++ /dev/null @@ -1,50 +0,0 @@ -{Programa para la verifiación del manejo de bancos RAM, dentro de lazos.} - -{$PROCESSOR PIC16C63} -{$FREQUENCY 8Mhz} -uses PIC16C63; //Se requiere un MCU con más de un banco -var - a0: byte; //at bank0 - a1: byte absolute $A0; //at bank 1 -begin - // NOTE: PicPas must be configured with optimization activated - // Validation must be done, verifying the messages. - // Correct execution of this code no necessary means the code generation is OK. - - /////////////////////////////////////////////////// - ///// WHILE defined in Compilation Time - /////////////////////////////////////////////////// - - //WHILE false - a0 := 0; //Bank 0 - while false do - a1 := 1; //Bank 1. Must not generate code. - end; - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //WHILE true - a0 := 0; //Bank 0 - while true do - a1 := 1; //Bank 1. Must not generate code. - end; - //Verify if _BANSEL(0) is included at the endof the WHILE block - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Normal WHILE - a0 := 0; //Bank 0 - while PORTB = 0 do //condition in bank 0 - a1 := 1; //Block in bank 1. - end; - //Verify if CurrBank = 0 at the end of the WHILE (because condition end in bank 0) - {$MSGBOX 'Is this 0? -> ' + CURRBANK} - - //Normal WHILE - a0 := 0; //Bank 0 - while TRISB = 0 do //condition in bank 1 - a0 := 1; //Block in bank 0. - end; - //Verify if CurrBank = 1 at the end of the WHILE (because condition end in bank 1) - {$MSGBOX 'Is this 1? -> ' + CURRBANK} - - -end. diff --git a/TestCode/Simul_3/Test3.DSN b/TestCode/Simul_3/Test3.DSN deleted file mode 100644 index 643cc1d0..00000000 Binary files a/TestCode/Simul_3/Test3.DSN and /dev/null differ diff --git a/TestCode/Simul_3/nuevo-0.pas b/TestCode/Simul_3/nuevo-0.pas deleted file mode 100644 index 99fa9a61..00000000 --- a/TestCode/Simul_3/nuevo-0.pas +++ /dev/null @@ -1,15 +0,0 @@ -{Description of the program.} -program nombre; -type //Tipos punteros - byteptr = ^byte; - wordptr = ^word; -var //Variables para punteros - ptrByte1, ptrByte2: byteptr; - ptrWord1: wordptr; - w: word; -begin - ptrWord1:= @w; - ptrWord1^ := word($FF); -// if x = word($ff) then good else bad end; - -end. diff --git a/TestCode/Simul_3/prueba.pas b/TestCode/Simul_3/prueba.pas deleted file mode 100644 index cc00ebe8..00000000 --- a/TestCode/Simul_3/prueba.pas +++ /dev/null @@ -1,25 +0,0 @@ -{$PROCESSOR PIC16F877A} -{$FREQUENCY 8Mhz} -uses UnitTest, PIC16F877A; -var //simple type declarations - vbyte: byte; - a : dword; -begin - SetAsOutput(pinLed); - pinLed := 0; - - //coConst_Expres -// {$INFO 'Hello'} - a := $FF; - if dword(1) + (a+dword(1)) = dword($101) then - good; - else - bad; - end; - - //coExpres_Const - a := $FF; - if (a+dword(1)) + dword(1) = dword($101) then good else bad end; - (a+dword(1)) + dword(1); -//¿Hay forma de verificar (¿y se cumple siempre?) que Los registros de pila, se están poniendo en "Libre", al final de una expresión? -end. diff --git a/devices10/PIC10F200.pas b/devices10/PIC10F200.pas new file mode 100644 index 00000000..0e1f86ef --- /dev/null +++ b/devices10/PIC10F200.pas @@ -0,0 +1,91 @@ +unit PIC10F200; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F200'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 256} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-006:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO + {$SET_STATE_RAM '010-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/FOSC4 + // Pin 4 : GP1/ICSPCLK + // Pin 5 : GP0/ICSPDAT + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator + {$define _OSC_IntRC = $0FFF} // This is the only option. It is here for backward compatibility + + // WDTE : Watchdog Timer + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin fuction is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC10F202.pas b/devices10/PIC10F202.pas new file mode 100644 index 00000000..96344e2a --- /dev/null +++ b/devices10/PIC10F202.pas @@ -0,0 +1,91 @@ +unit PIC10F202; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F202'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 512} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-006:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO + {$SET_STATE_RAM '008-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/FOSC4 + // Pin 4 : GP1/ICSPCLK + // Pin 5 : GP0/ICSPDAT + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator + {$define _OSC_IntRC = $0FFF} // This is the only option. It is here for backward compatibility + + // WDTE : Watchdog Timer + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin fuction is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC10F204.pas b/devices10/PIC10F204.pas new file mode 100644 index 00000000..c3297528 --- /dev/null +++ b/devices10/PIC10F204.pas @@ -0,0 +1,101 @@ +unit PIC10F204; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F204'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 256} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_CWUF : bit absolute STATUS.6; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + CMCON0 : byte absolute $0007; + CMCON0_CMPOUT : bit absolute CMCON0.7; + CMCON0_nCOUTEN : bit absolute CMCON0.6; + CMCON0_POL : bit absolute CMCON0.5; + CMCON0_nCMPT0CS : bit absolute CMCON0.4; + CMCON0_CMPON : bit absolute CMCON0.3; + CMCON0_CNREF : bit absolute CMCON0.2; + CMCON0_CPREF : bit absolute CMCON0.1; + CMCON0_nCWU : bit absolute CMCON0.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-007:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO, CMCON0 + {$SET_STATE_RAM '010-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/COUT/FOSC4 + // Pin 4 : GP1/ICSPCLK/CIN- + // Pin 5 : GP0/ICSPDAT/CIN+ + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator + {$define _OSC_IntRC = $0FFF} // This is the only option. It is here for backward compatibility + + // WDTE : Watchdog Timer + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin fuction is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC10F206.pas b/devices10/PIC10F206.pas new file mode 100644 index 00000000..29980a95 --- /dev/null +++ b/devices10/PIC10F206.pas @@ -0,0 +1,101 @@ +unit PIC10F206; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F206'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 512} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_CWUF : bit absolute STATUS.6; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + CMCON0 : byte absolute $0007; + CMCON0_CMPOUT : bit absolute CMCON0.7; + CMCON0_nCOUTEN : bit absolute CMCON0.6; + CMCON0_POL : bit absolute CMCON0.5; + CMCON0_nCMPT0CS : bit absolute CMCON0.4; + CMCON0_CMPON : bit absolute CMCON0.3; + CMCON0_CNREF : bit absolute CMCON0.2; + CMCON0_CPREF : bit absolute CMCON0.1; + CMCON0_nCWU : bit absolute CMCON0.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-007:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO, CMCON0 + {$SET_STATE_RAM '008-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/COUT/FOSC4 + // Pin 4 : GP1/ICSPCLK/CIN- + // Pin 5 : GP0/ICSPDAT/CIN+ + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator + {$define _OSC_IntRC = $0FFF} // This is the only option. It is here for backward compatibility + + // WDTE : Watchdog Timer + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin fuction is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC10F220.pas b/devices10/PIC10F220.pas new file mode 100644 index 00000000..1a374edd --- /dev/null +++ b/devices10/PIC10F220.pas @@ -0,0 +1,105 @@ +unit PIC10F220; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F220'} +{$SET PIC_MAXFREQ = 8000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 256} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + ADCON0 : byte absolute $0007; + ADCON0_ANS1 : bit absolute ADCON0.7; + ADCON0_ANS0 : bit absolute ADCON0.6; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $0008; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-008:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO, ADCON0, ADRES + {$SET_STATE_RAM '010-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:CF'} // ADCON0 bits 5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/FOSC4 + // Pin 4 : GP1/AN1/ICSPCLK + // Pin 5 : GP0/AN0/ICSPDAT + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_8MHZ = $0FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $0FFE} // 4 MHz + + // MCPU : Master Clear Pull-up Enable bit + {$define _MCPU_OFF = $0FFF} // Pull-up disabled + {$define _MCPU_ON = $0FFD} // Pull-up enabled + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : GP3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC10F222.pas b/devices10/PIC10F222.pas new file mode 100644 index 00000000..076a11d3 --- /dev/null +++ b/devices10/PIC10F222.pas @@ -0,0 +1,105 @@ +unit PIC10F222; + +// Define hardware +{$SET PIC_MODEL = 'PIC10F222'} +{$SET PIC_MAXFREQ = 8000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 512} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + OSCCAL_FOSC4 : bit absolute OSCCAL.0; + GPIO : byte absolute $0006; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + ADCON0 : byte absolute $0007; + ADCON0_ANS1 : bit absolute ADCON0.7; + ADCON0_ANS0 : bit absolute ADCON0.6; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $0008; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-008:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO, ADCON0, ADRES + {$SET_STATE_RAM '009-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:DF'} // STATUS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // GPIO bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:CF'} // ADCON0 bits 5,4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : NC + // Pin 2 : Vdd + // Pin 3 : GP2/T0CKI/FOSC4 + // Pin 4 : GP1/AN1/ICSPCLK + // Pin 5 : GP0/AN0/ICSPDAT + // Pin 6 : NC + // Pin 7 : Vss + // Pin 8 : GP3/MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-5,1-4,2-3,3-8'} // GPIO + + + // -- Bits Configuration -- + + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_8MHZ = $0FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $0FFE} // 4 MHz + + // MCPU : Master Clear Pull-up Enable bit + {$define _MCPU_OFF = $0FFF} // Pull-up disabled + {$define _MCPU_ON = $0FFD} // Pull-up enabled + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $0FFF} // WDT enabled + {$define _WDTE_OFF = $0FFB} // WDT disabled + + // CP : Code protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : GP3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC12F508.pas b/devices10/PIC12F508.pas new file mode 100644 index 00000000..dbda504d --- /dev/null +++ b/devices10/PIC12F508.pas @@ -0,0 +1,96 @@ +unit PIC12F508; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F508'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 512} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + GPIO : byte absolute $0006; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-006:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO + {$SET_STATE_RAM '007-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:9F'} // STATUS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // GPIO bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/OSC1/CLKIN + // Pin 3 : GP4/OSC2 + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI + // Pin 6 : GP1/ICSPCLK + // Pin 7 : GP0/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator Selection bits + {$define _OSC_ExtRC = $0FFF} // external RC oscillator + {$define _OSC_LP = $0FFC} // LP oscillator + {$define _OSC_XT = $0FFD} // XT oscillator + {$define _OSC_IntRC = $0FFE} // internal RC oscillator + + // WDT : Watchdog Timer Enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : GP3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin function is digital input, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC12F509.pas b/devices10/PIC12F509.pas new file mode 100644 index 00000000..96c757ae --- /dev/null +++ b/devices10/PIC12F509.pas @@ -0,0 +1,104 @@ +unit PIC12F509; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F509'} +{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + GPIO : byte absolute $0006; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-006:SFR:ALLMAPPED'} // Banks 0-1 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO + {$SET_STATE_RAM '007-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:BF'} // STATUS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '004:DF'} // FSR bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // GPIO bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:C0'} // FSR bits 7,6 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/OSC1/CLKIN + // Pin 3 : GP4/OSC2 + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI + // Pin 6 : GP1/ICSPCLK + // Pin 7 : GP0/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator Selection bits + {$define _OSC_ExtRC = $0FFF} // external RC oscillator + {$define _OSC_LP = $0FFC} // LP oscillator + {$define _OSC_XT = $0FFD} // XT oscillator + {$define _OSC_IntRC = $0FFE} // internal RC oscillator + + // WDT : Watchdog Timer Enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : GP3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $0FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin function is digital input, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC12F510.pas b/devices10/PIC12F510.pas new file mode 100644 index 00000000..fbfb49b2 --- /dev/null +++ b/devices10/PIC12F510.pas @@ -0,0 +1,127 @@ +unit PIC12F510; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F510'} +{$SET PIC_MAXFREQ = 8000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_CWUF : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + GPIO : byte absolute $0006; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + CM1CON0 : byte absolute $0007; + CM1CON0_C1OUT : bit absolute CM1CON0.7; + CM1CON0_nC1OUTEN : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.5; + CM1CON0_nC1T0CS : bit absolute CM1CON0.4; + CM1CON0_C1ON : bit absolute CM1CON0.3; + CM1CON0_C1NREF : bit absolute CM1CON0.2; + CM1CON0_C1PREF : bit absolute CM1CON0.1; + CM1CON0_nC1WU : bit absolute CM1CON0.0; + ADCON0 : byte absolute $0008; + ADCON0_ANS1 : bit absolute ADCON0.7; + ADCON0_ANS0 : bit absolute ADCON0.6; + ADCON0_ADCS1 : bit absolute ADCON0.5; + ADCON0_ADCS0 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $0009; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-009:SFR:ALLMAPPED'} // Banks 0-1 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, GPIO, CM1CON0, ADCON0, ADRES + {$SET_STATE_RAM '00A-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '004:DF'} // FSR bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // GPIO bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:C0'} // FSR bits 7,6 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/OSC1/CLKIN + // Pin 3 : GP4/OSC2 + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/AN2/T0CKI/C1OUT + // Pin 6 : GP1/AN1/C1IN-/ICSPCLK + // Pin 7 : GP0/AN0/C1IN+/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // OSC : Oscillator Select + {$define _OSC_ExtRC = $0FFF} // EXTRC with 1.125 ms DRT + {$define _OSC_IntRC = $0FFE} // INTOSC with 1.125 ms DRT + {$define _OSC_XT = $0FFD} // XT oscillator with 18 ms DRT + {$define _OSC_LP = $0FFC} // LP oscillator with 18 ms DRT + + // WDT : Watchdog Timer Enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $0FFF} // GP3/MCLR Functions as MCLR + {$define _MCLRE_OFF = $0FEF} // GP3/MCLR pin functions as GP3, MCLR internally tied to VDD + + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_ON = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_OFF = $0FDF} // 4 MHz INTOSC Speed + +implementation +end. diff --git a/devices10/PIC12F519.pas b/devices10/PIC12F519.pas new file mode 100644 index 00000000..b967fd6b --- /dev/null +++ b/devices10/PIC12F519.pas @@ -0,0 +1,127 @@ +unit PIC12F519; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F519'} +{$SET PIC_MAXFREQ = 8000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_GPWUF : bit absolute STATUS.7; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + GPIO : byte absolute $0006; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + EECON : byte absolute $0021; + EECON_FREE : bit absolute EECON.4; + EECON_WRERR : bit absolute EECON.3; + EECON_WREN : bit absolute EECON.2; + EECON_WR : bit absolute EECON.1; + EECON_RD : bit absolute EECON.0; + EEDATA : byte absolute $0025; + EEADR : byte absolute $0026; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : EECON + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : OSCCAL, GPIO + // Bank 1 : EEDATA, EEADR + {$SET_STATE_RAM '007-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:BF'} // STATUS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '004:DF'} // FSR bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:1F'} // EECON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:3F'} // EEADR bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:C0'} // FSR bits 7,6 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/OSC1/CLKIN + // Pin 3 : GP4/OSC2 + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI + // Pin 6 : GP1/ICSPCLK + // Pin 7 : GP0/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_LP = $0FFC} // LP Osc With 18 ms DRT + {$define _FOSC_XT = $0FFD} // XT Osc With 18 ms DRT + {$define _FOSC_INTRC = $0FFE} // INTRC With 1 ms DRT + {$define _FOSC_EXTRC = $0FFF} // EXTRC With 1 ms DRT + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $0FFF} // Enabled + {$define _WDTE_OFF = $0FFB} // Disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $0FFF} // RB3/MCLR Functions as MCLR + {$define _MCLRE_OFF = $0FEF} // RB3/MCLR Functions as RB3 + + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_8MHz = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_4MHz = $0FDF} // 4 MHz INTOSC Speed + + // CPDF : Code Protection bit - Flash Data Memory + {$define _CPDF_OFF = $0FFF} // Code protection off + {$define _CPDF_ON = $0FBF} // Code protection on + +implementation +end. diff --git a/devices10/PIC16F505.pas b/devices10/PIC16F505.pas new file mode 100644 index 00000000..1988cb89 --- /dev/null +++ b/devices10/PIC16F505.pas @@ -0,0 +1,122 @@ +unit PIC16F505; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F505'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_RBWUF : bit absolute STATUS.7; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + PORTB : byte absolute $0006; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-007:SFR:ALLMAPPED'} // Banks 0-3 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTB, PORTC + {$SET_STATE_RAM '008-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '004:9F'} // FSR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // PORTB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:80'} // FSR bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RB5/OSC1/CLKIN + // Pin 3 : RB4/OSC2/CLKOUT + // Pin 4 : RB3/MCLR/Vpp + // Pin 5 : RC5/T0CKI + // Pin 6 : RC4 + // Pin 7 : RC3 + // Pin 8 : RC2 + // Pin 9 : RC1 + // Pin 10 : RC0 + // Pin 11 : RB2 + // Pin 12 : RB1/ICSPCLK + // Pin 13 : RB0/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTB + {$MAP_RAM_TO_PIN '007:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // OSC : Oscillator Selection bits + {$define _OSC_ExtRC_CLKOUTEN = $0FFF} // External RC oscillator/CLKOUT function on RB4/OSC2/CLKOUT pin + {$define _OSC_ExtRC_RB4EN = $0FFE} // External RC oscillator/RB4 function on RB4/OSC2/CLKOUT pin + {$define _OSC_IntRC_CLKOUTEN = $0FFD} // Internal RC oscillator/CLKOUT function on RB4/OSC2/CLKOUT pin + {$define _OSC_IntRC_RB4EN = $0FFC} // Internal RC oscillator/RB4 function on RB4/OSC2/CLKOUT pin + {$define _OSC_EC = $0FFB} // EC oscillator/RB4 function on RB4/OSC2/CLKOUT pin + {$define _OSC_HS = $0FFA} // HS oscillator + {$define _OSC_XT = $0FF9} // XT oscillator + {$define _OSC_LP = $0FF8} // LP oscillator + + // WDT : Watchdog Timer Enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FF7} // WDT disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FEF} // Code protection on + + // MCLRE : RB3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $0FFF} // RB3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $0FDF} // GP3/MCLR pin function is digital input, MCLR internally tied to VDD + +implementation +end. diff --git a/devices10/PIC16F506.pas b/devices10/PIC16F506.pas new file mode 100644 index 00000000..1bba3e18 --- /dev/null +++ b/devices10/PIC16F506.pas @@ -0,0 +1,164 @@ +unit PIC16F506; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F506'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_RBWUF : bit absolute STATUS.7; + STATUS_CWUF : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + PORTB : byte absolute $0006; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + CM1CON0 : byte absolute $0008; + CM1CON0_C1OUT : bit absolute CM1CON0.7; + CM1CON0_nC1OUTEN : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.5; + CM1CON0_nC1T0CS : bit absolute CM1CON0.4; + CM1CON0_C1ON : bit absolute CM1CON0.3; + CM1CON0_C1NREF : bit absolute CM1CON0.2; + CM1CON0_C1PREF : bit absolute CM1CON0.1; + CM1CON0_nC1WU : bit absolute CM1CON0.0; + ADCON0 : byte absolute $0009; + ADCON0_ANS1 : bit absolute ADCON0.7; + ADCON0_ANS0 : bit absolute ADCON0.6; + ADCON0_ADCS1 : bit absolute ADCON0.5; + ADCON0_ADCS0 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $000A; + CM2CON0 : byte absolute $000B; + CM2CON0_C2OUT : bit absolute CM2CON0.7; + CM2CON0_nC2OUTEN : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.5; + CM2CON0_C2PREF2 : bit absolute CM2CON0.4; + CM2CON0_C2ON : bit absolute CM2CON0.3; + CM2CON0_C2NREF : bit absolute CM2CON0.2; + CM2CON0_C2PREF1 : bit absolute CM2CON0.1; + CM2CON0_nC2WU : bit absolute CM2CON0.0; + VRCON : byte absolute $000C; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VROE : bit absolute VRCON.6; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00C:SFR:ALLMAPPED'} // Banks 0-3 : INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTB, PORTC, CM1CON0, ADCON0, ADRES, CM2CON0, VRCON + {$SET_STATE_RAM '00D-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '004:9F'} // FSR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // PORTB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:EF'} // VRCON bit 4 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:80'} // FSR bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RB5/OSC1/CLKIN + // Pin 3 : RB4/OSC2/CLKOUT + // Pin 4 : RB3/MCLR/Vpp + // Pin 5 : RC5/T0CKI + // Pin 6 : RC4/C2OUT + // Pin 7 : RC3 + // Pin 8 : RC2/CVref + // Pin 9 : RC1/C2IN- + // Pin 10 : RC0/C2IN+ + // Pin 11 : RB2/AN2/C1OUT + // Pin 12 : RB1/AN1/C1IN-/ICSPCLK + // Pin 13 : RB0/AN0/C1IN+/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTB + {$MAP_RAM_TO_PIN '007:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // OSC : Oscillator Selection bits + {$define _OSC_LP = $0FF8} // LP oscillator and 18 ms DRT + {$define _OSC_XT = $0FF9} // XT oscillator and 18 ms DRT + {$define _OSC_HS = $0FFA} // HS oscillator and 18 ms DRT + {$define _OSC_EC = $0FFB} // EC Osc With RB4 and 1.125 ms DRT + {$define _OSC_IntRC_RB4EN = $0FFC} // INTRC With RB4 and 1.125 ms DRT + {$define _OSC_IntRC_CLKOUTEN = $0FFD} // INTRC With CLKOUT and 1.125 ms DRT + {$define _OSC_ExtRC_RB4EN = $0FFE} // EXTRC With RB4 and 1.125 ms DRT + {$define _OSC_ExtRC_CLKOUTEN = $0FFF} // EXTRC With CLKOUT and 1.125 ms DRT + + // WDT : Watchdog Timer Enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FF7} // WDT disabled + + // CP : Code Protect + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FEF} // Code protection on + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $0FFF} // RB3/MCLR pin functions as MCLR + {$define _MCLRE_OFF = $0FDF} // RB3/MCLR pin functions as RB3, MCLR tied internally to VDD + + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_ON = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_OFF = $0FBF} // 4 MHz INTOSC Speed + +implementation +end. diff --git a/devices10/PIC16F526.pas b/devices10/PIC16F526.pas new file mode 100644 index 00000000..096e863a --- /dev/null +++ b/devices10/PIC16F526.pas @@ -0,0 +1,190 @@ +unit PIC16F526; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F526'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_RBWUF : bit absolute STATUS.7; + STATUS_CWUF : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + PORTB : byte absolute $0006; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + CM1CON0 : byte absolute $0008; + CM1CON0_C1OUT : bit absolute CM1CON0.7; + CM1CON0_nC1OUTEN : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.5; + CM1CON0_nC1T0CS : bit absolute CM1CON0.4; + CM1CON0_C1ON : bit absolute CM1CON0.3; + CM1CON0_C1NREF : bit absolute CM1CON0.2; + CM1CON0_C1PREF : bit absolute CM1CON0.1; + CM1CON0_nC1WU : bit absolute CM1CON0.0; + ADCON0 : byte absolute $0009; + ADCON0_ANS1 : bit absolute ADCON0.7; + ADCON0_ANS0 : bit absolute ADCON0.6; + ADCON0_ADCS1 : bit absolute ADCON0.5; + ADCON0_ADCS0 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $000A; + CM2CON0 : byte absolute $000B; + CM2CON0_C2OUT : bit absolute CM2CON0.7; + CM2CON0_nC2OUTEN : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.5; + CM2CON0_C2PREF2 : bit absolute CM2CON0.4; + CM2CON0_C2ON : bit absolute CM2CON0.3; + CM2CON0_C2NREF : bit absolute CM2CON0.2; + CM2CON0_C2PREF1 : bit absolute CM2CON0.1; + CM2CON0_nC2WU : bit absolute CM2CON0.0; + VRCON : byte absolute $000C; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VROE : bit absolute VRCON.6; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + EECON : byte absolute $0021; + EECON_FREE : bit absolute EECON.4; + EECON_WRERR : bit absolute EECON.3; + EECON_WREN : bit absolute EECON.2; + EECON_WR : bit absolute EECON.1; + EECON_RD : bit absolute EECON.0; + EEDATA : byte absolute $0025; + EEADR : byte absolute $0026; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : EECON + // Bank 2 : TMR0 + // Bank 3 : EECON + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : OSCCAL, PORTB + // Bank 1 : EEDATA, EEADR + // Bank 2 : OSCCAL, PORTB + // Bank 3 : EEDATA, EEADR + {$SET_STATE_RAM '007-00C:SFR:ALLMAPPED'} // Banks 0-3 : PORTC, CM1CON0, ADCON0, ADRES, CM2CON0, VRCON + {$SET_STATE_RAM '00D-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '040-04C:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTB, PORTC, CM1CON0, ADCON0, ADRES, CM2CON0, VRCON (bank 0) + {$SET_MAPPED_RAM '061-061:bnk1'} // maps to EECON (bank 1) + {$SET_MAPPED_RAM '065-066:bnk1'} // maps to EEDATA, EEADR (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '004:9F'} // FSR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // PORTB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:EF'} // VRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:1F'} // EECON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:3F'} // EEADR bits 7,6 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:80'} // FSR bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RB5/OSC1/CLKIN + // Pin 3 : RB4/OSC2/CLKOUT + // Pin 4 : RB3/MCLR/Vpp + // Pin 5 : RC5/T0CKI + // Pin 6 : RC4/C2OUT + // Pin 7 : RC3 + // Pin 8 : RC2/CVref + // Pin 9 : RC1/C2IN- + // Pin 10 : RC0/C2IN+ + // Pin 11 : RB2/C1OUT/AN2 + // Pin 12 : RB1/C1IN-/AN1/ICSPCLK + // Pin 13 : RB0/C1IN+/AN0/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTB + {$MAP_RAM_TO_PIN '007:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator + {$define _FOSC_LP = $0FF8} // LP oscillator and 18 ms DRT + {$define _FOSC_XT = $0FF9} // XT oscillator and 18 ms DRT + {$define _FOSC_HS = $0FFA} // HS oscillator and 18 ms DRT + {$define _FOSC_EC = $0FFB} // EC oscillator with RB4 function on RB4/OSC2/CLKOUT and 1 ms DRT + {$define _FOSC_INTRC_RB4 = $0FFC} // INTRC with RB4 function on RB4/OSC2/CLKOUT and 1 ms DRT + {$define _FOSC_INTRC_CLKOUT = $0FFD} // INTRC with CLKOUT function on RB4/OSC2/CLKOUT and 1 ms DRT + {$define _FOSC_ExtRC_RB4 = $0FFE} // EXTRC with RB4 function on RB4/OSC2/CLKOUT and 1 ms DRT + {$define _FOSC_ExtRC_CLKOUT = $0FFF} // EXTRC with CLKOUT function on RB4/OSC2/CLKOUT and 1 ms DRT + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $0FFF} // Enabled + {$define _WDTE_OFF = $0FF7} // Disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FEF} // Code protection on + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $0FFF} // RB3/MCLR functions as MCLR + {$define _MCLRE_OFF = $0FDF} // RB3/MCLR functions as RB3, MCLR internally tied to Vdd + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHz = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_4MHz = $0FBF} // 4 MHz INTOSC Speed + + // CPDF : Code Protection bit - Flash Data Memory + {$define _CPDF_OFF = $0FFF} // Code protection off + {$define _CPDF_ON = $0F7F} // Code protection on + +implementation +end. diff --git a/devices10/PIC16F527.pas b/devices10/PIC16F527.pas new file mode 100644 index 00000000..c60ad932 --- /dev/null +++ b/devices10/PIC16F527.pas @@ -0,0 +1,255 @@ +unit PIC16F527; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F527'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_PA1 : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + FSR_FSR6 : bit absolute FSR.6; + FSR_FSR5 : bit absolute FSR.5; + FSR_FSR4 : bit absolute FSR.4; + FSR_FSR3 : bit absolute FSR.3; + FSR_FSR2 : bit absolute FSR.2; + FSR_FSR1 : bit absolute FSR.1; + FSR_FSR0 : bit absolute FSR.0; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + PORTA : byte absolute $0006; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0007; + PORTB_RB3 : bit absolute PORTB.7; + PORTB_RB2 : bit absolute PORTB.6; + PORTB_RB1 : bit absolute PORTB.5; + PORTB_RB0 : bit absolute PORTB.4; + PORTC : byte absolute $0008; + ADCON0 : byte absolute $0009; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $000A; + INTCON0 : byte absolute $000B; + INTCON0_ADIF : bit absolute INTCON0.7; + INTCON0_CWIF : bit absolute INTCON0.6; + INTCON0_T0IF : bit absolute INTCON0.5; + INTCON0_RAIF : bit absolute INTCON0.4; + INTCON0_GIE : bit absolute INTCON0.0; + EECON : byte absolute $0021; + EECON_FREE : bit absolute EECON.4; + EECON_WRERR : bit absolute EECON.3; + EECON_WREN : bit absolute EECON.2; + EECON_WR : bit absolute EECON.1; + EECON_RD : bit absolute EECON.0; + EEDATA : byte absolute $0025; + EEADR : byte absolute $0026; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + CM1CON0 : byte absolute $0027; + CM1CON0_C1OUT : bit absolute CM1CON0.7; + CM1CON0_nC1OUTEN : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.5; + CM1CON0_nC1T0CS : bit absolute CM1CON0.4; + CM1CON0_C1ON : bit absolute CM1CON0.3; + CM1CON0_C1NREF : bit absolute CM1CON0.2; + CM1CON0_C1PREF : bit absolute CM1CON0.1; + CM1CON0_nC1WU : bit absolute CM1CON0.0; + CM2CON0 : byte absolute $0028; + CM2CON0_C2OUT : bit absolute CM2CON0.7; + CM2CON0_nC2OUTEN : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.5; + CM2CON0_C2PREF2 : bit absolute CM2CON0.4; + CM2CON0_C2ON : bit absolute CM2CON0.3; + CM2CON0_C2NREF : bit absolute CM2CON0.2; + CM2CON0_C2PREF1 : bit absolute CM2CON0.1; + CM2CON0_nC2WU : bit absolute CM2CON0.0; + VRCON : byte absolute $0029; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VROE : bit absolute VRCON.6; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + ANSEL : byte absolute $002A; + ANSEL_ANS7 : bit absolute ANSEL.7; + ANSEL_ANS6 : bit absolute ANSEL.6; + ANSEL_ANS5 : bit absolute ANSEL.5; + ANSEL_ANS4 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + IW : byte absolute $0061; + INTCON1 : byte absolute $0065; + INTCON1_ADIE : bit absolute INTCON1.7; + INTCON1_CWIE : bit absolute INTCON1.6; + INTCON1_T0IE : bit absolute INTCON1.5; + INTCON1_RAIE : bit absolute INTCON1.4; + INTCON1_WUR : bit absolute INTCON1.0; + ISTATUS : byte absolute $0066; + IFSR : byte absolute $0067; + IFSR_IFSR6 : bit absolute IFSR.6; + IFSR_IFSR5 : bit absolute IFSR.5; + IFSR_IFSR4 : bit absolute IFSR.4; + IFSR_IFSR3 : bit absolute IFSR.3; + IFSR_IFSR2 : bit absolute IFSR.2; + IFSR_IFSR1 : bit absolute IFSR.1; + IFSR_IFSR0 : bit absolute IFSR.0; + IBSR : byte absolute $0068; + IBSR_IBSR1 : bit absolute IBSR.1; + IBSR_IBSR0 : bit absolute IBSR.0; + OPACON : byte absolute $0069; + OPACON_OPA2ON : bit absolute OPACON.1; + OPACON_OPA1ON : bit absolute OPACON.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : EECON + // Bank 2 : TMR0 + // Bank 3 : IW + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-00A:SFR:ALL'} // Bank 0 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 1 : EEDATA, EEADR, CM1CON0, CM2CON0, VRCON, ANSEL + // Bank 2 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 3 : INTCON1, ISTATUS, IFSR, IBSR, OPACON, ANSEL + {$SET_STATE_RAM '00B-00B:SFR:ALLMAPPED'} // Banks 0-3 : INTCON0 + {$SET_STATE_RAM '00C-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '040-04B:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES, INTCON0 (bank 0) + {$SET_MAPPED_RAM '06A-06A:bnk1'} // maps to ANSEL (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:7F'} // STATUS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '004:7F'} // FSR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:F1'} // INTCON0 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:1F'} // EECON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:3F'} // EEADR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '029:EF'} // VRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '065:F1'} // INTCON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '066:7F'} // ISTATUS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '067:7F'} // IFSR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '068:03'} // IBSR bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '069:03'} // OPACON bits 7,6,5,4,3,2 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/OSC1/CLKIN + // Pin 3 : RA4/AN3/OSC2/CLKOUT + // Pin 4 : VPP/MCLR/RA3 + // Pin 5 : RC5 + // Pin 6 : RC4/C2OUT + // Pin 7 : RC3/AN7/OP1 + // Pin 8 : RC6/OP1- + // Pin 9 : RC7/OP1+ + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/OP2+ + // Pin 13 : RB4/OP2- + // Pin 14 : RC2/AN6/OP2 + // Pin 15 : RC1/AN5/C2IN- + // Pin 16 : RC0/AN4/C2IN+ + // Pin 17 : RA2/AN2/C1OUT/T0CKI + // Pin 18 : RA1/AN1/C1IN-/CVREF/ICSPCLK + // Pin 19 : RA0/AN0/C1IN+/ICSPDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '006:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_LP = $0FF8} // LP oscillator and automatic 18 ms DRT (DRTEN ignored) + {$define _FOSC_XT = $0FF9} // XT oscillator and automatic 18 ms DRT (DRTEN ignored) + {$define _FOSC_HS = $0FFA} // HS oscillator and automatic 18 ms DRT (DRTEN ignored) + {$define _FOSC_EC = $0FFB} // EC oscillator with I/O function on OSC2/CLKOUT and 10 us startup time + {$define _FOSC_INTRC_IO = $0FFC} // INTRC with I/O function on OSC2/CLKOUT and 10 us startup time + {$define _FOSC_INTRC_CLKOUT = $0FFD} // INTRC with CLKOUT function on OSC2/CLKOUT and 10 us startup time + {$define _FOSC_EXTRC_IO = $0FFE} // EXTRC with I/O function on OSC2/CLKOUT and 10 us startup time + {$define _FOSC_EXTRC_CLKOUT = $0FFF} // EXTRC with CLKOUT function on OSC2/CLKOUT and 10 us startup time + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $0FFF} // WDT Enabled + {$define _WDTE_OFF = $0FF7} // WDT Disabled + + // CP : Code Protection - User Program Memory + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FEF} // Code protection on + + // MCLRE : Master Clear Enable + {$define _MCLRE_ON = $0FFF} // MCLR pin functions as MCLR + {$define _MCLRE_OFF = $0FDF} // MCLR pin functions as I/O, MCLR internally tied to Vdd + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHz = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_4MHz = $0FBF} // 4 MHz INTOSC Speed + + // CPSW : Code Protection - Self Writable Memory + {$define _CPSW_OFF = $0FFF} // Code protection off + {$define _CPSW_ON = $0F7F} // Code protection on + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $0FFF} // BOR Enabled + {$define _BOREN_OFF = $0EFF} // BOR Disabled + + // DRTEN : Device Reset Timer Enable + {$define _DRTEN_ON = $0FFF} // DRT Enabled (18 ms) + {$define _DRTEN_OFF = $0DFF} // DRT Disabled + +implementation +end. diff --git a/devices10/PIC16F54.pas b/devices10/PIC16F54.pas new file mode 100644 index 00000000..60062fb6 --- /dev/null +++ b/devices10/PIC16F54.pas @@ -0,0 +1,103 @@ +unit PIC16F54; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F54'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 18} +{$SET PIC_NUMBANKS = 1} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 512} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_PA2 : bit absolute STATUS.7; + STATUS_PA1 : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_T0CKI : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-006:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB + {$SET_STATE_RAM '007-01F:GPR'} + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:E0'} // FSR bits 7,6,5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RA2 + // Pin 2 : RA3 + // Pin 3 : T0CKI + // Pin 4 : MCLR/Vpp + // Pin 5 : VSS + // Pin 6 : RB0 + // Pin 7 : RB1 + // Pin 8 : RB2 + // Pin 9 : RB3 + // Pin 10 : RB4 + // Pin 11 : RB5 + // Pin 12 : RB6/ICSPCLK + // Pin 13 : RB7/ICSPDAT + // Pin 14 : VDD + // Pin 15 : OSC2/CLKOUT + // Pin 16 : OSC1/CLKIN + // Pin 17 : RA0 + // Pin 18 : RA1 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-17,1-18,2-1,3-2,4-3'} // PORTA + {$MAP_RAM_TO_PIN '006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + + + // -- Bits Configuration -- + + // OSC : Oscillator selection bits + {$define _OSC_RC = $0FFF} // RC oscillator + {$define _OSC_HS = $0FFE} // HS oscillator + {$define _OSC_XT = $0FFD} // XT oscillator + {$define _OSC_LP = $0FFC} // LP oscillator + + // WDT : Watchdog timer enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + +implementation +end. diff --git a/devices10/PIC16F57.pas b/devices10/PIC16F57.pas new file mode 100644 index 00000000..d6fed194 --- /dev/null +++ b/devices10/PIC16F57.pas @@ -0,0 +1,129 @@ +unit PIC16F57; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F57'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_PA2 : bit absolute STATUS.7; + STATUS_PA1 : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_T0CKI : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-007:SFR:ALLMAPPED'} // Banks 0-3 : INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC + {$SET_STATE_RAM '008-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '004:80'} // FSR bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : T0CKI + // Pin 2 : Vdd + // Pin 3 : N/C + // Pin 4 : Vss + // Pin 5 : N/C + // Pin 6 : RA0 + // Pin 7 : RA1 + // Pin 8 : RA2 + // Pin 9 : RA3 + // Pin 10 : RB0 + // Pin 11 : RB1 + // Pin 12 : RB2 + // Pin 13 : RB3 + // Pin 14 : RB4 + // Pin 15 : RB5 + // Pin 16 : RB6/ICSPCLK + // Pin 17 : RB7/ICSPDAT + // Pin 18 : RC0 + // Pin 19 : RC1 + // Pin 20 : RC2 + // Pin 21 : RC3 + // Pin 22 : RC4 + // Pin 23 : RC5 + // Pin 24 : RC6 + // Pin 25 : RC7 + // Pin 26 : OSC2/CLKOUT + // Pin 27 : OSC1/CLKIN + // Pin 28 : MCLR/Vpp + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-6,1-7,2-8,3-9,4-1'} // PORTA + {$MAP_RAM_TO_PIN '006:0-10,1-11,2-12,3-13,4-14,5-15,6-16,7-17'} // PORTB + {$MAP_RAM_TO_PIN '007:0-18,1-19,2-20,3-21,4-22,5-23,6-24,7-25'} // PORTC + + + // -- Bits Configuration -- + + // OSC : Oscillator selection bits + {$define _OSC_RC = $0FFF} // RC oscillator + {$define _OSC_HS = $0FFE} // HS oscillator + {$define _OSC_XT = $0FFD} // XT oscillator + {$define _OSC_LP = $0FFC} // LP oscillator + + // WDT : Watchdog timer enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + +implementation +end. diff --git a/devices10/PIC16F570.pas b/devices10/PIC16F570.pas new file mode 100644 index 00000000..c3de9f38 --- /dev/null +++ b/devices10/PIC16F570.pas @@ -0,0 +1,242 @@ +unit PIC16F570; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F570'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 8} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_PA2 : bit absolute STATUS.7; + STATUS_PA1 : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + OSCCAL : byte absolute $0005; + OSCCAL_CAL6 : bit absolute OSCCAL.7; + OSCCAL_CAL5 : bit absolute OSCCAL.6; + OSCCAL_CAL4 : bit absolute OSCCAL.5; + OSCCAL_CAL3 : bit absolute OSCCAL.4; + OSCCAL_CAL2 : bit absolute OSCCAL.3; + OSCCAL_CAL1 : bit absolute OSCCAL.2; + OSCCAL_CAL0 : bit absolute OSCCAL.1; + PORTA : byte absolute $0006; + PORTB : byte absolute $0007; + PORTC : byte absolute $0008; + ADCON0 : byte absolute $0009; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADRES : byte absolute $000A; + INTCON0 : byte absolute $000B; + INTCON0_ADIF : bit absolute INTCON0.7; + INTCON0_CWIF : bit absolute INTCON0.6; + INTCON0_T0IF : bit absolute INTCON0.5; + INTCON0_RBIF : bit absolute INTCON0.4; + INTCON0_GIE : bit absolute INTCON0.0; + EECON : byte absolute $0021; + EECON_FREE : bit absolute EECON.4; + EECON_WRERR : bit absolute EECON.3; + EECON_WREN : bit absolute EECON.2; + EECON_WR : bit absolute EECON.1; + EECON_RD : bit absolute EECON.0; + EEDATA : byte absolute $0025; + EEADR : byte absolute $0026; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + CM1CON0 : byte absolute $0027; + CM1CON0_C1OUT : bit absolute CM1CON0.7; + CM1CON0_nC1OUTEN : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.5; + CM1CON0_nC1T0CS : bit absolute CM1CON0.4; + CM1CON0_C1ON : bit absolute CM1CON0.3; + CM1CON0_C1NREF : bit absolute CM1CON0.2; + CM1CON0_C1PREF : bit absolute CM1CON0.1; + CM1CON0_nC1WU : bit absolute CM1CON0.0; + CM2CON0 : byte absolute $0028; + CM2CON0_C2OUT : bit absolute CM2CON0.7; + CM2CON0_nC2OUTEN : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.5; + CM2CON0_C2PREF2 : bit absolute CM2CON0.4; + CM2CON0_C2ON : bit absolute CM2CON0.3; + CM2CON0_C2NREF : bit absolute CM2CON0.2; + CM2CON0_C2PREF1 : bit absolute CM2CON0.1; + CM2CON0_nC2WU : bit absolute CM2CON0.0; + VRCON : byte absolute $0029; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VROE1 : bit absolute VRCON.6; + VRCON_VROE2 : bit absolute VRCON.5; + VRCON_VRR : bit absolute VRCON.4; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + ANSEL : byte absolute $002A; + ANSEL_ANS7 : bit absolute ANSEL.7; + ANSEL_ANS6 : bit absolute ANSEL.6; + ANSEL_ANS5 : bit absolute ANSEL.5; + ANSEL_ANS4 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + IW : byte absolute $0061; + INTCON1 : byte absolute $0065; + INTCON1_ADIE : bit absolute INTCON1.7; + INTCON1_CWIE : bit absolute INTCON1.6; + INTCON1_T0IE : bit absolute INTCON1.5; + INTCON1_RBIE : bit absolute INTCON1.4; + INTCON1_WUR : bit absolute INTCON1.0; + ISTATUS : byte absolute $0066; + IFSR : byte absolute $0067; + IBSR : byte absolute $0068; + IBSR_IBSR2 : bit absolute IBSR.2; + IBSR_IBSR1 : bit absolute IBSR.1; + IBSR_IBSR0 : bit absolute IBSR.0; + OPACON : byte absolute $0069; + OPACON_OPA2ON : bit absolute OPACON.1; + OPACON_OPA1ON : bit absolute OPACON.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-7 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : EECON + // Bank 2 : TMR0 + // Bank 3 : IW + // Bank 4 : TMR0 + // Bank 5 : EECON + // Bank 6 : TMR0 + // Bank 7 : IW + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-7 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-00A:SFR:ALL'} // Bank 0 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 1 : EEDATA, EEADR, CM1CON0, CM2CON0, VRCON, ANSEL + // Bank 2 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 3 : INTCON1, ISTATUS, IFSR, IBSR, OPACON, ANSEL + // Bank 4 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 5 : EEDATA, EEADR, CM1CON0, CM2CON0, VRCON, ANSEL + // Bank 6 : OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES + // Bank 7 : INTCON1, ISTATUS, IFSR, IBSR, OPACON, ANSEL + {$SET_STATE_RAM '00B-00B:SFR:ALLMAPPED'} // Banks 0-7 : INTCON0 + {$SET_STATE_RAM '00C-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '040-04B:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES, INTCON0 (bank 0) + {$SET_MAPPED_RAM '06A-06B:bnk1'} // maps to ANSEL, INTCON0 (bank 1) + {$SET_MAPPED_RAM '080-08B:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES, INTCON0 (bank 0) + {$SET_MAPPED_RAM '0A0-0AB:bnk1'} // maps to INDF, EECON, PCL, STATUS, FSR, EEDATA, EEADR, CM1CON0, CM2CON0, VRCON, ANSEL, INTCON0 (bank 1) + {$SET_MAPPED_RAM '0C0-0CB:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR, OSCCAL, PORTA, PORTB, PORTC, ADCON0, ADRES, INTCON0 (bank 0) + {$SET_MAPPED_RAM '0E0-0EB:bnk3'} // maps to INDF, IW, PCL, STATUS, FSR, INTCON1, ISTATUS, IFSR, IBSR, OPACON, ANSEL, INTCON0 (bank 3) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:FE'} // OSCCAL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:F1'} // INTCON0 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:1F'} // EECON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:3F'} // EEADR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '065:F1'} // INTCON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '068:07'} // IBSR bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '069:03'} // OPACON bits 7,6,5,4,3,2 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR + // Pin 2 : RA0/AN0 + // Pin 3 : RA1/AN1/C1IN+ + // Pin 4 : RA2/AN2/CVREF1 + // Pin 5 : RA3/AN3/C2IN+ + // Pin 6 : RA4/AN4/T0CKI + // Pin 7 : RA5/AN5 + // Pin 8 : VSS + // Pin 9 : RA7/CLKIN/OSC1 + // Pin 10 : RA6/CLKOUT/OSC2 + // Pin 11 : RC0 + // Pin 12 : RC1/AN6/OPA1OUT + // Pin 13 : RC2/OPA1IN- + // Pin 14 : RC3/OPA1IN+ + // Pin 15 : RC4/OPA2IN+ + // Pin 16 : RC5/OPA2IN- + // Pin 17 : RC6/AN7/OPA2OUT + // Pin 18 : RC7/C2IN- + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : RB0 + // Pin 22 : RB1 + // Pin 23 : RB2 + // Pin 24 : RB3/C1OUT + // Pin 25 : RB4/C2OUT + // Pin 26 : RB5 + // Pin 27 : RB6/ICSPCLK + // Pin 28 : RB7/ICSPDAT/C1IN-/CVREF2 + + + // -- RAM to PIN mapping -- + + + + // -- Bits Configuration -- + + // FOSC : Oscillator + {$define _FOSC_LP = $0FF8} // LP oscillator and 18 ms DRT + {$define _FOSC_XT = $0FF9} // XT oscillator and 18 ms DRT + {$define _FOSC_HS = $0FFA} // HS oscillator and 18 ms DRT + {$define _FOSC_EC = $0FFB} // EC oscillator with I/O function on OSC2/CLKOUT + {$define _FOSC_INTRC_IO = $0FFC} // INTRC with I/O function on OSC2/CLKOUT + {$define _FOSC_INTRC_CLKOUT = $0FFD} // INTRC with CLKOUT function on OSC2/CLKOUT + {$define _FOSC_EXTRC_IO = $0FFE} // EXTRC with I/O function on OSC2/CLKOUT + {$define _FOSC_EXTRC_CLKOUT = $0FFF} // EXTRC with CLKOUT function on OSC2/CLKOUT + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $0FFF} // Enabled + {$define _WDTE_OFF = $0FF7} // Disabled + + // CP : Code Protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FEF} // Code protection on + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHz = $0FFF} // 8 MHz INTOSC Speed + {$define _IOSCFS_4MHz = $0FBF} // 4 MHz INTOSC Speed + + // CPSW : Code Protection bit - Flash Data Memory + {$define _CPSW_OFF = $0FFF} // Code protection off + {$define _CPSW_ON = $0F7F} // Code protection on + + // BOREN : + {$define _BOREN_ON = $0FFF} // BOR Enabled + {$define _BOREN_OFF = $0EFF} // BOR Disabled + + // DRTEN : + {$define _DRTEN_ON = $0FFF} // DRT Enabled + {$define _DRTEN_OFF = $0DFF} // DRT Disabled + +implementation +end. diff --git a/devices10/PIC16F59.pas b/devices10/PIC16F59.pas new file mode 100644 index 00000000..53a71678 --- /dev/null +++ b/devices10/PIC16F59.pas @@ -0,0 +1,156 @@ +unit PIC16F59; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F59'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 8} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_PA2 : bit absolute STATUS.7; + STATUS_PA1 : bit absolute STATUS.6; + STATUS_PA0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_T0CKI : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $0008; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0009; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-009:SFR:ALLMAPPED'} // Banks 0-7 : INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '010-01F:GPR:ALL'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:F0'} // PORTE bits 3,2,1,0 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0 + // Pin 2 : RA1 + // Pin 3 : RA2 + // Pin 4 : RA3 + // Pin 5 : Vss + // Pin 6 : RB0 + // Pin 7 : RB1 + // Pin 8 : RB2 + // Pin 9 : RB3 + // Pin 10 : RB4 + // Pin 11 : RB5 + // Pin 12 : RB6/ICSPCLK + // Pin 13 : RB7/ICSPDAT + // Pin 14 : MCLR/Vpp + // Pin 15 : Vdd + // Pin 16 : RC0 + // Pin 17 : RC1 + // Pin 18 : RC2 + // Pin 19 : RC3 + // Pin 20 : RC4 + // Pin 21 : RC5 + // Pin 22 : RC6 + // Pin 23 : RC7 + // Pin 24 : RD0 + // Pin 25 : Vss + // Pin 26 : RD1 + // Pin 27 : RD2 + // Pin 28 : RD3 + // Pin 29 : RD4 + // Pin 30 : RD5 + // Pin 31 : RD6 + // Pin 32 : RD7 + // Pin 33 : OSC2/CLKOUT + // Pin 34 : OSC1/CLKIN + // Pin 35 : Vdd + // Pin 36 : RE4 + // Pin 37 : RE5 + // Pin 38 : RE6 + // Pin 39 : RE7 + // Pin 40 : T0CKI + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-1,1-2,2-3,3-4,4-40'} // PORTA + {$MAP_RAM_TO_PIN '006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + {$MAP_RAM_TO_PIN '007:0-16,1-17,2-18,3-19,4-20,5-21,6-22,7-23'} // PORTC + {$MAP_RAM_TO_PIN '008:0-24,1-26,2-27,3-28,4-29,5-30,6-31,7-32'} // PORTD + {$MAP_RAM_TO_PIN '009:4-36,5-37,6-38,7-39'} // PORTE + + + // -- Bits Configuration -- + + // OSC : Oscillator selection bits + {$define _OSC_RC = $0FFF} // RC oscillator + {$define _OSC_HS = $0FFE} // HS oscillator + {$define _OSC_XT = $0FFD} // XT oscillator + {$define _OSC_LP = $0FFC} // LP oscillator + + // WDT : Watchdog timer enable bit + {$define _WDT_ON = $0FFF} // WDT enabled + {$define _WDT_OFF = $0FFB} // WDT disabled + + // CP : Code protection bit + {$define _CP_OFF = $0FFF} // Code protection off + {$define _CP_ON = $0FF7} // Code protection on + +implementation +end. diff --git a/PIC10F320.pas b/devices16/PIC10F320.pas similarity index 51% rename from PIC10F320.pas rename to devices16/PIC10F320.pas index 9645c2be..f4dc00cd 100644 --- a/PIC10F320.pas +++ b/devices16/PIC10F320.pas @@ -17,21 +17,21 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; FSR : byte absolute $0004; PORTA : byte absolute $0005; - PORTA_RA3 : bit absolute PORTA.4; - PORTA_RA2 : bit absolute PORTA.3; - PORTA_RA1 : bit absolute PORTA.2; - PORTA_RA0 : bit absolute PORTA.1; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; TRISA : byte absolute $0006; - TRISA_TRISA2 : bit absolute TRISA.3; - TRISA_TRISA1 : bit absolute TRISA.2; - TRISA_TRISA0 : bit absolute TRISA.1; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; LATA : byte absolute $0007; LATA_LATA2 : bit absolute LATA.2; LATA_LATA1 : bit absolute LATA.1; @@ -45,9 +45,9 @@ interface WPUA_WPUA2 : bit absolute WPUA.2; WPUA_WPUA1 : bit absolute WPUA.1; WPUA_WPUA0 : bit absolute WPUA.0; - PCLATH : byte absolute $000a; - PCLATH_PCLH0 : bit absolute PCLATH.4; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -56,18 +56,18 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_IOCIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_ADIF : bit absolute PIR1.4; - PIR1_NCO1IF : bit absolute PIR1.3; - PIR1_CLC1IF : bit absolute PIR1.2; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_NCO1IF : bit absolute PIR1.4; + PIR1_CLC1IF : bit absolute PIR1.3; PIR1_TMR2IF : bit absolute PIR1.1; - PIE1 : byte absolute $000d; - PIE1_ADIE : bit absolute PIE1.4; - PIE1_NCO1IE : bit absolute PIE1.3; - PIE1_CLC1IE : bit absolute PIE1.2; + PIE1 : byte absolute $000D; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_NCO1IE : bit absolute PIE1.4; + PIE1_CLC1IE : bit absolute PIE1.3; PIE1_TMR2IE : bit absolute PIE1.1; - OPTION_REG : byte absolute $000e; - OPTION_REG_WPUEN : bit absolute OPTION_REG.7; + OPTION_REG : byte absolute $000E; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -75,16 +75,16 @@ interface OPTION_REG_PS2 : bit absolute OPTION_REG.2; OPTION_REG_PS1 : bit absolute OPTION_REG.1; OPTION_REG_PS0 : bit absolute OPTION_REG.0; - PCON : byte absolute $000f; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $000F; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCCON : byte absolute $0010; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_HFIOFR : bit absolute OSCCON.3; - OSCCON_LFIOFR : bit absolute OSCCON.2; - OSCCON_HFIOFS : bit absolute OSCCON.1; + OSCCON_LFIOFR : bit absolute OSCCON.1; + OSCCON_HFIOFS : bit absolute OSCCON.0; TMR2 : byte absolute $0011; PR2 : byte absolute $0012; T2CON : byte absolute $0013; @@ -93,65 +93,50 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; PWM1DCL : byte absolute $0014; - PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.2; - PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.1; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; PWM1DCH : byte absolute $0015; - PWM1DCH_PWM1DCH7 : bit absolute PWM1DCH.7; - PWM1DCH_PWM1DCH6 : bit absolute PWM1DCH.6; - PWM1DCH_PWM1DCH5 : bit absolute PWM1DCH.5; - PWM1DCH_PWM1DCH4 : bit absolute PWM1DCH.4; - PWM1DCH_PWM1DCH3 : bit absolute PWM1DCH.3; - PWM1DCH_PWM1DCH2 : bit absolute PWM1DCH.2; - PWM1DCH_PWM1DCH1 : bit absolute PWM1DCH.1; - PWM1DCH_PWM1DCH0 : bit absolute PWM1DCH.0; PWM1CON : byte absolute $0016; - PWM1CON_PWM1EN : bit absolute PWM1CON.4; - PWM1CON_PWM1OE : bit absolute PWM1CON.3; - PWM1CON_PWM1OUT : bit absolute PWM1CON.2; - PWM1CON_PWM1POL : bit absolute PWM1CON.1; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; PWM2DCL : byte absolute $0017; - PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.2; - PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.1; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; PWM2DCH : byte absolute $0018; - PWM2DCH_PWM2DCH7 : bit absolute PWM2DCH.7; - PWM2DCH_PWM2DCH6 : bit absolute PWM2DCH.6; - PWM2DCH_PWM2DCH5 : bit absolute PWM2DCH.5; - PWM2DCH_PWM2DCH4 : bit absolute PWM2DCH.4; - PWM2DCH_PWM2DCH3 : bit absolute PWM2DCH.3; - PWM2DCH_PWM2DCH2 : bit absolute PWM2DCH.2; - PWM2DCH_PWM2DCH1 : bit absolute PWM2DCH.1; - PWM2DCH_PWM2DCH0 : bit absolute PWM2DCH.0; PWM2CON : byte absolute $0019; - PWM2CON_PWM2EN : bit absolute PWM2CON.4; - PWM2CON_PWM2OE : bit absolute PWM2CON.3; - PWM2CON_PWM2OUT : bit absolute PWM2CON.2; - PWM2CON_PWM2POL : bit absolute PWM2CON.1; - IOCAP : byte absolute $001a; - IOCAP_IOCAP3 : bit absolute IOCAP.6; - IOCAP_IOCAP2 : bit absolute IOCAP.5; - IOCAP_IOCAP1 : bit absolute IOCAP.4; - IOCAP_IOCAP0 : bit absolute IOCAP.3; - IOCAN : byte absolute $001b; - IOCAN_IOCAN3 : bit absolute IOCAN.4; - IOCAN_IOCAN2 : bit absolute IOCAN.3; - IOCAN_IOCAN1 : bit absolute IOCAN.2; - IOCAN_IOCAN0 : bit absolute IOCAN.1; - IOCAF : byte absolute $001c; - IOCAF_IOCAF3 : bit absolute IOCAF.4; - IOCAF_IOCAF2 : bit absolute IOCAF.3; - IOCAF_IOCAF1 : bit absolute IOCAF.2; - IOCAF_IOCAF0 : bit absolute IOCAF.1; - FVRCON : byte absolute $001d; - FVRCON_FVREN : bit absolute FVRCON.6; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_TSEN : bit absolute FVRCON.4; - FVRCON_TSRNG : bit absolute FVRCON.3; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + IOCAP : byte absolute $001A; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $001B; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $001C; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + FVRCON : byte absolute $001D; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; FVRCON_ADFVR1 : bit absolute FVRCON.1; FVRCON_ADFVR0 : bit absolute FVRCON.0; - ADRES : byte absolute $001e; - ADCON : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON : byte absolute $001F; ADCON_ADCS2 : bit absolute ADCON.7; ADCON_ADCS1 : bit absolute ADCON.6; ADCON_ADCS0 : bit absolute ADCON.5; @@ -162,9 +147,15 @@ interface ADCON_ADON : bit absolute ADCON.0; PMADRL : byte absolute $0020; PMADRH : byte absolute $0021; - PMADRH_PMADR8 : bit absolute PMADRH.3; + PMADRH_PMADR8 : bit absolute PMADRH.0; PMDATL : byte absolute $0022; PMDATH : byte absolute $0023; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; PMCON1 : byte absolute $0024; PMCON1_CFGS : bit absolute PMCON1.6; PMCON1_LWLO : bit absolute PMCON1.5; @@ -195,11 +186,11 @@ interface NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; NCO1ACCU : byte absolute $0029; - NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.4; - NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.3; - NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.2; - NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.1; - NCO1INCL : byte absolute $002a; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $002A; NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; @@ -208,7 +199,7 @@ interface NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; - NCO1INCH : byte absolute $002b; + NCO1INCH : byte absolute $002B; NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; @@ -217,19 +208,21 @@ interface NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; - NCO1INCU : byte absolute $002c; - NCO1CON : byte absolute $002d; - NCO1CON_N1EN : bit absolute NCO1CON.5; - NCO1CON_N1OE : bit absolute NCO1CON.4; - NCO1CON_N1OUT : bit absolute NCO1CON.3; - NCO1CON_N1POL : bit absolute NCO1CON.2; - NCO1CON_N1PFM : bit absolute NCO1CON.1; - NCO1CLK : byte absolute $002e; - NCO1CLK_N1PWS2 : bit absolute NCO1CLK.5; - NCO1CLK_N1PWS1 : bit absolute NCO1CLK.4; - NCO1CLK_N1PWS0 : bit absolute NCO1CLK.3; - NCO1CLK_N1CKS1 : bit absolute NCO1CLK.2; - NCO1CLK_N1CKS0 : bit absolute NCO1CLK.1; + NCO1INCU : byte absolute $002C; + NCO1CON : byte absolute $002D; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $002E; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; WDTCON : byte absolute $0030; WDTCON_WDTPS4 : bit absolute WDTCON.5; WDTCON_WDTPS3 : bit absolute WDTCON.4; @@ -250,22 +243,22 @@ interface CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; - CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.3; - CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.2; - CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; CLC1SEL1 : byte absolute $0033; CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; - CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.3; - CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.2; - CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; CLC1POL : byte absolute $0034; CLC1POL_LC1POL : bit absolute CLC1POL.7; - CLC1POL_LC1G4POL : bit absolute CLC1POL.6; - CLC1POL_LC1G3POL : bit absolute CLC1POL.5; - CLC1POL_LC1G2POL : bit absolute CLC1POL.4; - CLC1POL_LC1G1POL : bit absolute CLC1POL.3; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; CLC1GLS0 : byte absolute $0035; CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; @@ -303,95 +296,97 @@ interface CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; CWG1CON0 : byte absolute $0039; - CWG1CON0_G1EN : bit absolute CWG1CON0.6; - CWG1CON0_G1OEB : bit absolute CWG1CON0.5; - CWG1CON0_G1OEA : bit absolute CWG1CON0.4; - CWG1CON0_G1POLB : bit absolute CWG1CON0.3; - CWG1CON0_G1POLA : bit absolute CWG1CON0.2; - CWG1CON0_G1CS0 : bit absolute CWG1CON0.1; - CWG1CON1 : byte absolute $003a; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $003A; CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; - CWG1CON1_G1IS1 : bit absolute CWG1CON1.2; - CWG1CON1_G1IS0 : bit absolute CWG1CON1.1; - CWG1CON2 : byte absolute $003b; - CWG1CON2_G1ASE : bit absolute CWG1CON2.4; - CWG1CON2_G1ARSEN : bit absolute CWG1CON2.3; - CWG1CON2_G1ASDSCLC1 : bit absolute CWG1CON2.2; - CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; - CWG1DBR : byte absolute $003c; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $003B; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSCLC1 : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.0; + CWG1DBR : byte absolute $003C; CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; - CWG1DBF : byte absolute $003d; + CWG1DBF : byte absolute $003D; CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; - VREGCON : byte absolute $003e; + VREGCON : byte absolute $003E; VREGCON_VREGPM1 : bit absolute VREGCON.1; VREGCON_VREGPM0 : bit absolute VREGCON.0; - BORCON : byte absolute $003f; + BORCON : byte absolute $003F; BORCON_SBOREN : bit absolute BORCON.7; BORCON_BORFS : bit absolute BORCON.6; - BORCON_BORRDY : bit absolute BORCON.5; + BORCON_BORRDY : bit absolute BORCON.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-02E:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, TRISA, LATA, ANSELA, WPUA, PCLATH, INTCON, PIR1, PIE1, OPTION_REG, PCON, OSCCON, TMR2, PR2, T2CON, PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, IOCAP, IOCAN, IOCAF, FVRCON, ADRES, ADCON, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, CLKRCON, NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK - {$SET_STATE_RAM '030-03F:SFR'} // WDTCON, CLC1CON, CLC1SEL0, CLC1SEL1, CLC1POL, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CWG1CON0, CWG1CON1, CWG1CON2, CWG1DBR, CWG1DBF, VREGCON, BORCON - {$SET_STATE_RAM '040-07F:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-02E:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, PORTA, TRISA, LATA, ANSELA, WPUA, PCLATH, INTCON, PIR1, PIE1, OPTION_REG, PCON, OSCCON, TMR2, PR2, T2CON, PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, IOCAP, IOCAN, IOCAF, FVRCON, ADRES, ADCON, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, CLKRCON, NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '030-03F:SFR'} // Bank 0 : WDTCON, CLC1CON, CLC1SEL0, CLC1SEL1, CLC1POL, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CWG1CON0, CWG1CON1, CWG1CON2, CWG1DBR, CWG1DBF, VREGCON, BORCON + {$SET_STATE_RAM '040-07F:GPR'} - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:0F'} // PORTA - {$SET_UNIMP_BITS '006:07'} // TRISA - {$SET_UNIMP_BITS '007:07'} // LATA - {$SET_UNIMP_BITS '008:07'} // ANSELA - {$SET_UNIMP_BITS '009:0F'} // WPUA - {$SET_UNIMP_BITS '00A:01'} // PCLATH - {$SET_UNIMP_BITS '00C:5A'} // PIR1 - {$SET_UNIMP_BITS '00D:5A'} // PIE1 - {$SET_UNIMP_BITS '00F:03'} // PCON - {$SET_UNIMP_BITS '010:7B'} // OSCCON - {$SET_UNIMP_BITS '013:7F'} // T2CON - {$SET_UNIMP_BITS '014:C0'} // PWM1DCL - {$SET_UNIMP_BITS '016:F0'} // PWM1CON - {$SET_UNIMP_BITS '017:C0'} // PWM2DCL - {$SET_UNIMP_BITS '019:F0'} // PWM2CON - {$SET_UNIMP_BITS '01A:0F'} // IOCAP - {$SET_UNIMP_BITS '01B:0F'} // IOCAN - {$SET_UNIMP_BITS '01C:0F'} // IOCAF - {$SET_UNIMP_BITS '01D:F3'} // FVRCON - {$SET_UNIMP_BITS '021:01'} // PMADRH - {$SET_UNIMP_BITS '023:3F'} // PMDATH - {$SET_UNIMP_BITS '024:7F'} // PMCON1 - {$SET_UNIMP_BITS '026:40'} // CLKRCON - {$SET_UNIMP_BITS '029:0F'} // NCO1ACCU - {$SET_UNIMP_BITS '02C:00'} // NCO1INCU - {$SET_UNIMP_BITS '02D:F1'} // NCO1CON - {$SET_UNIMP_BITS '02E:E3'} // NCO1CLK - {$SET_UNIMP_BITS '030:3F'} // WDTCON - {$SET_UNIMP_BITS '032:77'} // CLC1SEL0 - {$SET_UNIMP_BITS '033:77'} // CLC1SEL1 - {$SET_UNIMP_BITS '034:8F'} // CLC1POL - {$SET_UNIMP_BITS '039:F9'} // CWG1CON0 - {$SET_UNIMP_BITS '03A:F3'} // CWG1CON1 - {$SET_UNIMP_BITS '03B:C3'} // CWG1CON2 - {$SET_UNIMP_BITS '03C:3F'} // CWG1DBR - {$SET_UNIMP_BITS '03D:3F'} // CWG1DBF - {$SET_UNIMP_BITS '03E:03'} // VREGCON - {$SET_UNIMP_BITS '03F:C1'} // BORCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:0F'} // PORTA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // TRISA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:07'} // LATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:07'} // ANSELA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:0F'} // WPUA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:01'} // PCLATH bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:5A'} // PIR1 bits 7,5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:5A'} // PIE1 bits 7,5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00F:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:0F'} // IOCAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:0F'} // IOCAN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:0F'} // IOCAF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:01'} // PMADRH bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '023:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:40'} // CLKRCON bits 7,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '029:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '02C:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '02D:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '02E:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '030:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '032:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '033:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '034:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '039:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '03A:F3'} // CWG1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03B:C3'} // CWG1CON2 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03C:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '03D:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '03E:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03F:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '024:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -406,60 +401,56 @@ interface // -- RAM to PIN mapping -- - {$MAP_RAM_TO_PIN '005:1-1,2-2,3-3,4-4'} // PORTA + {$MAP_RAM_TO_PIN '005:0-1,1-2,2-3,3-4'} // PORTA // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, ICSPCLK and ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, ICSPCLK and ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_INTOSC = $3FFE} // INTOSC oscillator: CLKIN function disabled + {$define _FOSC_EC = $3FFF} // EC: CLKIN function enabled - // WRT : Flash Memory Self-Write Protection - {$define _WRT_OFF = $1FFF} // Write protection off - {$define _WRT_BOOT = $1FFD} // 000h to 03Fh write protected, 040h to 0FFh may be modified by PMCON control - {$define _WRT_HALF = $1FFB} // 000h to 07Fh write protected, 080h to 0FFh may be modified by PMCON control - {$define _WRT_ALL = $1FF9} // 000h to 0FFh write protected, no addresses may be modified by PMCON control + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3FFD} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3FFB} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $3FF9} // Brown-out Reset disabled - // BORV : Brown-out Reset Voltage Selection - {$define _BORV_LO = $1FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. - {$define _BORV_HI = $1FF7} // Brown-out Reset Voltage (Vbor), high trip point selected. + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled - // LPBOR : Brown-out Reset Selection bits - {$define _LPBOR_ON = $1FFF} // BOR enabled - {$define _LPBOR_OFF = $1FEF} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled - // LVP : Low-Voltage Programming Enable - {$define _LVP_ON = $1FFF} // Low-voltage programming enabled - {$define _LVP_OFF = $1FDF} // High-voltage on MCLR/VPP must be used for programming + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $1FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // MCLR pin function is digital input, MCLR internally tied to VDD - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $3EFF} // High-voltage on MCLR/VPP must be used for programming - // WDTE : Watchdog Timer Enable - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_NSLEEP = $1DFF} // WDT enabled while running and disabled in Sleep - {$define _WDTE_SWDTEN = $1BFF} // WDT controlled by the SWDTEN bit in the WDTCON register - {$define _WDTE_OFF = $19FF} // WDT disabled + // LPBOR : Brown-out Reset Selection bits + {$define _LPBOR_ON = $3FFF} // BOR enabled + {$define _LPBOR_OFF = $3DFF} // BOR disabled - // BOREN : Brown-out Reset Enable - {$define _BOREN_ON = $1FFF} // Brown-out Reset enabled - {$define _BOREN_NSLEEP = $17FF} // Brown-out Reset enabled while running and disabled in Sleep - {$define _BOREN_SBODEN = $0FFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register - {$define _BOREN_OFF = $07FF} // Brown-out Reset disabled + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. - // FOSC : Oscillator Selection bits - {$define _FOSC_INTOSC = $1FFF} // INTOSC oscillator: CLKIN function disabled - {$define _FOSC_EC = $3FFF} // EC: CLKIN function enabled + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $37FF} // 000h to 03Fh write protected, 040h to 0FFh may be modified by PMCON control + {$define _WRT_HALF = $2FFF} // 000h to 07Fh write protected, 080h to 0FFh may be modified by PMCON control + {$define _WRT_ALL = $27FF} // 000h to 0FFh write protected, no addresses may be modified by PMCON control implementation end. diff --git a/PIC10F322.pas b/devices16/PIC10F322.pas similarity index 51% rename from PIC10F322.pas rename to devices16/PIC10F322.pas index c1d4e10d..fc79630d 100644 --- a/PIC10F322.pas +++ b/devices16/PIC10F322.pas @@ -17,21 +17,21 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; FSR : byte absolute $0004; PORTA : byte absolute $0005; - PORTA_RA3 : bit absolute PORTA.4; - PORTA_RA2 : bit absolute PORTA.3; - PORTA_RA1 : bit absolute PORTA.2; - PORTA_RA0 : bit absolute PORTA.1; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; TRISA : byte absolute $0006; - TRISA_TRISA2 : bit absolute TRISA.3; - TRISA_TRISA1 : bit absolute TRISA.2; - TRISA_TRISA0 : bit absolute TRISA.1; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; LATA : byte absolute $0007; LATA_LATA2 : bit absolute LATA.2; LATA_LATA1 : bit absolute LATA.1; @@ -45,9 +45,9 @@ interface WPUA_WPUA2 : bit absolute WPUA.2; WPUA_WPUA1 : bit absolute WPUA.1; WPUA_WPUA0 : bit absolute WPUA.0; - PCLATH : byte absolute $000a; - PCLATH_PCLH0 : bit absolute PCLATH.4; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -56,18 +56,18 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_IOCIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_ADIF : bit absolute PIR1.4; - PIR1_NCO1IF : bit absolute PIR1.3; - PIR1_CLC1IF : bit absolute PIR1.2; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_NCO1IF : bit absolute PIR1.4; + PIR1_CLC1IF : bit absolute PIR1.3; PIR1_TMR2IF : bit absolute PIR1.1; - PIE1 : byte absolute $000d; - PIE1_ADIE : bit absolute PIE1.4; - PIE1_NCO1IE : bit absolute PIE1.3; - PIE1_CLC1IE : bit absolute PIE1.2; + PIE1 : byte absolute $000D; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_NCO1IE : bit absolute PIE1.4; + PIE1_CLC1IE : bit absolute PIE1.3; PIE1_TMR2IE : bit absolute PIE1.1; - OPTION_REG : byte absolute $000e; - OPTION_REG_WPUEN : bit absolute OPTION_REG.7; + OPTION_REG : byte absolute $000E; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -75,16 +75,16 @@ interface OPTION_REG_PS2 : bit absolute OPTION_REG.2; OPTION_REG_PS1 : bit absolute OPTION_REG.1; OPTION_REG_PS0 : bit absolute OPTION_REG.0; - PCON : byte absolute $000f; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $000F; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCCON : byte absolute $0010; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_HFIOFR : bit absolute OSCCON.3; - OSCCON_LFIOFR : bit absolute OSCCON.2; - OSCCON_HFIOFS : bit absolute OSCCON.1; + OSCCON_LFIOFR : bit absolute OSCCON.1; + OSCCON_HFIOFS : bit absolute OSCCON.0; TMR2 : byte absolute $0011; PR2 : byte absolute $0012; T2CON : byte absolute $0013; @@ -93,65 +93,50 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; PWM1DCL : byte absolute $0014; - PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.2; - PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.1; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; PWM1DCH : byte absolute $0015; - PWM1DCH_PWM1DCH7 : bit absolute PWM1DCH.7; - PWM1DCH_PWM1DCH6 : bit absolute PWM1DCH.6; - PWM1DCH_PWM1DCH5 : bit absolute PWM1DCH.5; - PWM1DCH_PWM1DCH4 : bit absolute PWM1DCH.4; - PWM1DCH_PWM1DCH3 : bit absolute PWM1DCH.3; - PWM1DCH_PWM1DCH2 : bit absolute PWM1DCH.2; - PWM1DCH_PWM1DCH1 : bit absolute PWM1DCH.1; - PWM1DCH_PWM1DCH0 : bit absolute PWM1DCH.0; PWM1CON : byte absolute $0016; - PWM1CON_PWM1EN : bit absolute PWM1CON.4; - PWM1CON_PWM1OE : bit absolute PWM1CON.3; - PWM1CON_PWM1OUT : bit absolute PWM1CON.2; - PWM1CON_PWM1POL : bit absolute PWM1CON.1; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; PWM2DCL : byte absolute $0017; - PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.2; - PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.1; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; PWM2DCH : byte absolute $0018; - PWM2DCH_PWM2DCH7 : bit absolute PWM2DCH.7; - PWM2DCH_PWM2DCH6 : bit absolute PWM2DCH.6; - PWM2DCH_PWM2DCH5 : bit absolute PWM2DCH.5; - PWM2DCH_PWM2DCH4 : bit absolute PWM2DCH.4; - PWM2DCH_PWM2DCH3 : bit absolute PWM2DCH.3; - PWM2DCH_PWM2DCH2 : bit absolute PWM2DCH.2; - PWM2DCH_PWM2DCH1 : bit absolute PWM2DCH.1; - PWM2DCH_PWM2DCH0 : bit absolute PWM2DCH.0; PWM2CON : byte absolute $0019; - PWM2CON_PWM2EN : bit absolute PWM2CON.4; - PWM2CON_PWM2OE : bit absolute PWM2CON.3; - PWM2CON_PWM2OUT : bit absolute PWM2CON.2; - PWM2CON_PWM2POL : bit absolute PWM2CON.1; - IOCAP : byte absolute $001a; - IOCAP_IOCAP3 : bit absolute IOCAP.6; - IOCAP_IOCAP2 : bit absolute IOCAP.5; - IOCAP_IOCAP1 : bit absolute IOCAP.4; - IOCAP_IOCAP0 : bit absolute IOCAP.3; - IOCAN : byte absolute $001b; - IOCAN_IOCAN3 : bit absolute IOCAN.4; - IOCAN_IOCAN2 : bit absolute IOCAN.3; - IOCAN_IOCAN1 : bit absolute IOCAN.2; - IOCAN_IOCAN0 : bit absolute IOCAN.1; - IOCAF : byte absolute $001c; - IOCAF_IOCAF3 : bit absolute IOCAF.4; - IOCAF_IOCAF2 : bit absolute IOCAF.3; - IOCAF_IOCAF1 : bit absolute IOCAF.2; - IOCAF_IOCAF0 : bit absolute IOCAF.1; - FVRCON : byte absolute $001d; - FVRCON_FVREN : bit absolute FVRCON.6; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_TSEN : bit absolute FVRCON.4; - FVRCON_TSRNG : bit absolute FVRCON.3; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + IOCAP : byte absolute $001A; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $001B; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $001C; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + FVRCON : byte absolute $001D; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; FVRCON_ADFVR1 : bit absolute FVRCON.1; FVRCON_ADFVR0 : bit absolute FVRCON.0; - ADRES : byte absolute $001e; - ADCON : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON : byte absolute $001F; ADCON_ADCS2 : bit absolute ADCON.7; ADCON_ADCS1 : bit absolute ADCON.6; ADCON_ADCS0 : bit absolute ADCON.5; @@ -162,9 +147,15 @@ interface ADCON_ADON : bit absolute ADCON.0; PMADRL : byte absolute $0020; PMADRH : byte absolute $0021; - PMADRH_PMADR8 : bit absolute PMADRH.3; + PMADRH_PMADR8 : bit absolute PMADRH.0; PMDATL : byte absolute $0022; PMDATH : byte absolute $0023; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; PMCON1 : byte absolute $0024; PMCON1_CFGS : bit absolute PMCON1.6; PMCON1_LWLO : bit absolute PMCON1.5; @@ -195,11 +186,11 @@ interface NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; NCO1ACCU : byte absolute $0029; - NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.4; - NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.3; - NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.2; - NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.1; - NCO1INCL : byte absolute $002a; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $002A; NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; @@ -208,7 +199,7 @@ interface NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; - NCO1INCH : byte absolute $002b; + NCO1INCH : byte absolute $002B; NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; @@ -217,19 +208,21 @@ interface NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; - NCO1INCU : byte absolute $002c; - NCO1CON : byte absolute $002d; - NCO1CON_N1EN : bit absolute NCO1CON.5; - NCO1CON_N1OE : bit absolute NCO1CON.4; - NCO1CON_N1OUT : bit absolute NCO1CON.3; - NCO1CON_N1POL : bit absolute NCO1CON.2; - NCO1CON_N1PFM : bit absolute NCO1CON.1; - NCO1CLK : byte absolute $002e; - NCO1CLK_N1PWS2 : bit absolute NCO1CLK.5; - NCO1CLK_N1PWS1 : bit absolute NCO1CLK.4; - NCO1CLK_N1PWS0 : bit absolute NCO1CLK.3; - NCO1CLK_N1CKS1 : bit absolute NCO1CLK.2; - NCO1CLK_N1CKS0 : bit absolute NCO1CLK.1; + NCO1INCU : byte absolute $002C; + NCO1CON : byte absolute $002D; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $002E; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; WDTCON : byte absolute $0030; WDTCON_WDTPS4 : bit absolute WDTCON.5; WDTCON_WDTPS3 : bit absolute WDTCON.4; @@ -250,22 +243,22 @@ interface CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; - CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.3; - CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.2; - CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; CLC1SEL1 : byte absolute $0033; CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; - CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.3; - CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.2; - CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; CLC1POL : byte absolute $0034; CLC1POL_LC1POL : bit absolute CLC1POL.7; - CLC1POL_LC1G4POL : bit absolute CLC1POL.6; - CLC1POL_LC1G3POL : bit absolute CLC1POL.5; - CLC1POL_LC1G2POL : bit absolute CLC1POL.4; - CLC1POL_LC1G1POL : bit absolute CLC1POL.3; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; CLC1GLS0 : byte absolute $0035; CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; @@ -303,95 +296,97 @@ interface CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; CWG1CON0 : byte absolute $0039; - CWG1CON0_G1EN : bit absolute CWG1CON0.6; - CWG1CON0_G1OEB : bit absolute CWG1CON0.5; - CWG1CON0_G1OEA : bit absolute CWG1CON0.4; - CWG1CON0_G1POLB : bit absolute CWG1CON0.3; - CWG1CON0_G1POLA : bit absolute CWG1CON0.2; - CWG1CON0_G1CS0 : bit absolute CWG1CON0.1; - CWG1CON1 : byte absolute $003a; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $003A; CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; - CWG1CON1_G1IS1 : bit absolute CWG1CON1.2; - CWG1CON1_G1IS0 : bit absolute CWG1CON1.1; - CWG1CON2 : byte absolute $003b; - CWG1CON2_G1ASE : bit absolute CWG1CON2.4; - CWG1CON2_G1ARSEN : bit absolute CWG1CON2.3; - CWG1CON2_G1ASDSCLC1 : bit absolute CWG1CON2.2; - CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; - CWG1DBR : byte absolute $003c; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $003B; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSCLC1 : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.0; + CWG1DBR : byte absolute $003C; CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; - CWG1DBF : byte absolute $003d; + CWG1DBF : byte absolute $003D; CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; - VREGCON : byte absolute $003e; + VREGCON : byte absolute $003E; VREGCON_VREGPM1 : bit absolute VREGCON.1; VREGCON_VREGPM0 : bit absolute VREGCON.0; - BORCON : byte absolute $003f; + BORCON : byte absolute $003F; BORCON_SBOREN : bit absolute BORCON.7; BORCON_BORFS : bit absolute BORCON.6; - BORCON_BORRDY : bit absolute BORCON.5; + BORCON_BORRDY : bit absolute BORCON.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-02E:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, TRISA, LATA, ANSELA, WPUA, PCLATH, INTCON, PIR1, PIE1, OPTION_REG, PCON, OSCCON, TMR2, PR2, T2CON, PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, IOCAP, IOCAN, IOCAF, FVRCON, ADRES, ADCON, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, CLKRCON, NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK - {$SET_STATE_RAM '030-03F:SFR'} // WDTCON, CLC1CON, CLC1SEL0, CLC1SEL1, CLC1POL, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CWG1CON0, CWG1CON1, CWG1CON2, CWG1DBR, CWG1DBF, VREGCON, BORCON - {$SET_STATE_RAM '040-07F:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-02E:SFR'} // Bank 0 : INDF, TMR0, PCL, STATUS, FSR, PORTA, TRISA, LATA, ANSELA, WPUA, PCLATH, INTCON, PIR1, PIE1, OPTION_REG, PCON, OSCCON, TMR2, PR2, T2CON, PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, IOCAP, IOCAN, IOCAF, FVRCON, ADRES, ADCON, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, CLKRCON, NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '030-03F:SFR'} // Bank 0 : WDTCON, CLC1CON, CLC1SEL0, CLC1SEL1, CLC1POL, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CWG1CON0, CWG1CON1, CWG1CON2, CWG1DBR, CWG1DBF, VREGCON, BORCON + {$SET_STATE_RAM '040-07F:GPR'} - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:0F'} // PORTA - {$SET_UNIMP_BITS '006:07'} // TRISA - {$SET_UNIMP_BITS '007:07'} // LATA - {$SET_UNIMP_BITS '008:07'} // ANSELA - {$SET_UNIMP_BITS '009:0F'} // WPUA - {$SET_UNIMP_BITS '00A:01'} // PCLATH - {$SET_UNIMP_BITS '00C:5A'} // PIR1 - {$SET_UNIMP_BITS '00D:5A'} // PIE1 - {$SET_UNIMP_BITS '00F:03'} // PCON - {$SET_UNIMP_BITS '010:7B'} // OSCCON - {$SET_UNIMP_BITS '013:7F'} // T2CON - {$SET_UNIMP_BITS '014:C0'} // PWM1DCL - {$SET_UNIMP_BITS '016:F0'} // PWM1CON - {$SET_UNIMP_BITS '017:C0'} // PWM2DCL - {$SET_UNIMP_BITS '019:F0'} // PWM2CON - {$SET_UNIMP_BITS '01A:0F'} // IOCAP - {$SET_UNIMP_BITS '01B:0F'} // IOCAN - {$SET_UNIMP_BITS '01C:0F'} // IOCAF - {$SET_UNIMP_BITS '01D:F3'} // FVRCON - {$SET_UNIMP_BITS '021:01'} // PMADRH - {$SET_UNIMP_BITS '023:3F'} // PMDATH - {$SET_UNIMP_BITS '024:7F'} // PMCON1 - {$SET_UNIMP_BITS '026:40'} // CLKRCON - {$SET_UNIMP_BITS '029:0F'} // NCO1ACCU - {$SET_UNIMP_BITS '02C:00'} // NCO1INCU - {$SET_UNIMP_BITS '02D:F1'} // NCO1CON - {$SET_UNIMP_BITS '02E:E3'} // NCO1CLK - {$SET_UNIMP_BITS '030:3F'} // WDTCON - {$SET_UNIMP_BITS '032:77'} // CLC1SEL0 - {$SET_UNIMP_BITS '033:77'} // CLC1SEL1 - {$SET_UNIMP_BITS '034:8F'} // CLC1POL - {$SET_UNIMP_BITS '039:F9'} // CWG1CON0 - {$SET_UNIMP_BITS '03A:F3'} // CWG1CON1 - {$SET_UNIMP_BITS '03B:C3'} // CWG1CON2 - {$SET_UNIMP_BITS '03C:3F'} // CWG1DBR - {$SET_UNIMP_BITS '03D:3F'} // CWG1DBF - {$SET_UNIMP_BITS '03E:03'} // VREGCON - {$SET_UNIMP_BITS '03F:C1'} // BORCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:0F'} // PORTA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:0F'} // TRISA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:07'} // LATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:07'} // ANSELA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:0F'} // WPUA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:01'} // PCLATH bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:5A'} // PIR1 bits 7,5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:5A'} // PIE1 bits 7,5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00F:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:0F'} // IOCAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:0F'} // IOCAN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:0F'} // IOCAF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '021:01'} // PMADRH bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '023:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '026:40'} // CLKRCON bits 7,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '029:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '02C:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '02D:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '02E:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '030:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '032:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '033:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '034:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '039:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '03A:F3'} // CWG1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03B:C3'} // CWG1CON2 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03C:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '03D:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '03E:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '03F:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '024:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -406,60 +401,56 @@ interface // -- RAM to PIN mapping -- - {$MAP_RAM_TO_PIN '005:1-1,2-2,3-3,4-4'} // PORTA + {$MAP_RAM_TO_PIN '005:0-1,1-2,2-3,3-4'} // PORTA // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, ICSPCLK and ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, ICSPCLK and ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_INTOSC = $3FFE} // INTOSC oscillator: CLKIN function disabled + {$define _FOSC_EC = $3FFF} // EC: CLKIN function enabled - // WRT : Flash Memory Self-Write Protection - {$define _WRT_OFF = $1FFF} // Write protection off - {$define _WRT_BOOT = $1FFD} // 000h to 07Fh write protected, 080h to 1FFh may be modified by PMCON control - {$define _WRT_HALF = $1FFB} // 000h to 0FFh write protected, 100h to 1FFh may be modified by PMCON control - {$define _WRT_ALL = $1FF9} // 000h to 1FFh write protected, no addresses may be modified by PMCON control + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3FFD} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3FFB} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $3FF9} // Brown-out Reset disabled - // BORV : Brown-out Reset Voltage Selection - {$define _BORV_LO = $1FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. - {$define _BORV_HI = $1FF7} // Brown-out Reset Voltage (Vbor), high trip point selected. + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled - // LPBOR : Brown-out Reset Selection bits - {$define _LPBOR_ON = $1FFF} // BOR enabled - {$define _LPBOR_OFF = $1FEF} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled - // LVP : Low-Voltage Programming Enable - {$define _LVP_ON = $1FFF} // Low-voltage programming enabled - {$define _LVP_OFF = $1FDF} // High-voltage on MCLR/VPP must be used for programming + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $1FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // MCLR pin function is digital input, MCLR internally tied to VDD - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $3EFF} // High-voltage on MCLR/VPP must be used for programming - // WDTE : Watchdog Timer Enable - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_NSLEEP = $1DFF} // WDT enabled while running and disabled in Sleep - {$define _WDTE_SWDTEN = $1BFF} // WDT controlled by the SWDTEN bit in the WDTCON register - {$define _WDTE_OFF = $19FF} // WDT disabled + // LPBOR : Brown-out Reset Selection bits + {$define _LPBOR_ON = $3FFF} // BOR enabled + {$define _LPBOR_OFF = $3DFF} // BOR disabled - // BOREN : Brown-out Reset Enable - {$define _BOREN_ON = $1FFF} // Brown-out Reset enabled - {$define _BOREN_NSLEEP = $17FF} // Brown-out Reset enabled while running and disabled in Sleep - {$define _BOREN_SBODEN = $0FFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register - {$define _BOREN_OFF = $07FF} // Brown-out Reset disabled + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. - // FOSC : Oscillator Selection bits - {$define _FOSC_INTOSC = $1FFF} // INTOSC oscillator: CLKIN function disabled - {$define _FOSC_EC = $3FFF} // EC: CLKIN function enabled + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $37FF} // 000h to 07Fh write protected, 080h to 1FFh may be modified by PMCON control + {$define _WRT_HALF = $2FFF} // 000h to 0FFh write protected, 100h to 1FFh may be modified by PMCON control + {$define _WRT_ALL = $27FF} // 000h to 1FFh write protected, no addresses may be modified by PMCON control implementation end. diff --git a/devices16/PIC12F609.pas b/devices16/PIC12F609.pas new file mode 100644 index 00000000..6a9e1279 --- /dev/null +++ b/devices16/PIC12F609.pas @@ -0,0 +1,236 @@ +unit PIC12F609; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F609'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_GPIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_GPIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_C1IF : bit absolute PIR1.3; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1GINV : bit absolute T1CON.7; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + VRCON : byte absolute $0019; + VRCON_C1VREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_FBREN : bit absolute VRCON.4; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + CMCON0 : byte absolute $001A; + CMCON0_C1ON : bit absolute CMCON0.7; + CMCON0_C1OUT : bit absolute CMCON0.6; + CMCON0_C1OE : bit absolute CMCON0.5; + CMCON0_C1POL : bit absolute CMCON0.4; + CMCON0_C1R : bit absolute CMCON0.2; + CMCON0_C1CH : bit absolute CMCON0.0; + CMCON1 : byte absolute $001C; + CMCON1_T1ACS : bit absolute CMCON1.4; + CMCON1_C1HYS : bit absolute CMCON1.3; + CMCON1_T1GSS : bit absolute CMCON1.1; + CMCON1_C1SYNC : bit absolute CMCON1.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_C1IE : bit absolute PIE1.3; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0090; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + WPU : byte absolute $0095; + WPU_WPUA5 : bit absolute WPU.5; + WPU_WPUA4 : bit absolute WPU.4; + WPU_WPUA2 : bit absolute WPU.2; + WPU_WPUA1 : bit absolute WPU.1; + WPU_WPUA0 : bit absolute WPU.0; + IOC : byte absolute $0096; + IOC_IOC5 : bit absolute IOC.5; + IOC_IOC4 : bit absolute IOC.4; + IOC_IOC3 : bit absolute IOC.3; + IOC_IOC2 : bit absolute IOC.2; + IOC_IOC1 : bit absolute IOC.1; + IOC_IOC0 : bit absolute IOC.0; + ANSEL : byte absolute $009F; + ANSEL_ADCS2 : bit absolute ANSEL.6; + ANSEL_ADCS1 : bit absolute ANSEL.5; + ANSEL_ADCS0 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCTUNE + {$SET_STATE_RAM '019-01A:SFR'} // Bank 0 : VRCON, CMCON0 + {$SET_STATE_RAM '01C-01C:SFR'} // Bank 0 : CMCON1 + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPU, IOC + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ANSEL + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:09'} // PIR1 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:BF'} // VRCON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:F5'} // CMCON0 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:1B'} // CMCON1 bits 7,6,5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:09'} // PIE1 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:7F'} // ANSEL bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/OSC1/CLKIN + // Pin 3 : GP4/C1IN-/T1G/OSC2/CLKOUT + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI/INT/C1OUT + // Pin 6 : GP1/C1IN0-/ICSPCLK + // Pin 7 : GP0/C1IN+/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHZ = $3FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $3F7F} // 4 MHz + + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3CFF} // BOR disabled + +implementation +end. diff --git a/devices16/PIC12F615.pas b/devices16/PIC12F615.pas new file mode 100644 index 00000000..7796a6c1 --- /dev/null +++ b/devices16/PIC12F615.pas @@ -0,0 +1,305 @@ +unit PIC12F615; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F615'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_GPIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_GPIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_ECCPIF : bit absolute PIR1.5; + PIR1_C1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1GINV : bit absolute T1CON.7; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CCPR1L : byte absolute $0013; + CCPR1H : byte absolute $0014; + CCP1CON : byte absolute $0015; + CCP1CON_P1M : bit absolute CCP1CON.7; + CCP1CON_DCB1 : bit absolute CCP1CON.5; + CCP1CON_DCB0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0016; + PWM1CON_PRSEN : bit absolute PWM1CON.7; + PWM1CON_PDC6 : bit absolute PWM1CON.6; + PWM1CON_PDC5 : bit absolute PWM1CON.5; + PWM1CON_PDC4 : bit absolute PWM1CON.4; + PWM1CON_PDC3 : bit absolute PWM1CON.3; + PWM1CON_PDC2 : bit absolute PWM1CON.2; + PWM1CON_PDC1 : bit absolute PWM1CON.1; + PWM1CON_PDC0 : bit absolute PWM1CON.0; + ECCPAS : byte absolute $0017; + ECCPAS_ECCPASE : bit absolute ECCPAS.7; + ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; + ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; + ECCPAS_ECCPAS0 : bit absolute ECCPAS.4; + ECCPAS_PSSAC1 : bit absolute ECCPAS.3; + ECCPAS_PSSAC0 : bit absolute ECCPAS.2; + ECCPAS_PSSBD1 : bit absolute ECCPAS.1; + ECCPAS_PSSBD0 : bit absolute ECCPAS.0; + VRCON : byte absolute $0019; + VRCON_C1VREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_FBREN : bit absolute VRCON.4; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + CMCON0 : byte absolute $001A; + CMCON0_C1ON : bit absolute CMCON0.7; + CMCON0_C1OUT : bit absolute CMCON0.6; + CMCON0_C1OE : bit absolute CMCON0.5; + CMCON0_C1POL : bit absolute CMCON0.4; + CMCON0_C1R : bit absolute CMCON0.2; + CMCON0_C1CH : bit absolute CMCON0.0; + CMCON1 : byte absolute $001C; + CMCON1_T1ACS : bit absolute CMCON1.4; + CMCON1_C1HYS : bit absolute CMCON1.3; + CMCON1_T1GSS : bit absolute CMCON1.1; + CMCON1_C1SYNC : bit absolute CMCON1.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADFM : bit absolute ADCON0.7; + ADCON0_VCFG : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_ECCPIE : bit absolute PIE1.5; + PIE1_C1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0090; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + PR2 : byte absolute $0092; + APFCON : byte absolute $0093; + APFCON_T1GSEL : bit absolute APFCON.4; + APFCON_P1BSEL : bit absolute APFCON.1; + APFCON_P1ASEL : bit absolute APFCON.0; + WPU : byte absolute $0095; + WPU_WPUA5 : bit absolute WPU.5; + WPU_WPUA4 : bit absolute WPU.4; + WPU_WPUA2 : bit absolute WPU.2; + WPU_WPUA1 : bit absolute WPU.1; + WPU_WPUA0 : bit absolute WPU.0; + IOC : byte absolute $0096; + IOC_IOC5 : bit absolute IOC.5; + IOC_IOC4 : bit absolute IOC.4; + IOC_IOC3 : bit absolute IOC.3; + IOC_IOC2 : bit absolute IOC.2; + IOC_IOC1 : bit absolute IOC.1; + IOC_IOC0 : bit absolute IOC.0; + ADRESL : byte absolute $009E; + ANSEL : byte absolute $009F; + ANSEL_ADCS2 : bit absolute ANSEL.6; + ANSEL_ADCS1 : bit absolute ANSEL.5; + ANSEL_ADCS0 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCTUNE + {$SET_STATE_RAM '011-011:SFR'} // Bank 0 : TMR2 + {$SET_STATE_RAM '012-013:SFR:ALL'} // Bank 0 : T2CON, CCPR1L + // Bank 1 : PR2, APFCON + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : CCPR1H + {$SET_STATE_RAM '015-016:SFR:ALL'} // Bank 0 : CCP1CON, PWM1CON + // Bank 1 : WPU, IOC + {$SET_STATE_RAM '017-017:SFR'} // Bank 0 : ECCPAS + {$SET_STATE_RAM '019-01A:SFR'} // Bank 0 : VRCON, CMCON0 + {$SET_STATE_RAM '01C-01C:SFR'} // Bank 0 : CMCON1 + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ANSEL + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:6B'} // PIR1 bits 7,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:BF'} // VRCON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:F5'} // CMCON0 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:1B'} // CMCON1 bits 7,6,5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:DF'} // ADCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:6B'} // PIE1 bits 7,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:13'} // APFCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:7F'} // ANSEL bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/P1A/OSC1/CLKIN + // Pin 3 : GP4/AN3/C1IN1-/T1G/P1B/OSC2/CLKOUT + // Pin 4 : GP3/T1G/MCLR/Vpp + // Pin 5 : GP2/AN2/T0CKI/INT/C1OUT/CCP1/P1A + // Pin 6 : GP1/AN1/C1IN0-/Vref/ICSPCLK + // Pin 7 : GP0/AN0/C1IN+/P1B/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHZ = $3FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $3F7F} // 4 MHz + + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3CFF} // BOR disabled + +implementation +end. diff --git a/devices16/PIC12F617.pas b/devices16/PIC12F617.pas new file mode 100644 index 00000000..3d159388 --- /dev/null +++ b/devices16/PIC12F617.pas @@ -0,0 +1,338 @@ +unit PIC12F617; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F617'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_GPIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_GPIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_CCP1IF : bit absolute PIR1.5; + PIR1_CMIF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1GINV : bit absolute T1CON.7; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CCPR1L : byte absolute $0013; + CCPR1H : byte absolute $0014; + CCP1CON : byte absolute $0015; + CCP1CON_P1M : bit absolute CCP1CON.7; + CCP1CON_DCB1 : bit absolute CCP1CON.5; + CCP1CON_DCB0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0016; + PWM1CON_PRSEN : bit absolute PWM1CON.7; + PWM1CON_PDC6 : bit absolute PWM1CON.6; + PWM1CON_PDC5 : bit absolute PWM1CON.5; + PWM1CON_PDC4 : bit absolute PWM1CON.4; + PWM1CON_PDC3 : bit absolute PWM1CON.3; + PWM1CON_PDC2 : bit absolute PWM1CON.2; + PWM1CON_PDC1 : bit absolute PWM1CON.1; + PWM1CON_PDC0 : bit absolute PWM1CON.0; + ECCPAS : byte absolute $0017; + ECCPAS_ECCPASE : bit absolute ECCPAS.7; + ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; + ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; + ECCPAS_ECCPAS0 : bit absolute ECCPAS.4; + ECCPAS_PSSAC1 : bit absolute ECCPAS.3; + ECCPAS_PSSAC0 : bit absolute ECCPAS.2; + ECCPAS_PSSBD1 : bit absolute ECCPAS.1; + ECCPAS_PSSBD0 : bit absolute ECCPAS.0; + VRCON : byte absolute $0019; + VRCON_CMVREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_FVREN : bit absolute VRCON.4; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + CMCON0 : byte absolute $001A; + CMCON0_CMON : bit absolute CMCON0.7; + CMCON0_COUT : bit absolute CMCON0.6; + CMCON0_CMOE : bit absolute CMCON0.5; + CMCON0_CMPOL : bit absolute CMCON0.4; + CMCON0_CMR : bit absolute CMCON0.2; + CMCON0_CMCH : bit absolute CMCON0.0; + CMCON1 : byte absolute $001C; + CMCON1_T1ACS : bit absolute CMCON1.4; + CMCON1_CMHYS : bit absolute CMCON1.3; + CMCON1_T1GSS : bit absolute CMCON1.1; + CMCON1_CMSYNC : bit absolute CMCON1.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADFM : bit absolute ADCON0.7; + ADCON0_VCFG : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_CCP1IE : bit absolute PIE1.5; + PIE1_CMIE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0090; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + PR2 : byte absolute $0092; + APFCON : byte absolute $0093; + APFCON_T1GSEL : bit absolute APFCON.4; + APFCON_P1BSEL : bit absolute APFCON.1; + APFCON_P1ASEL : bit absolute APFCON.0; + WPU : byte absolute $0095; + WPU_WPU5 : bit absolute WPU.5; + WPU_WPU4 : bit absolute WPU.4; + WPU_WPU2 : bit absolute WPU.2; + WPU_WPU1 : bit absolute WPU.1; + WPU_WPU0 : bit absolute WPU.0; + IOC : byte absolute $0096; + IOC_IOC5 : bit absolute IOC.5; + IOC_IOC4 : bit absolute IOC.4; + IOC_IOC3 : bit absolute IOC.3; + IOC_IOC2 : bit absolute IOC.2; + IOC_IOC1 : bit absolute IOC.1; + IOC_IOC0 : bit absolute IOC.0; + PMCON1 : byte absolute $0098; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0099; + PMADRL : byte absolute $009A; + PMADRH : byte absolute $009B; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $009C; + PMDATH : byte absolute $009D; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + ADRESL : byte absolute $009E; + ANSEL : byte absolute $009F; + ANSEL_ADCS2 : bit absolute ANSEL.6; + ANSEL_ADCS1 : bit absolute ANSEL.5; + ANSEL_ADCS0 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCTUNE + {$SET_STATE_RAM '011-011:SFR'} // Bank 0 : TMR2 + {$SET_STATE_RAM '012-013:SFR:ALL'} // Bank 0 : T2CON, CCPR1L + // Bank 1 : PR2, APFCON + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : CCPR1H + {$SET_STATE_RAM '015-016:SFR:ALL'} // Bank 0 : CCP1CON, PWM1CON + // Bank 1 : WPU, IOC + {$SET_STATE_RAM '017-017:SFR'} // Bank 0 : ECCPAS + {$SET_STATE_RAM '019-01A:SFR:ALL'} // Bank 0 : VRCON, CMCON0 + // Bank 1 : PMCON2, PMADRL + {$SET_STATE_RAM '01C-01C:SFR:ALL'} // Bank 0 : CMCON1 + // Bank 1 : PMDATL + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ANSEL + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '098-098:SFR'} // Bank 1 : PMCON1 + {$SET_STATE_RAM '09B-09B:SFR'} // Bank 1 : PMADRH + {$SET_STATE_RAM '09D-09D:SFR'} // Bank 1 : PMDATH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:6B'} // PIR1 bits 7,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:BF'} // VRCON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:F5'} // CMCON0 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:1B'} // CMCON1 bits 7,6,5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:DF'} // ADCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:6B'} // PIE1 bits 7,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:13'} // APFCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:07'} // PMCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:07'} // PMADRH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:7F'} // ANSEL bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/P1A/OSC1/CLKIN + // Pin 3 : GP4/AN3/C1IN1-/T1G/P1B/OSC2/CLKOUT + // Pin 4 : GP3/T1G/MCLR/Vpp + // Pin 5 : GP2/AN2/T0CKI/INT/C1OUT/CCP1/P1A + // Pin 6 : GP1/AN1/C1IN0-/Vref/ICSPCLK + // Pin 7 : GP0/AN0/C1IN+/P1B/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator: CLKOUT function on RA4/AN3/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // EXTRCIO oscillator: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/AN3/T1G/OSC2/CLKOUT, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/AN3/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/AN3/T1G/OSC2/CLKOUT + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled + {$define _MCLRE_OFF = $3FDF} // MCLR pin is alternate function, MCLR function is internally disabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory is not code protected + {$define _CP_ON = $3FBF} // Program memory is external read and write protected + + // IOSCFS : Internal Oscillator Frequency Select + {$define _IOSCFS_8MHZ = $3FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $3F7F} // 4 MHz + + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3CFF} // BOR disabled + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3BFF} // 000h to 1FFh write protected, 200h to 7FFh may be modified by PMCON1 control + {$define _WRT_HALF = $37FF} // 000h to 3FFh write protected, 400h to 7FFh may be modified by PMCON1 control + {$define _WRT_ALL = $33FF} // 000h to 7FFh write protected, entire program memory is write protected. + +implementation +end. diff --git a/devices16/PIC12F629.pas b/devices16/PIC12F629.pas new file mode 100644 index 00000000..4827a5fa --- /dev/null +++ b/devices16/PIC12F629.pas @@ -0,0 +1,240 @@ +unit PIC12F629; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F629'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_GPIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_GPIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_EEIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_CMIF : bit absolute PIR1.3; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + CMCON : byte absolute $0019; + CMCON_COUT : bit absolute CMCON.6; + CMCON_CINV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; + CMCON_CM2 : bit absolute CMCON.2; + CMCON_CM1 : bit absolute CMCON.1; + CMCON_CM0 : bit absolute CMCON.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_EEIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_CMIE : bit absolute PIE1.3; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCAL : byte absolute $0090; + OSCCAL_CAL5 : bit absolute OSCCAL.7; + OSCCAL_CAL4 : bit absolute OSCCAL.6; + OSCCAL_CAL3 : bit absolute OSCCAL.5; + OSCCAL_CAL2 : bit absolute OSCCAL.4; + OSCCAL_CAL1 : bit absolute OSCCAL.3; + OSCCAL_CAL0 : bit absolute OSCCAL.2; + WPU : byte absolute $0095; + WPU_WPU5 : bit absolute WPU.5; + WPU_WPU4 : bit absolute WPU.4; + WPU_WPU2 : bit absolute WPU.2; + WPU_WPU1 : bit absolute WPU.1; + WPU_WPU0 : bit absolute WPU.0; + IOC : byte absolute $0096; + IOC_IOC5 : bit absolute IOC.5; + IOC_IOC4 : bit absolute IOC.4; + IOC_IOC3 : bit absolute IOC.3; + IOC_IOC2 : bit absolute IOC.2; + IOC_IOC1 : bit absolute IOC.1; + IOC_IOC0 : bit absolute IOC.0; + VRCON : byte absolute $0099; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EEADR_EEADR6 : bit absolute EEADR.6; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + EECON1 : byte absolute $009C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $009D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCCAL + {$SET_STATE_RAM '019-019:SFR:ALL'} // Bank 0 : CMCON + // Bank 1 : VRCON + {$SET_STATE_RAM '020-05F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPU, IOC + {$SET_STATE_RAM '09A-09D:SFR'} // Bank 1 : EEDATA, EEADR, EECON1, EECON2 + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:C9'} // PIR1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:C9'} // PIE1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:FC'} // OSCCAL bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:7F'} // EEADR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/OSC1/CLKIN + // Pin 3 : GP4/T1G/OSC2/CLKOUT + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI/INT/COUT + // Pin 6 : GP1/CIN-/ICSPCLK + // Pin 7 : GP0/CIN+/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled + + // PWRTE : Power-Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : GP3/MCLR pin function select + {$define _MCLRE_ON = $3FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD + + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection is disabled + {$define _CP_ON = $3F7F} // Program Memory code protection is enabled + + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + +implementation +end. diff --git a/devices16/PIC12F635.pas b/devices16/PIC12F635.pas new file mode 100644 index 00000000..04895476 --- /dev/null +++ b/devices16/PIC12F635.pas @@ -0,0 +1,301 @@ +unit PIC12F635; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F635'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RAIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RAIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_EEIF : bit absolute PIR1.7; + PIR1_LVDIF : bit absolute PIR1.6; + PIR1_CRIF : bit absolute PIR1.5; + PIR1_C1IF : bit absolute PIR1.3; + PIR1_OSFIF : bit absolute PIR1.2; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1GINV : bit absolute T1CON.7; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + WDTCON : byte absolute $0018; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + CMCON0 : byte absolute $0019; + CMCON0_COUT : bit absolute CMCON0.6; + CMCON0_CINV : bit absolute CMCON0.4; + CMCON0_CIS : bit absolute CMCON0.3; + CMCON0_CM2 : bit absolute CMCON0.2; + CMCON0_CM1 : bit absolute CMCON0.1; + CMCON0_CM0 : bit absolute CMCON0.0; + CMCON1 : byte absolute $001A; + CMCON1_T1GSS : bit absolute CMCON1.1; + CMCON1_CMSYNC : bit absolute CMCON1.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_EEIE : bit absolute PIE1.7; + PIE1_LVDIE : bit absolute PIE1.6; + PIE1_CRIE : bit absolute PIE1.5; + PIE1_C1IE : bit absolute PIE1.3; + PIE1_OSFIE : bit absolute PIE1.2; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_ULPWUE : bit absolute PCON.5; + PCON_SBOREN : bit absolute PCON.4; + PCON_nWUR : bit absolute PCON.3; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF2 : bit absolute OSCCON.6; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; + OSCCON_OSTS : bit absolute OSCCON.3; + OSCCON_HTS : bit absolute OSCCON.2; + OSCCON_LTS : bit absolute OSCCON.1; + OSCCON_SCS : bit absolute OSCCON.0; + OSCTUNE : byte absolute $0090; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + LVDCON : byte absolute $0094; + LVDCON_IRVST : bit absolute LVDCON.5; + LVDCON_LVDEN : bit absolute LVDCON.4; + LVDCON_LVDL2 : bit absolute LVDCON.2; + LVDCON_LVDL1 : bit absolute LVDCON.1; + LVDCON_LVDL0 : bit absolute LVDCON.0; + WPUDA : byte absolute $0095; + WPUDA_WPUDA5 : bit absolute WPUDA.5; + WPUDA_WPUDA4 : bit absolute WPUDA.4; + WPUDA_WPUDA2 : bit absolute WPUDA.2; + WPUDA_WPUDA1 : bit absolute WPUDA.1; + WPUDA_WPUDA0 : bit absolute WPUDA.0; + IOCA : byte absolute $0096; + IOCA_IOCA5 : bit absolute IOCA.5; + IOCA_IOCA4 : bit absolute IOCA.4; + IOCA_IOCA3 : bit absolute IOCA.3; + IOCA_IOCA2 : bit absolute IOCA.2; + IOCA_IOCA1 : bit absolute IOCA.1; + IOCA_IOCA0 : bit absolute IOCA.0; + WDA : byte absolute $0097; + WDA_WDA5 : bit absolute WDA.5; + WDA_WDA4 : bit absolute WDA.4; + WDA_WDA2 : bit absolute WDA.2; + WDA_WDA1 : bit absolute WDA.1; + WDA_WDA0 : bit absolute WDA.0; + VRCON : byte absolute $0099; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $009D; + CRCON : byte absolute $0110; + CRCON_GO_nDONE : bit absolute CRCON.7; + CRCON_ENC_nDEC : bit absolute CRCON.6; + CRCON_CRREG1 : bit absolute CRCON.1; + CRCON_CRREG0 : bit absolute CRCON.0; + CRDAT0 : byte absolute $0111; + CRDAT1 : byte absolute $0112; + CRDAT2 : byte absolute $0113; + CRDAT3 : byte absolute $0114; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + // Bank 2 : GPIO + // Bank 3 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : WDTCON, CMCON0, CMCON1 + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '094-097:SFR'} // Bank 1 : LVDCON, WPUDA, IOCA, WDA + {$SET_STATE_RAM '099-09D:SFR'} // Bank 1 : VRCON, EEDAT, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '110-114:SFR'} // Bank 2 : CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-105:bnk0'} // maps to GPIO (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-185:bnk1'} // maps to TRISIO (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:ED'} // PIR1 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON0 bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:ED'} // PIE1 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3B'} // PCON bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:37'} // WDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:C3'} // CRCON bits 5,4,3,2 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/OSC1/CLKIN + // Pin 3 : GP4/T1G/OSC2/CLKOUT + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/T0CKI/INT/C1OUT + // Pin 6 : GP1/C1IN-/ICSPCLK + // Pin 7 : GP0/C1IN+/ICSPDAT/ULPWU + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is alternate function, MCLR function is internally disabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory is not code protected + {$define _CP_ON = $3FBF} // Program memory is external read and write-protected + + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory is not code protected + {$define _CPD_ON = $3F7F} // Data memory is external read protected + + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOD enabled and SBOdEN bit disabled + {$define _BOREN_NSLEEP = $3EFF} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. + {$define _BOREN_SBODEN = $3DFF} // SBODEN controls BOD function + {$define _BOREN_OFF = $3CFF} // BOD and SBODEN disabled + + // IESO : Internal-External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode disabled + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor disabled + + // WURE : Wake-Up Reset Enable bit + {$define _WURE_OFF = $3FFF} // Standard wake-up and continue enabled + {$define _WURE_ON = $2FFF} // Wake-up and Reset enabled + +implementation +end. diff --git a/devices16/PIC12F675.pas b/devices16/PIC12F675.pas new file mode 100644 index 00000000..ba4247e2 --- /dev/null +++ b/devices16/PIC12F675.pas @@ -0,0 +1,261 @@ +unit PIC12F675; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F675'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + GPIO : byte absolute $0005; + GPIO_GP5 : bit absolute GPIO.5; + GPIO_GP4 : bit absolute GPIO.4; + GPIO_GP3 : bit absolute GPIO.3; + GPIO_GP2 : bit absolute GPIO.2; + GPIO_GP1 : bit absolute GPIO.1; + GPIO_GP0 : bit absolute GPIO.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_GPIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_GPIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_EEIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_CMIF : bit absolute PIR1.3; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_TMR1GE : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + CMCON : byte absolute $0019; + CMCON_COUT : bit absolute CMCON.6; + CMCON_CINV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; + CMCON_CM2 : bit absolute CMCON.2; + CMCON_CM1 : bit absolute CMCON.1; + CMCON_CM0 : bit absolute CMCON.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADFM : bit absolute ADCON0.7; + ADCON0_VCFG : bit absolute ADCON0.6; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISIO : byte absolute $0085; + TRISIO_TRISIO5 : bit absolute TRISIO.5; + TRISIO_TRISIO4 : bit absolute TRISIO.4; + TRISIO_TRISIO3 : bit absolute TRISIO.3; + TRISIO_TRISIO2 : bit absolute TRISIO.2; + TRISIO_TRISIO1 : bit absolute TRISIO.1; + TRISIO_TRISIO0 : bit absolute TRISIO.0; + PIE1 : byte absolute $008C; + PIE1_EEIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_CMIE : bit absolute PIE1.3; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCAL : byte absolute $0090; + OSCCAL_CAL5 : bit absolute OSCCAL.7; + OSCCAL_CAL4 : bit absolute OSCCAL.6; + OSCCAL_CAL3 : bit absolute OSCCAL.5; + OSCCAL_CAL2 : bit absolute OSCCAL.4; + OSCCAL_CAL1 : bit absolute OSCCAL.3; + OSCCAL_CAL0 : bit absolute OSCCAL.2; + WPU : byte absolute $0095; + WPU_WPU5 : bit absolute WPU.5; + WPU_WPU4 : bit absolute WPU.4; + WPU_WPU2 : bit absolute WPU.2; + WPU_WPU1 : bit absolute WPU.1; + WPU_WPU0 : bit absolute WPU.0; + IOC : byte absolute $0096; + IOC_IOC5 : bit absolute IOC.5; + IOC_IOC4 : bit absolute IOC.4; + IOC_IOC3 : bit absolute IOC.3; + IOC_IOC2 : bit absolute IOC.2; + IOC_IOC1 : bit absolute IOC.1; + IOC_IOC0 : bit absolute IOC.0; + VRCON : byte absolute $0099; + VRCON_VREN : bit absolute VRCON.7; + VRCON_VRR : bit absolute VRCON.5; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EEADR_EEADR6 : bit absolute EEADR.6; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + EECON1 : byte absolute $009C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ANSEL : byte absolute $009F; + ANSEL_ADCS2 : bit absolute ANSEL.6; + ANSEL_ADCS1 : bit absolute ANSEL.5; + ANSEL_ADCS0 : bit absolute ANSEL.4; + ANSEL_ANS3 : bit absolute ANSEL.3; + ANSEL_ANS2 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCCAL + {$SET_STATE_RAM '019-019:SFR:ALL'} // Bank 0 : CMCON + // Bank 1 : VRCON + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ANSEL + {$SET_STATE_RAM '020-05F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPU, IOC + {$SET_STATE_RAM '09A-09D:SFR'} // Bank 1 : EEDATA, EEADR, EECON1, EECON2 + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:C9'} // PIR1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:CF'} // ADCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:C9'} // PIE1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:FC'} // OSCCAL bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:7F'} // EEADR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:7F'} // ANSEL bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : GP5/T1CKI/OSC1/CLKIN + // Pin 3 : GP4/AN3/T1G/OSC2/CLKOUT + // Pin 4 : GP3/MCLR/Vpp + // Pin 5 : GP2/AN2/T0CKI/INT/COUT + // Pin 6 : GP1/AN1/CIN-/Vref/ICSPCLK + // Pin 7 : GP0/AN0/CIN+/ICSPDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled + + // PWRTE : Power-Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled + + // MCLRE : GP3/MCLR pin function select + {$define _MCLRE_ON = $3FFF} // GP3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD + + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection is disabled + {$define _CP_ON = $3F7F} // Program Memory code protection is enabled + + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + +implementation +end. diff --git a/PIC12F683.pas b/devices16/PIC12F683.pas similarity index 51% rename from PIC12F683.pas rename to devices16/PIC12F683.pas index 6e9b8577..b7159003 100644 --- a/PIC12F683.pas +++ b/devices16/PIC12F683.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -30,8 +30,13 @@ interface GPIO_GP2 : bit absolute GPIO.2; GPIO_GP1 : bit absolute GPIO.1; GPIO_GP0 : bit absolute GPIO.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -40,23 +45,23 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_CCP1IF : bit absolute PIR1.5; - PIR1_CMIF : bit absolute PIR1.4; - PIR1_OSFIF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CMIF : bit absolute PIR1.3; + PIR1_OSFIF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -66,7 +71,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0013; CCPR1H : byte absolute $0014; CCP1CON : byte absolute $0015; @@ -84,24 +90,24 @@ interface WDTCON_SWDTEN : bit absolute WDTCON.0; CMCON0 : byte absolute $0019; CMCON0_COUT : bit absolute CMCON0.6; - CMCON0_CINV : bit absolute CMCON0.5; - CMCON0_CIS : bit absolute CMCON0.4; + CMCON0_CINV : bit absolute CMCON0.4; + CMCON0_CIS : bit absolute CMCON0.3; CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - CMCON1 : byte absolute $001a; + CMCON1 : byte absolute $001A; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_CMSYNC : bit absolute CMCON1.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.4; - ADCON0_GO_nDONE : bit absolute ADCON0.3; - ADCON0_ADON : bit absolute ADCON0.2; - ADCON0_GO : bit absolute ADCON0.1; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_GPPU : bit absolute OPTION_REG.7; + OPTION_REG_nGPPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -116,20 +122,20 @@ interface TRISIO_TRISIO2 : bit absolute TRISIO.2; TRISIO_TRISIO1 : bit absolute TRISIO.1; TRISIO_TRISIO0 : bit absolute TRISIO.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_CCP1IE : bit absolute PIE1.5; - PIE1_CMIE : bit absolute PIE1.4; - PIE1_OSFIE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CMIE : bit absolute PIE1.3; + PIE1_OSFIE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBODEN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOD : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOD : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -147,9 +153,9 @@ interface WPU : byte absolute $0095; WPU_WPU5 : bit absolute WPU.5; WPU_WPU4 : bit absolute WPU.4; - WPU_WPU2 : bit absolute WPU.3; - WPU_WPU1 : bit absolute WPU.2; - WPU_WPU0 : bit absolute WPU.1; + WPU_WPU2 : bit absolute WPU.2; + WPU_WPU1 : bit absolute WPU.1; + WPU_WPU0 : bit absolute WPU.0; IOC : byte absolute $0096; IOC_IOC5 : bit absolute IOC.5; IOC_IOC4 : bit absolute IOC.4; @@ -158,22 +164,22 @@ interface IOC_IOC1 : bit absolute IOC.1; IOC_IOC0 : bit absolute IOC.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ANSEL : byte absolute $009f; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ANSEL : byte absolute $009F; ANSEL_ADCS2 : bit absolute ANSEL.6; ANSEL_ADCS1 : bit absolute ANSEL.5; ANSEL_ADCS0 : bit absolute ANSEL.4; @@ -185,51 +191,63 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, GPIO - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-015:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '018-01A:SFR'} // WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISIO - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-090:SFR'} // PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '095-096:SFR'} // WPU, IOC - {$SET_STATE_RAM '099-09F:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2, ADRESL, ANSEL - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : GPIO + // Bank 1 : TRISIO + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-010:SFR:ALL'} // Bank 0 : TMR1L, TMR1H, T1CON + // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '011-011:SFR'} // Bank 0 : TMR2 + {$SET_STATE_RAM '012-012:SFR:ALL'} // Bank 0 : T2CON + // Bank 1 : PR2 + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : CCPR1L, CCPR1H + {$SET_STATE_RAM '015-015:SFR:ALL'} // Bank 0 : CCP1CON + // Bank 1 : WPU + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : WDTCON + {$SET_STATE_RAM '019-01A:SFR:ALL'} // Bank 0 : CMCON0, CMCON1 + // Bank 1 : VRCON, EEDAT + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ANSEL + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '096-096:SFR'} // Bank 1 : IOC + {$SET_STATE_RAM '09B-09D:SFR'} // Bank 1 : EEADR, EECON1, EECON2 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // GPIO - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:EF'} // PIR1 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '015:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '019:5F'} // CMCON0 - {$SET_UNIMP_BITS '01A:03'} // CMCON1 - {$SET_UNIMP_BITS '01F:CF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISIO - {$SET_UNIMP_BITS '08C:EF'} // PIE1 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPU - {$SET_UNIMP_BITS '096:3F'} // IOC - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:7F'} // ANSEL + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // GPIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:EF'} // PIR1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON0 bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:CF'} // ADCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISIO bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:EF'} // PIE1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPU bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:7F'} // ANSEL bit 7 un-implemented (read as 0) // -- PIN mapping -- @@ -246,53 +264,54 @@ interface // -- RAM to PIN mapping -- + {$MAP_RAM_TO_PIN '005:0-7,1-6,2-5,3-4,4-3,5-2'} // GPIO // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown Out Detect - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown Out Detect + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin - {$define _FOSC_EXTRCIO = $0DFF} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin - {$define _FOSC_INTOSCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC12F752.pas b/devices16/PIC12F752.pas similarity index 52% rename from PIC12F752.pas rename to devices16/PIC12F752.pas index 740128ce..4ff9be19 100644 --- a/PIC12F752.pas +++ b/devices16/PIC12F752.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface IOCAF_IOCAF2 : bit absolute IOCAF.2; IOCAF_IOCAF1 : bit absolute IOCAF.1; IOCAF_IOCAF0 : bit absolute IOCAF.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,18 +52,18 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_IOCIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_TMR1GIF : bit absolute PIR1.5; - PIR1_ADIF : bit absolute PIR1.4; - PIR1_HLTMR1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - PIR2 : byte absolute $000d; - PIR2_C2IF : bit absolute PIR2.4; - PIR2_C1IF : bit absolute PIR2.3; + PIR1 : byte absolute $000C; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_HLTMR1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; + PIR2_C2IF : bit absolute PIR2.5; + PIR2_C1IF : bit absolute PIR2.4; PIR2_COG1IF : bit absolute PIR2.2; - PIR2_CCP1IF : bit absolute PIR2.1; - TMR1L : byte absolute $000f; + PIR2_CCP1IF : bit absolute PIR2.0; + TMR1L : byte absolute $000F; TMR1H : byte absolute $0010; T1CON : byte absolute $0011; T1CON_TMR1CS1 : bit absolute T1CON.7; @@ -66,8 +71,8 @@ interface T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_reserved : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; T1GCON : byte absolute $0012; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; @@ -75,7 +80,8 @@ interface T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; CCPR1L : byte absolute $0013; CCPR1H : byte absolute $0014; CCP1CON : byte absolute $0015; @@ -85,22 +91,23 @@ interface CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRESL : byte absolute $001c; - ADRESH : byte absolute $001d; - ADCON0 : byte absolute $001e; + ADRESL : byte absolute $001C; + ADRESH : byte absolute $001D; + ADCON0 : byte absolute $001E; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_CHS3 : bit absolute ADCON0.4; - ADCON0_CHS2 : bit absolute ADCON0.3; - ADCON0_CHS1 : bit absolute ADCON0.2; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; - ADCON1 : byte absolute $001f; + ADCON1 : byte absolute $001F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -122,18 +129,18 @@ interface IOCAP_IOCAP2 : bit absolute IOCAP.2; IOCAP_IOCAP1 : bit absolute IOCAP.1; IOCAP_IOCAP0 : bit absolute IOCAP.0; - PIE1 : byte absolute $008c; - PIE1_TMR1GIE : bit absolute PIE1.5; - PIE1_ADIE : bit absolute PIE1.4; - PIE1_HLTMR1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PIE2 : byte absolute $008d; - PIE2_C2IE : bit absolute PIE2.4; - PIE2_C1IE : bit absolute PIE2.3; + PIE1 : byte absolute $008C; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_HLTMR1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; + PIE2_C2IE : bit absolute PIE2.5; + PIE2_C1IE : bit absolute PIE2.4; PIE2_COG1IE : bit absolute PIE2.2; - PIE2_CCP1IE : bit absolute PIE2.1; - OSCCON : byte absolute $008f; + PIE2_CCP1IE : bit absolute PIE2.0; + OSCCON : byte absolute $008F; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_HTS : bit absolute OSCCON.2; @@ -144,9 +151,9 @@ interface FVRCON_FVRBUFEN : bit absolute FVRCON.5; FVRCON_FVRBUFSS : bit absolute FVRCON.4; DACCON0 : byte absolute $0091; - DACCON0_DACEN : bit absolute DACCON0.5; - DACCON0_DACRNG : bit absolute DACCON0.4; - DACCON0_DACOE : bit absolute DACCON0.3; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACRNG : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; DACCON0_DACPSS0 : bit absolute DACCON0.2; DACCON1 : byte absolute $0092; DACCON1_DACR4 : bit absolute DACCON1.4; @@ -154,7 +161,7 @@ interface DACCON1_DACR2 : bit absolute DACCON1.2; DACCON1_DACR1 : bit absolute DACCON1.1; DACCON1_DACR0 : bit absolute DACCON1.0; - CM2CON0 : byte absolute $009b; + CM2CON0 : byte absolute $009B; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; @@ -163,13 +170,13 @@ interface CM2CON0_C2SP : bit absolute CM2CON0.2; CM2CON0_C2HYS : bit absolute CM2CON0.1; CM2CON0_C2SYNC : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $009c; + CM2CON1 : byte absolute $009C; CM2CON1_C2INTP : bit absolute CM2CON1.7; CM2CON1_C2INTN : bit absolute CM2CON1.6; CM2CON1_C2PCH1 : bit absolute CM2CON1.5; CM2CON1_C2PCH0 : bit absolute CM2CON1.4; - CM2CON1_C2NCH0 : bit absolute CM2CON1.3; - CM1CON0 : byte absolute $009d; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CM1CON0 : byte absolute $009D; CM1CON0_C1ON : bit absolute CM1CON0.7; CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; @@ -178,21 +185,21 @@ interface CM1CON0_C1SP : bit absolute CM1CON0.2; CM1CON0_C1HYS : bit absolute CM1CON0.1; CM1CON0_C1SYNC : bit absolute CM1CON0.0; - CM1CON1 : byte absolute $009e; + CM1CON1 : byte absolute $009E; CM1CON1_C1INTP : bit absolute CM1CON1.7; CM1CON1_C1INTN : bit absolute CM1CON1.6; CM1CON1_C1PCH1 : bit absolute CM1CON1.5; CM1CON1_C1PCH0 : bit absolute CM1CON1.4; - CM1CON1_C1NCH0 : bit absolute CM1CON1.3; - CMOUT : byte absolute $009f; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $009F; CMOUT_MCOUT2 : bit absolute CMOUT.1; CMOUT_MCOUT1 : bit absolute CMOUT.0; LATA : byte absolute $0105; LATA_LATA5 : bit absolute LATA.5; LATA_LATA4 : bit absolute LATA.4; - LATA_LATA2 : bit absolute LATA.3; - LATA_LATA1 : bit absolute LATA.2; - LATA_LATA0 : bit absolute LATA.1; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; IOCAN : byte absolute $0108; IOCAN_IOCAN5 : bit absolute IOCAN.5; IOCAN_IOCAN4 : bit absolute IOCAN.4; @@ -200,19 +207,19 @@ interface IOCAN_IOCAN2 : bit absolute IOCAN.2; IOCAN_IOCAN1 : bit absolute IOCAN.1; IOCAN_IOCAN0 : bit absolute IOCAN.0; - WPUA : byte absolute $010c; + WPUA : byte absolute $010C; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; WPUA_WPUA3 : bit absolute WPUA.3; WPUA_WPUA2 : bit absolute WPUA.2; WPUA_WPUA1 : bit absolute WPUA.1; WPUA_WPUA0 : bit absolute WPUA.0; - SLRCONA : byte absolute $010d; + SLRCONA : byte absolute $010D; SLRCONA_SLRA2 : bit absolute SLRCONA.2; - SLRCONA_SLRA0 : bit absolute SLRCONA.1; - PCON : byte absolute $010f; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + PCON : byte absolute $010F; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; TMR2 : byte absolute $0110; PR2 : byte absolute $0111; T2CON : byte absolute $0112; @@ -221,7 +228,8 @@ interface T2CON_T2OUTPS1 : bit absolute T2CON.4; T2CON_T2OUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; HLTMR1 : byte absolute $0113; HLTPR1 : byte absolute $0114; HLT1CON0 : byte absolute $0115; @@ -230,7 +238,8 @@ interface HLT1CON0_H1OUTPS1 : bit absolute HLT1CON0.4; HLT1CON0_H1OUTPS0 : bit absolute HLT1CON0.3; HLT1CON0_H1ON : bit absolute HLT1CON0.2; - HLT1CON0_H1CKPS0 : bit absolute HLT1CON0.1; + HLT1CON0_H1CKPS1 : bit absolute HLT1CON0.1; + HLT1CON0_H1CKPS0 : bit absolute HLT1CON0.0; HLT1CON1 : byte absolute $0116; HLT1CON1_H1ERS2 : bit absolute HLT1CON1.4; HLT1CON1_H1ERS1 : bit absolute HLT1CON1.3; @@ -240,29 +249,37 @@ interface ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; - ANSELA_ANSA2 : bit absolute ANSELA.3; - ANSELA_ANSA1 : bit absolute ANSELA.2; - ANSELA_ANSA0 : bit absolute ANSELA.1; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; APFCON : byte absolute $0188; APFCON_T1GSEL : bit absolute APFCON.4; - APFCON_COG1FSEL : bit absolute APFCON.3; - APFCON_COG1O1SEL : bit absolute APFCON.2; - APFCON_COG1O0SEL : bit absolute APFCON.1; + APFCON_COG1FSEL : bit absolute APFCON.2; + APFCON_COG1O1SEL : bit absolute APFCON.1; + APFCON_COG1O0SEL : bit absolute APFCON.0; OSCTUNE : byte absolute $0189; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; OSCTUNE_TUN3 : bit absolute OSCTUNE.3; OSCTUNE_TUN2 : bit absolute OSCTUNE.2; OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; - PMCON1 : byte absolute $018c; - PMCON1_WREN : bit absolute PMCON1.3; - PMCON1_WR : bit absolute PMCON1.2; - PMCON1_RD : bit absolute PMCON1.1; - PMCON2 : byte absolute $018d; - PMADRL : byte absolute $018e; - PMADRH : byte absolute $018f; + PMCON1 : byte absolute $018C; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $018D; + PMADRL : byte absolute $018E; + PMADRH : byte absolute $018F; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; PMDATL : byte absolute $0190; PMDATH : byte absolute $0191; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; COG1PH : byte absolute $0192; COG1PH_G1PH3 : bit absolute COG1PH.3; COG1PH_G1PH2 : bit absolute COG1PH.2; @@ -278,10 +295,10 @@ interface COG1BLK_G1BLKF1 : bit absolute COG1BLK.1; COG1BLK_G1BLKF0 : bit absolute COG1BLK.0; COG1DB : byte absolute $0194; - COG1DB_G1BDR3 : bit absolute COG1DB.7; - COG1DB_G1BDR2 : bit absolute COG1DB.6; - COG1DB_G1BDR1 : bit absolute COG1DB.5; - COG1DB_G1BDR0 : bit absolute COG1DB.4; + COG1DB_G1DBR3 : bit absolute COG1DB.7; + COG1DB_G1DBR2 : bit absolute COG1DB.6; + COG1DB_G1DBR1 : bit absolute COG1DB.5; + COG1DB_G1DBR0 : bit absolute COG1DB.4; COG1DB_G1DBF3 : bit absolute COG1DB.3; COG1DB_G1DBF2 : bit absolute COG1DB.2; COG1DB_G1DBF1 : bit absolute COG1DB.1; @@ -293,7 +310,8 @@ interface COG1CON0_G1POL1 : bit absolute COG1CON0.4; COG1CON0_G1POL0 : bit absolute COG1CON0.3; COG1CON0_G1LD : bit absolute COG1CON0.2; - COG1CON0_G1CS0 : bit absolute COG1CON0.1; + COG1CON0_G1CS1 : bit absolute COG1CON0.1; + COG1CON0_G1CS0 : bit absolute COG1CON0.0; COG1CON1 : byte absolute $0196; COG1CON1_G1FSIM : bit absolute COG1CON1.7; COG1CON1_G1RSIM : bit absolute COG1CON1.6; @@ -316,81 +334,84 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '008-008:SFR'} // IOCAF - {$SET_STATE_RAM '00A-00D:SFR'} // PCLATH, INTCON, PIR1, PIR2 - {$SET_STATE_RAM '00F-015:SFR'} // TMR1L, TMR1H, T1CON, T1GCON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01C-01F:SFR'} // ADRESL, ADRESH, ADCON0, ADCON1 - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '088-088:SFR'} // IOCAP - {$SET_STATE_RAM '08A-08D:SFR'} // PCLATH, INTCON, PIE1, PIE2 - {$SET_STATE_RAM '08F-092:SFR'} // OSCCON, FVRCON, DACCON0, DACCON1 - {$SET_STATE_RAM '09B-09F:SFR'} // CM2CON0, CM2CON1, CM1CON0, CM1CON1, CMOUT - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, LATA - {$SET_STATE_RAM '108-108:SFR'} // IOCAN - {$SET_STATE_RAM '10A-10D:SFR'} // PCLATH, INTCON, WPUA, SLRCONA - {$SET_STATE_RAM '10F-116:SFR'} // PCON, TMR2, PR2, T2CON, HLTMR1, HLTPR1, HLT1CON0, HLT1CON1 - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA - {$SET_STATE_RAM '188-197:SFR'} // APFCON, OSCTUNE, PCLATH, INTCON, PMCON1, PMCON2, PMADRL, PMADRH, PMDATL, PMDATH, COG1PH, COG1BLK, COG1DB, COG1CON0, COG1CON1, COG1ASD - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + // Bank 2 : LATA + // Bank 3 : ANSELA + {$SET_STATE_RAM '008-008:SFR:ALL'} // Bank 0 : IOCAF + // Bank 1 : IOCAP + // Bank 2 : IOCAN + // Bank 3 : APFCON + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : WPUA, SLRCONA + // Bank 3 : PMCON1, PMCON2 + {$SET_STATE_RAM '00F-012:SFR:ALL'} // Bank 0 : TMR1L, TMR1H, T1CON, T1GCON + // Bank 1 : OSCCON, FVRCON, DACCON0, DACCON1 + // Bank 2 : PCON, TMR2, PR2, T2CON + // Bank 3 : PMADRH, PMDATL, PMDATH, COG1PH + {$SET_STATE_RAM '013-015:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : CM2CON0, CM2CON1, CM1CON0, CM1CON1, CMOUT + {$SET_STATE_RAM '113-116:SFR'} // Bank 2 : HLTMR1, HLTPR1, HLT1CON0, HLT1CON1 + {$SET_STATE_RAM '189-189:SFR'} // Bank 3 : OSCTUNE + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : PMADRL + {$SET_STATE_RAM '193-197:SFR'} // Bank 3 : COG1BLK, COG1DB, COG1CON0, COG1CON1, COG1ASD - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '100-104:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '008:3F'} // IOCAF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:C7'} // PIR1 - {$SET_UNIMP_BITS '00D:35'} // PIR2 - {$SET_UNIMP_BITS '011:F0'} // T1CON - {$SET_UNIMP_BITS '012:03'} // T1GCON - {$SET_UNIMP_BITS '015:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:70'} // ADCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '088:3F'} // IOCAP - {$SET_UNIMP_BITS '08C:C7'} // PIE1 - {$SET_UNIMP_BITS '08D:35'} // PIE2 - {$SET_UNIMP_BITS '08F:36'} // OSCCON - {$SET_UNIMP_BITS '090:F0'} // FVRCON - {$SET_UNIMP_BITS '091:E4'} // DACCON0 - {$SET_UNIMP_BITS '092:1F'} // DACCON1 - {$SET_UNIMP_BITS '09C:F1'} // CM2CON1 - {$SET_UNIMP_BITS '09E:F1'} // CM1CON1 - {$SET_UNIMP_BITS '09F:03'} // CMOUT - {$SET_UNIMP_BITS '105:37'} // LATA - {$SET_UNIMP_BITS '108:3F'} // IOCAN - {$SET_UNIMP_BITS '10C:3F'} // WPUA - {$SET_UNIMP_BITS '10D:05'} // SLRCONA - {$SET_UNIMP_BITS '10F:03'} // PCON - {$SET_UNIMP_BITS '111:00'} // PR2 - {$SET_UNIMP_BITS '112:7B'} // T2CON - {$SET_UNIMP_BITS '114:00'} // HLTPR1 - {$SET_UNIMP_BITS '115:7B'} // HLT1CON0 - {$SET_UNIMP_BITS '116:1F'} // HLT1CON1 - {$SET_UNIMP_BITS '185:37'} // ANSELA - {$SET_UNIMP_BITS '188:17'} // APFCON - {$SET_UNIMP_BITS '189:1F'} // OSCTUNE - {$SET_UNIMP_BITS '18C:07'} // PMCON1 - {$SET_UNIMP_BITS '18F:03'} // PMADRH - {$SET_UNIMP_BITS '191:3F'} // PMDATH - {$SET_UNIMP_BITS '192:0F'} // COG1PH + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:C7'} // PIR1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:35'} // PIR2 bits 7,6,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '088:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:C7'} // PIE1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:35'} // PIE2 bits 7,6,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:36'} // OSCCON bits 7,6,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:F0'} // FVRCON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:E4'} // DACCON0 bits 4,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:F1'} // CM2CON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F1'} // CM1CON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:05'} // SLRCONA bits 7,6,5,4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:7F'} // HLT1CON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:1F'} // HLT1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '188:17'} // APFCON bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:07'} // PMCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:03'} // PMADRH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '191:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '192:0F'} // COG1PH bits 7,6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -412,44 +433,44 @@ interface // -- Bits Configuration -- - // DEBUG : Debug Mode Enable bit - {$define _DEBUG_OFF = $3F79} // Debug mode disabled - {$define _DEBUG_ON = $3F78} // Debug mode enabled + // FOSC0 : FOSC: Oscillator Selection bit + {$define _FOSC0_EC = $3FFF} // EC oscillator mode. CLKIN function on RA5/CLKIN + {$define _FOSC0_INT = $3FFE} // Internal oscillator mode. I/O function on RA5/CLKIN - // CLKOUTEN : Clock Out Enable bit - {$define _CLKOUTEN_OFF = $3F7B} // CLKOUT function disabled. CLKOUT pin acts as I/O - {$define _CLKOUTEN_ON = $3F79} // CLKOUT function enabled. CLKOUT pin is CLKOUT + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // Watchdog Timer enabled + {$define _WDTE_OFF = $3FF7} // Watchdog Timer disabled - // WRT : Flash Program Memory Self Write Enable bit - {$define _WRT_OFF = $3F7D} // Flash self-write protection off - {$define _WRT_FOURTH = $3F79} // 000h to 0FFh self-write protected - {$define _WRT_HALF = $3F75} // 000h to 1FFh self-write protected - {$define _WRT_ALL = $3F71} // 000h to 3FFh self-write protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // Power-up Timer disabled + {$define _PWRTE_ON = $3FEF} // Power-up Timer enabled - // BOREN : Brown-out Reset Enable bits - {$define _BOREN_EN = $3F79} // BOR enabled - {$define _BOREN_SLEEP_DIS = $3F69} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_DIS = $3F49} // BOR disabled + // MCLRE : MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function with internal weak pullup + {$define _MCLRE_OFF = $3FDF} // MCLR pin is alternate function // CP : Code Protection bit - {$define _CP_OFF = $3F79} // Program memory code protection is disabled - {$define _CP_ON = $3F39} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FF9} // MCLR pin is MCLR function with internal weak pullup - {$define _MCLRE_OFF = $3F79} // MCLR pin is alternate function + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_EN = $3FFF} // BOR enabled + {$define _BOREN_SLEEP_DIS = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_DIS = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F79} // Power-up Timer disabled - {$define _PWRTE_ON = $3E79} // Power-up Timer enabled + // WRT : Flash Program Memory Self Write Enable bit + {$define _WRT_OFF = $3FFF} // Flash self-write protection off + {$define _WRT_FOURTH = $3BFF} // 000h to 0FFh self-write protected + {$define _WRT_HALF = $37FF} // 000h to 1FFh self-write protected + {$define _WRT_ALL = $33FF} // 000h to 3FFh self-write protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F79} // Watchdog Timer enabled - {$define _WDTE_OFF = $3D79} // Watchdog Timer disabled + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function disabled. CLKOUT pin acts as I/O + {$define _CLKOUTEN_ON = $2FFF} // CLKOUT function enabled. CLKOUT pin is CLKOUT - // FOSC0 : FOSC: Oscillator Selection bit - {$define _FOSC0_EC = $3F79} // EC oscillator mode. CLKIN function on RA5/CLKIN - {$define _FOSC0_INT = $3B79} // Internal oscillator mode. I/O function on RA5/CLKIN + // DEBUG : Debug Mode Enable bit + {$define _DEBUG_OFF = $3FFF} // Debug mode disabled + {$define _DEBUG_ON = $1FFF} // Debug mode enabled implementation end. diff --git a/units/PIC16C63.pas b/devices16/PIC16C63.pas similarity index 100% rename from units/PIC16C63.pas rename to devices16/PIC16C63.pas diff --git a/PIC16F610.pas b/devices16/PIC16F610.pas similarity index 54% rename from PIC16F610.pas rename to devices16/PIC16F610.pas index 1d8010d2..d4cb8608 100644 --- a/PIC16F610.pas +++ b/devices16/PIC16F610.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -47,19 +52,19 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_C2IF : bit absolute PIR1.3; - PIR1_C1IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1 : byte absolute $000C; + PIR1_C2IF : bit absolute PIR1.4; + PIR1_C1IF : bit absolute PIR1.3; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; VRCON : byte absolute $0019; @@ -71,32 +76,32 @@ interface VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - CM1CON0 : byte absolute $001a; + CM1CON0 : byte absolute $001A; CM1CON0_C1ON : bit absolute CM1CON0.7; CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $001b; + CM2CON0 : byte absolute $001B; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $001c; + CM2CON1 : byte absolute $001C; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1ACS : bit absolute CM2CON1.5; - CM2CON1_C1HYS : bit absolute CM2CON1.4; - CM2CON1_C2HYS : bit absolute CM2CON1.3; - CM2CON1_T1GSS : bit absolute CM2CON1.2; - CM2CON1_C2SYNC : bit absolute CM2CON1.1; + CM2CON1_T1ACS : bit absolute CM2CON1.4; + CM2CON1_C1HYS : bit absolute CM2CON1.3; + CM2CON1_C2HYS : bit absolute CM2CON1.2; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -118,13 +123,13 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_C2IE : bit absolute PIE1.3; - PIE1_C1IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE1 : byte absolute $008C; + PIE1_C2IE : bit absolute PIE1.4; + PIE1_C1IE : bit absolute PIE1.3; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; OSCTUNE_TUN3 : bit absolute OSCTUNE.3; @@ -136,14 +141,14 @@ interface ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS1 : bit absolute ANSEL.3; - ANSEL_ANS0 : bit absolute ANSEL.2; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -158,57 +163,65 @@ interface SRCON0_C2REN : bit absolute SRCON0.4; SRCON0_PULSS : bit absolute SRCON0.3; SRCON0_PULSR : bit absolute SRCON0.2; - SRCON0_SRCLKEN : bit absolute SRCON0.1; - SRCON1 : byte absolute $009a; + SRCON0_SRCLKEN : bit absolute SRCON0.0; + SRCON1 : byte absolute $009A; SRCON1_SRCS1 : bit absolute SRCON1.7; SRCON1_SRCS0 : bit absolute SRCON1.6; // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-01C:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-091:SFR'} // OSCTUNE, ANSEL - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '099-09A:SFR'} // SRCON0, SRCON1 - {$SET_STATE_RAM '0F0-0FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCTUNE + {$SET_STATE_RAM '019-01A:SFR:ALL'} // Bank 0 : VRCON, CM1CON0 + // Bank 1 : SRCON0, SRCON1 + {$SET_STATE_RAM '01B-01C:SFR'} // Bank 0 : CM2CON0, CM2CON1 + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '091-091:SFR'} // Bank 1 : ANSEL + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPUA, IOCA - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:19'} // PIR1 - {$SET_UNIMP_BITS '01A:F7'} // CM1CON0 - {$SET_UNIMP_BITS '01B:F7'} // CM2CON0 - {$SET_UNIMP_BITS '01C:DF'} // CM2CON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:19'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '091:F3'} // ANSEL - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '099:FD'} // SRCON0 - {$SET_UNIMP_BITS '09A:C0'} // SRCON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:19'} // PIR1 bits 7,6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:DF'} // CM2CON1 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:19'} // PIE1 bits 7,6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // ANSEL bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FD'} // SRCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:C0'} // SRCON1 bits 5,4,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -237,41 +250,41 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $03FF} // BOR enabled - {$define _BOREN_NSLEEP = $03FE} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $03FD} // BOR Disabled - {$define _BOREN_OFF = $03FC} // BOR Disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IOSCFS : Internal Oscillator Frequency Select bit - {$define _IOSCFS_8MHZ = $03FF} // 8 MHz - {$define _IOSCFS_4MHZ = $03FB} // 4 MHz + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // CP : Code Protection bit - {$define _CP_OFF = $03FF} // Program memory code protection is disabled - {$define _CP_ON = $03F7} // Program memory code protection is enabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $03FF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $03EF} // MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $03FF} // PWRT disabled - {$define _PWRTE_ON = $03DF} // PWRT enabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $03FF} // WDT enabled - {$define _WDTE_OFF = $03BF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_8MHZ = $3FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $3F7F} // 4 MHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $03FF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $037F} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $02FF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $027F} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $01FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $017F} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $00FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $007F} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR Disabled + {$define _BOREN_OFF = $3CFF} // BOR Disabled implementation end. diff --git a/PIC16F616.pas b/devices16/PIC16F616.pas similarity index 59% rename from PIC16F616.pas rename to devices16/PIC16F616.pas index 04568637..ae8b7ea1 100644 --- a/PIC16F616.pas +++ b/devices16/PIC16F616.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -47,22 +52,22 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_ECCPIF : bit absolute PIR1.5; PIR1_C2IF : bit absolute PIR1.4; PIR1_C1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -72,14 +77,15 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0013; CCPR1H : byte absolute $0014; CCP1CON : byte absolute $0015; - CCP1CON_P1M1 : bit absolute CCP1CON.7; - CCP1CON_P1M0 : bit absolute CCP1CON.6; - CCP1CON_DC1B1 : bit absolute CCP1CON.5; - CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_PM1 : bit absolute CCP1CON.7; + CCP1CON_PM0 : bit absolute CCP1CON.6; + CCP1CON_DCB1 : bit absolute CCP1CON.5; + CCP1CON_DCB0 : bit absolute CCP1CON.4; CCP1CON_CCP1M3 : bit absolute CCP1CON.3; CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; @@ -111,32 +117,32 @@ interface VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - CM1CON0 : byte absolute $001a; + CM1CON0 : byte absolute $001A; CM1CON0_C1ON : bit absolute CM1CON0.7; CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $001b; + CM2CON0 : byte absolute $001B; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $001c; + CM2CON1 : byte absolute $001C; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1ACS : bit absolute CM2CON1.5; - CM2CON1_C1HYS : bit absolute CM2CON1.4; - CM2CON1_C2HYS : bit absolute CM2CON1.3; - CM2CON1_T1GSS : bit absolute CM2CON1.2; - CM2CON1_C2SYNC : bit absolute CM2CON1.1; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + CM2CON1_T1ACS : bit absolute CM2CON1.4; + CM2CON1_C1HYS : bit absolute CM2CON1.3; + CM2CON1_C2HYS : bit absolute CM2CON1.2; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -146,7 +152,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -168,16 +174,16 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_ECCPIE : bit absolute PIE1.5; PIE1_C2IE : bit absolute PIE1.4; PIE1_C1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; OSCTUNE_TUN3 : bit absolute OSCTUNE.3; @@ -197,9 +203,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -214,12 +220,12 @@ interface SRCON0_C2REN : bit absolute SRCON0.4; SRCON0_PULSS : bit absolute SRCON0.3; SRCON0_PULSR : bit absolute SRCON0.2; - SRCON0_SRCLKEN : bit absolute SRCON0.1; - SRCON1 : byte absolute $009a; + SRCON0_SRCLKEN : bit absolute SRCON0.0; + SRCON1 : byte absolute $009A; SRCON1_SRCS1 : bit absolute SRCON1.7; SRCON1_SRCS0 : bit absolute SRCON1.6; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -227,53 +233,63 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-017:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS - {$SET_STATE_RAM '019-01C:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-092:SFR'} // OSCTUNE, ANSEL, PR2 - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '099-09A:SFR'} // SRCON0, SRCON1 - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-012:SFR:ALL'} // Bank 0 : T1CON, TMR2, T2CON + // Bank 1 : OSCTUNE, ANSEL, PR2 + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : CCPR1L, CCPR1H + {$SET_STATE_RAM '015-016:SFR:ALL'} // Bank 0 : CCP1CON, PWM1CON + // Bank 1 : WPUA, IOCA + {$SET_STATE_RAM '017-017:SFR'} // Bank 0 : ECCPAS + {$SET_STATE_RAM '019-01A:SFR:ALL'} // Bank 0 : VRCON, CM1CON0 + // Bank 1 : SRCON0, SRCON1 + {$SET_STATE_RAM '01B-01C:SFR'} // Bank 0 : CM2CON0, CM2CON1 + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7B'} // PIR1 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01A:F7'} // CM1CON0 - {$SET_UNIMP_BITS '01B:F7'} // CM2CON0 - {$SET_UNIMP_BITS '01C:DF'} // CM2CON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:7B'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '099:FD'} // SRCON0 - {$SET_UNIMP_BITS '09A:C0'} // SRCON1 - {$SET_UNIMP_BITS '09F:70'} // ADCON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7B'} // PIR1 bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:DF'} // CM2CON1 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7B'} // PIE1 bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FD'} // SRCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:C0'} // SRCON1 bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -302,41 +318,41 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $03FF} // BOR enabled - {$define _BOREN_NSLEEP = $03FE} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $03FD} // BOR Disabled - {$define _BOREN_OFF = $03FC} // BOR Disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IOSCFS : Internal Oscillator Frequency Select bit - {$define _IOSCFS_8MHZ = $03FF} // 8 MHz - {$define _IOSCFS_4MHZ = $03FB} // 4 MHz + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // CP : Code Protection bit - {$define _CP_OFF = $03FF} // Program memory code protection is disabled - {$define _CP_ON = $03F7} // Program memory code protection is enabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $03FF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $03EF} // MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $03FF} // PWRT disabled - {$define _PWRTE_ON = $03DF} // PWRT enabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $03FF} // WDT enabled - {$define _WDTE_OFF = $03BF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IOSCFS : Internal Oscillator Frequency Select bit + {$define _IOSCFS_8MHZ = $3FFF} // 8 MHz + {$define _IOSCFS_4MHZ = $3F7F} // 4 MHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $03FF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $037F} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $02FF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $027F} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $01FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $017F} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $00FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $007F} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR Disabled + {$define _BOREN_OFF = $3CFF} // BOR Disabled implementation end. diff --git a/PIC16F627.pas b/devices16/PIC16F627.pas similarity index 57% rename from PIC16F627.pas rename to devices16/PIC16F627.pas index 3b6ff12c..a5b324b6 100644 --- a/PIC16F627.pas +++ b/devices16/PIC16F627.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -95,8 +101,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CMCON : byte absolute $001f; + RCREG : byte absolute $001A; + CMCON : byte absolute $001F; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -106,7 +112,7 @@ interface CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -132,37 +138,37 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_OSCF : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - VRCON : byte absolute $009f; + EECON2 : byte absolute $009D; + VRCON : byte absolute $009F; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; @@ -174,58 +180,56 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01F-01F:SFR'} // CMCON - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-09D:SFR'} // TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '09F-09F:SFR'} // VRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-14F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : CMCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-09D:SFR'} // Bank 1 : TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : VRCON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-14F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08E:0B'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:EF'} // VRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:0B'} // PCON bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:EF'} // VRCON bit 4 un-implemented (read as 0) // -- PIN mapping -- @@ -258,45 +262,45 @@ interface // -- Bits Configuration -- - // CP : Code Protection bits - {$define _CP_OFF = $3DFF} // Program memory code protection off - {$define _CP_50 = $3DFA} // Program memory code protection off - {$define _CP_75 = $3DF5} // 0200h-03FFh code protected - {$define _CP_ALL = $3DF0} // 0000h-03FFh code protected - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $3DFF} // Data memory code protection off - {$define _CPD_ON = $3DEF} // Data memory code protected + // FOSC : Oscillator Selection bits + {$define _FOSC_ERCLK = $3FFF} // ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN + {$define _FOSC_ERIO = $3FFE} // ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_ECIO = $3FEF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FEE} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FED} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FEC} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low-Voltage Programming Enable bit - {$define _LVP_ON = $3DFF} // RB4/PGM pin has PGM function, low-voltage programming enabled - {$define _LVP_OFF = $3DDF} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3DFF} // BOD Reset enabled - {$define _BOREN_OFF = $3DBF} // BOD Reset disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled // MCLRE : RA5/MCLR pin function select - {$define _MCLRE_ON = $3DFF} // RA5/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3D7F} // RA5/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA5/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3DFF} // PWRT disabled - {$define _PWRTE_ON = $3CFF} // PWRT enabled + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOD Reset enabled + {$define _BOREN_OFF = $3FBF} // BOD Reset disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3DFF} // WDT disabled + // LVP : Low-Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB4/PGM pin has PGM function, low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming - // FOSC : Oscillator Selection bits - {$define _FOSC_ERCLK = $4DFF} // ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN - {$define _FOSC_ERIO = $49FF} // ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $45FF} // INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $41FF} // INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_ECIO = $0DFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $09FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $05FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection off + {$define _CPD_ON = $3EFF} // Data memory code protected + + // CP : Code Protection bits + {$define _CP_OFF = $3FFF} // Program memory code protection off + {$define _CP_50 = $2BFF} // Program memory code protection off + {$define _CP_75 = $17FF} // 0200h-03FFh code protected + {$define _CP_ALL = $03FF} // 0000h-03FFh code protected implementation end. diff --git a/PIC16F627A.pas b/devices16/PIC16F627A.pas similarity index 57% rename from PIC16F627A.pas rename to devices16/PIC16F627A.pas index 774827c1..8e3c7c4c 100644 --- a/PIC16F627A.pas +++ b/devices16/PIC16F627A.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -95,8 +101,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CMCON : byte absolute $001f; + RCREG : byte absolute $001A; + CMCON : byte absolute $001F; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -106,7 +112,7 @@ interface CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -132,37 +138,37 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_OSCF : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - VRCON : byte absolute $009f; + EECON2 : byte absolute $009D; + VRCON : byte absolute $009F; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; @@ -174,58 +180,56 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01F-01F:SFR'} // CMCON - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-09D:SFR'} // TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '09F-09F:SFR'} // VRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-14F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : CMCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-09D:SFR'} // Bank 1 : TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : VRCON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-14F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08E:0B'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:EF'} // VRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:0B'} // PCON bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:EF'} // VRCON bit 4 un-implemented (read as 0) // -- PIN mapping -- @@ -258,43 +262,43 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $21FF} // Code protection off - {$define _CP_ON = $21FE} // 0000h to 03FFh code-protected - - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $21FF} // Data memory code protection off - {$define _CPD_ON = $21FD} // Data memory code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_ECIO = $3FEF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FEE} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FED} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FEC} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low-Voltage Programming Enable bit - {$define _LVP_ON = $21FF} // RB4/PGM pin has PGM function, low-voltage programming enabled - {$define _LVP_OFF = $21FB} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $21FF} // BOD enabled - {$define _BOREN_OFF = $21F7} // BOD disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $21FF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $21EF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $21FF} // PWRT disabled - {$define _PWRTE_ON = $21DF} // PWRT enabled + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $21FF} // WDT enabled - {$define _WDTE_OFF = $21BF} // WDT disabled + // LVP : Low-Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB4/PGM pin has PGM function, low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $29FF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $297F} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $28FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $287F} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_ECIO = $21FF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $217F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $20FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $207F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection off + {$define _CPD_ON = $3EFF} // Data memory code-protected + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 03FFh code-protected implementation end. diff --git a/PIC16F628.pas b/devices16/PIC16F628.pas similarity index 57% rename from PIC16F628.pas rename to devices16/PIC16F628.pas index 8734e221..22c51029 100644 --- a/PIC16F628.pas +++ b/devices16/PIC16F628.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -95,8 +101,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CMCON : byte absolute $001f; + RCREG : byte absolute $001A; + CMCON : byte absolute $001F; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -106,7 +112,7 @@ interface CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -132,37 +138,37 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_OSCF : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - VRCON : byte absolute $009f; + EECON2 : byte absolute $009D; + VRCON : byte absolute $009F; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; @@ -174,58 +180,56 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01F-01F:SFR'} // CMCON - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-09D:SFR'} // TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '09F-09F:SFR'} // VRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-14F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : CMCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-09D:SFR'} // Bank 1 : TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : VRCON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-14F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08E:0B'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:EF'} // VRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:0B'} // PCON bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:EF'} // VRCON bit 4 un-implemented (read as 0) // -- PIN mapping -- @@ -258,45 +262,45 @@ interface // -- Bits Configuration -- - // CP : Code Protection bits - {$define _CP_OFF = $3DFF} // Program memory code protection off - {$define _CP_50 = $3DFA} // 0400h-07FFh code protected - {$define _CP_75 = $3DF5} // 0200h-07FFh code protected - {$define _CP_ALL = $3DF0} // 0000h-07FFh code protected - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $3DFF} // Data memory code protection off - {$define _CPD_ON = $3DEF} // Data memory code protected + // FOSC : Oscillator Selection bits + {$define _FOSC_ERCLK = $3FFF} // ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN + {$define _FOSC_ERIO = $3FFE} // ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_ECIO = $3FEF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FEE} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FED} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FEC} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low-Voltage Programming Enable bit - {$define _LVP_ON = $3DFF} // RB4/PGM pin has PGM function, low-voltage programming enabled - {$define _LVP_OFF = $3DDF} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3DFF} // BOD Reset enabled - {$define _BOREN_OFF = $3DBF} // BOD Reset disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled // MCLRE : RA5/MCLR pin function select - {$define _MCLRE_ON = $3DFF} // RA5/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3D7F} // RA5/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA5/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3DFF} // PWRT disabled - {$define _PWRTE_ON = $3CFF} // PWRT enabled + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOD Reset enabled + {$define _BOREN_OFF = $3FBF} // BOD Reset disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3DFF} // WDT disabled + // LVP : Low-Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB4/PGM pin has PGM function, low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming - // FOSC : Oscillator Selection bits - {$define _FOSC_ERCLK = $4DFF} // ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN - {$define _FOSC_ERIO = $49FF} // ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $45FF} // INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $41FF} // INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_ECIO = $0DFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $09FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $05FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection off + {$define _CPD_ON = $3EFF} // Data memory code protected + + // CP : Code Protection bits + {$define _CP_OFF = $3FFF} // Program memory code protection off + {$define _CP_50 = $2BFF} // 0400h-07FFh code protected + {$define _CP_75 = $17FF} // 0200h-07FFh code protected + {$define _CP_ALL = $03FF} // 0000h-07FFh code protected implementation end. diff --git a/PIC16F628A.pas b/devices16/PIC16F628A.pas similarity index 57% rename from PIC16F628A.pas rename to devices16/PIC16F628A.pas index 2c6f257e..595a1cc5 100644 --- a/PIC16F628A.pas +++ b/devices16/PIC16F628A.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -95,8 +101,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CMCON : byte absolute $001f; + RCREG : byte absolute $001A; + CMCON : byte absolute $001F; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -106,7 +112,7 @@ interface CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -132,37 +138,37 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_OSCF : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - VRCON : byte absolute $009f; + EECON2 : byte absolute $009D; + VRCON : byte absolute $009F; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; @@ -174,58 +180,56 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01F-01F:SFR'} // CMCON - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-09D:SFR'} // TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '09F-09F:SFR'} // VRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-14F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : CMCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-09D:SFR'} // Bank 1 : TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : VRCON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-14F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08E:0B'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:EF'} // VRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:0B'} // PCON bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:EF'} // VRCON bit 4 un-implemented (read as 0) // -- PIN mapping -- @@ -258,43 +262,43 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $21FF} // Code protection off - {$define _CP_ON = $21FE} // 0000h to 07FFh code-protected - - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $21FF} // Data memory code protection off - {$define _CPD_ON = $21FD} // Data memory code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_ECIO = $3FEF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FEE} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FED} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FEC} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low-Voltage Programming Enable bit - {$define _LVP_ON = $21FF} // RB4/PGM pin has PGM function, low-voltage programming enabled - {$define _LVP_OFF = $21FB} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $21FF} // BOD enabled - {$define _BOREN_OFF = $21F7} // BOD disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $21FF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $21EF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $21FF} // PWRT disabled - {$define _PWRTE_ON = $21DF} // PWRT enabled + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $21FF} // WDT enabled - {$define _WDTE_OFF = $21BF} // WDT disabled + // LVP : Low-Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB4/PGM pin has PGM function, low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $29FF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $297F} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $28FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $287F} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_ECIO = $21FF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $217F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $20FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $207F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection off + {$define _CPD_ON = $3EFF} // Data memory code-protected + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 07FFh code-protected implementation end. diff --git a/PIC16F630.pas b/devices16/PIC16F630.pas similarity index 50% rename from PIC16F630.pas rename to devices16/PIC16F630.pas index a13b8877..6b168309 100644 --- a/PIC16F630.pas +++ b/devices16/PIC16F630.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,33 +52,36 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_EEIF : bit absolute PIR1.4; + PIR1 : byte absolute $000C; + PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; CMCON : byte absolute $0019; CMCON_COUT : bit absolute CMCON.6; - CMCON_CINV : bit absolute CMCON.5; - CMCON_CIS : bit absolute CMCON.4; + CMCON_CINV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; TRISA : byte absolute $0085; TRISA_TRISA5 : bit absolute TRISA.5; TRISA_TRISA4 : bit absolute TRISA.4; @@ -88,13 +96,13 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_EEIE : bit absolute PIE1.4; + PIE1 : byte absolute $008C; + PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCCAL : byte absolute $0090; OSCCAL_CAL5 : bit absolute OSCCAL.7; OSCCAL_CAL4 : bit absolute OSCCAL.6; @@ -105,9 +113,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -116,66 +124,79 @@ interface IOCA_IOCA1 : bit absolute IOCA.1; IOCA_IOCA0 : bit absolute IOCA.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EEADR_EEADR6 : bit absolute EEADR.6; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; + EECON2 : byte absolute $009D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-019:SFR'} // CMCON - {$SET_STATE_RAM '020-05F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-090:SFR'} // OSCCAL - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '099-09D:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '0A0-0DF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:89'} // PIR1 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '019:5F'} // CMCON - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:89'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:FC'} // OSCCAL - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09B:7F'} // EEADR - {$SET_UNIMP_BITS '09C:0F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCCAL + {$SET_STATE_RAM '019-019:SFR:ALL'} // Bank 0 : CMCON + // Bank 1 : VRCON + {$SET_STATE_RAM '020-05F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPUA, IOCA + {$SET_STATE_RAM '09A-09D:SFR'} // Bank 1 : EEDAT, EEADR, EECON1, EECON2 + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:89'} // PIR1 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:89'} // PIE1 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:FC'} // OSCCAL bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:7F'} // EEADR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -204,45 +225,39 @@ interface // -- Bits Configuration -- - // BG : Bandgap Calibration bits for BOD and POR voltage - {$define _BG_3 = $31FF} // Highest bandgap voltage - {$define _BG_2 = $31FE} // . - {$define _BG_1 = $31FD} // . - {$define _BG_0 = $31FC} // Lowest bandgap voltage - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $31FF} // Data memory code protection is disabled - {$define _CPD_ON = $31FB} // Data memory code protection is enabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // CP : Code Protection bit - {$define _CP_OFF = $31FF} // Program Memory code protection is disabled - {$define _CP_ON = $31F7} // Program Memory code protection is enabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $31FF} // BOD enabled - {$define _BOREN_OFF = $31EF} // BOD disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled // MCLRE : RA3/MCLR pin function select - {$define _MCLRE_ON = $31FF} // RA3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $31DF} // RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $31FF} // PWRT disabled - {$define _PWRTE_ON = $31BF} // PWRT enabled + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $31FF} // WDT enabled - {$define _WDTE_OFF = $317F} // WDT disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection is disabled + {$define _CP_ON = $3F7F} // Program Memory code protection is enabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $37FF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $36FF} // RC oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $35FF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $34FF} // INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $33FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $32FF} // HS oscillator: High speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $31FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $30FF} // LP oscillator: Low power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled implementation end. diff --git a/PIC16F631.pas b/devices16/PIC16F631.pas similarity index 54% rename from PIC16F631.pas rename to devices16/PIC16F631.pas index cca5e3e2..6fc3dc2a 100644 --- a/PIC16F631.pas +++ b/devices16/PIC16F631.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,26 +59,26 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -102,19 +107,19 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -131,9 +136,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -147,13 +152,13 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -173,36 +178,36 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; - ANSEL_ANS7 : bit absolute ANSEL.6; - ANSEL_ANS6 : bit absolute ANSEL.5; - ANSEL_ANS5 : bit absolute ANSEL.4; - ANSEL_ANS4 : bit absolute ANSEL.3; - ANSEL_ANS1 : bit absolute ANSEL.2; - ANSEL_ANS0 : bit absolute ANSEL.1; - EECON1 : byte absolute $018c; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - SRCON : byte absolute $019e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; + ANSEL_ANS7 : bit absolute ANSEL.7; + ANSEL_ANS6 : bit absolute ANSEL.6; + ANSEL_ANS5 : bit absolute ANSEL.5; + ANSEL_ANS4 : bit absolute ANSEL.4; + ANSEL_ANS1 : bit absolute ANSEL.1; + ANSEL_ANS0 : bit absolute ANSEL.0; + EECON1 : byte absolute $018C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -213,63 +218,67 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-010:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '040-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '095-097:SFR'} // WPUA, IOCA, WDTCON - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10D:SFR'} // PCLATH, INTCON, EEDAT, EEADR - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11E:SFR'} // ANSEL - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19E-19E:SFR'} // SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : WPUA, IOCA, WDTCON + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11E-11E:SFR'} // Bank 2 : ANSEL + {$SET_STATE_RAM '19E-19E:SFR'} // Bank 3 : SRCON - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:01'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:07'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11E:F3'} // ANSEL - {$SET_UNIMP_BITS '18C:0F'} // EECON1 - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:01'} // PIR1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:01'} // PIE1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:F3'} // ANSEL bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -305,49 +314,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F636.pas b/devices16/PIC16F636.pas similarity index 53% rename from PIC16F636.pas rename to devices16/PIC16F636.pas index 67c3610a..0081ea27 100644 --- a/PIC16F636.pas +++ b/devices16/PIC16F636.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,23 +52,23 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_LVDIF : bit absolute PIR1.6; PIR1_CRIF : bit absolute PIR1.5; PIR1_C2IF : bit absolute PIR1.4; PIR1_C1IF : bit absolute PIR1.3; PIR1_OSFIF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; WDTCON : byte absolute $0018; @@ -78,11 +83,14 @@ interface CMCON0_C2INV : bit absolute CMCON0.5; CMCON0_C1INV : bit absolute CMCON0.4; CMCON0_CIS : bit absolute CMCON0.3; - CMCON1 : byte absolute $001a; + CMCON0_CM2 : bit absolute CMCON0.2; + CMCON0_CM1 : bit absolute CMCON0.1; + CMCON0_CM0 : bit absolute CMCON0.0; + CMCON1 : byte absolute $001A; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -104,24 +112,24 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_LVDIE : bit absolute PIE1.6; PIE1_CRIE : bit absolute PIE1.5; PIE1_C2IE : bit absolute PIE1.4; PIE1_C1IE : bit absolute PIE1.3; PIE1_OSFIE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_WUR : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.6; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; + PCON_nWUR : bit absolute PCON.3; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IOSCF2 : bit absolute OSCCON.6; + OSCCON_IOSCF1 : bit absolute OSCCON.5; + OSCCON_IOSCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_HTS : bit absolute OSCCON.2; OSCCON_LTS : bit absolute OSCCON.1; @@ -141,9 +149,9 @@ interface WPUDA : byte absolute $0095; WPUDA_WPUDA5 : bit absolute WPUDA.5; WPUDA_WPUDA4 : bit absolute WPUDA.4; - WPUDA_WPUDA2 : bit absolute WPUDA.3; - WPUDA_WPUDA1 : bit absolute WPUDA.2; - WPUDA_WPUDA0 : bit absolute WPUDA.1; + WPUDA_WPUDA2 : bit absolute WPUDA.2; + WPUDA_WPUDA1 : bit absolute WPUDA.1; + WPUDA_WPUDA0 : bit absolute WPUDA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -154,29 +162,29 @@ interface WDA : byte absolute $0097; WDA_WDA5 : bit absolute WDA.5; WDA_WDA4 : bit absolute WDA.4; - WDA_WDA2 : bit absolute WDA.3; - WDA_WDA1 : bit absolute WDA.2; - WDA_WDA0 : bit absolute WDA.1; + WDA_WDA2 : bit absolute WDA.2; + WDA_WDA1 : bit absolute WDA.1; + WDA_WDA0 : bit absolute WDA.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; + EECON2 : byte absolute $009D; CRCON : byte absolute $0110; CRCON_GO_nDONE : bit absolute CRCON.7; CRCON_ENC_nDEC : bit absolute CRCON.6; - CRCON_CRREG1 : bit absolute CRCON.5; - CRCON_CRREG0 : bit absolute CRCON.4; + CRCON_CRREG1 : bit absolute CRCON.1; + CRCON_CRREG0 : bit absolute CRCON.0; CRDAT0 : byte absolute $0111; CRDAT1 : byte absolute $0112; CRDAT2 : byte absolute $0113; @@ -185,69 +193,67 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '018-01A:SFR'} // WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-090:SFR'} // PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '094-097:SFR'} // LVDCON, WPUDA, IOCA, WDA - {$SET_STATE_RAM '099-09D:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '107-107:SFR'} // PORTC - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '110-114:SFR'} // CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '187-187:SFR'} // TRISC - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + // Bank 2 : PORTA + // Bank 3 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + // Bank 2 : PORTC + // Bank 3 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : WDTCON, CMCON0, CMCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '094-097:SFR'} // Bank 1 : LVDCON, WPUDA, IOCA, WDA + {$SET_STATE_RAM '099-09D:SFR'} // Bank 1 : VRCON, EEDAT, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '110-114:SFR'} // Bank 2 : CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-105:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_MAPPED_RAM '107-107:bnk0'} // PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-185:bnk1'} // TRISA - {$SET_MAPPED_RAM '187-187:bnk1'} // TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-105:bnk0'} // maps to PORTA (bank 0) + {$SET_MAPPED_RAM '107-107:bnk0'} // maps to PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-185:bnk1'} // maps to TRISA (bank 1) + {$SET_MAPPED_RAM '187-187:bnk1'} // maps to TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:FD'} // PIR1 - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '01A:03'} // CMCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:FD'} // PIE1 - {$SET_UNIMP_BITS '08E:3B'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '094:37'} // LVDCON - {$SET_UNIMP_BITS '095:37'} // WPUDA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:37'} // WDA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '110:C3'} // CRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:FD'} // PIR1 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:FD'} // PIE1 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3B'} // PCON bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:37'} // WDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:C3'} // CRCON bits 5,4,3,2 un-implemented (read as 0) // -- PIN mapping -- @@ -276,53 +282,53 @@ interface // -- Bits Configuration -- - // WURE : Wake-Up Reset Enable bit - {$define _WURE_OFF = $1FFF} // Standard wake-up and continue enabled - {$define _WURE_ON = $1FFE} // Wake-up and Reset enabled - - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - // IESO : Internal-External Switchover bit - {$define _IESO_ON = $1FFF} // Internal External Switchover mode enabled - {$define _IESO_OFF = $1FFB} // Internal External Switchover mode disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOD enabled and SBOdEN bit disabled - {$define _BOREN_NSLEEP = $1FF7} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. - {$define _BOREN_SBODEN = $1FEF} // SBODEN controls BOD function - {$define _BOREN_OFF = $1FE7} // BOD and SBODEN disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory is not code protected - {$define _CPD_ON = $1FDF} // Data memory is external read protected + // MCLRE : MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is alternate function, MCLR function is internally disabled // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory is not code protected - {$define _CP_ON = $1FBF} // Program memory is external read and write-protected + {$define _CP_OFF = $3FFF} // Program memory is not code protected + {$define _CP_ON = $3FBF} // Program memory is external read and write-protected - // MCLRE : MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled - {$define _MCLRE_OFF = $1F7F} // MCLR pin function is alternate function, MCLR function is internally disabled + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory is not code protected + {$define _CPD_ON = $3F7F} // Data memory is external read protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOD enabled and SBOdEN bit disabled + {$define _BOREN_NSLEEP = $3EFF} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. + {$define _BOREN_SBODEN = $3DFF} // SBODEN controls BOD function + {$define _BOREN_OFF = $3CFF} // BOD and SBODEN disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal-External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor disabled + + // WURE : Wake-Up Reset Enable bit + {$define _WURE_OFF = $3FFF} // Standard wake-up and continue enabled + {$define _WURE_ON = $2FFF} // Wake-up and Reset enabled implementation end. diff --git a/PIC16F639.pas b/devices16/PIC16F639.pas similarity index 53% rename from PIC16F639.pas rename to devices16/PIC16F639.pas index 9c09ce90..0a1ab1a6 100644 --- a/PIC16F639.pas +++ b/devices16/PIC16F639.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,23 +52,23 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_LVDIF : bit absolute PIR1.6; PIR1_CRIF : bit absolute PIR1.5; PIR1_C2IF : bit absolute PIR1.4; PIR1_C1IF : bit absolute PIR1.3; PIR1_OSFIF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; WDTCON : byte absolute $0018; @@ -78,11 +83,14 @@ interface CMCON0_C2INV : bit absolute CMCON0.5; CMCON0_C1INV : bit absolute CMCON0.4; CMCON0_CIS : bit absolute CMCON0.3; - CMCON1 : byte absolute $001a; + CMCON0_CM2 : bit absolute CMCON0.2; + CMCON0_CM1 : bit absolute CMCON0.1; + CMCON0_CM0 : bit absolute CMCON0.0; + CMCON1 : byte absolute $001A; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -104,24 +112,24 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_LVDIE : bit absolute PIE1.6; PIE1_CRIE : bit absolute PIE1.5; PIE1_C2IE : bit absolute PIE1.4; PIE1_C1IE : bit absolute PIE1.3; PIE1_OSFIE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_WUR : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.6; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; + PCON_nWUR : bit absolute PCON.3; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IOSCF2 : bit absolute OSCCON.6; + OSCCON_IOSCF1 : bit absolute OSCCON.5; + OSCCON_IOSCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_HTS : bit absolute OSCCON.2; OSCCON_LTS : bit absolute OSCCON.1; @@ -141,9 +149,9 @@ interface WPUDA : byte absolute $0095; WPUDA_WPUDA5 : bit absolute WPUDA.5; WPUDA_WPUDA4 : bit absolute WPUDA.4; - WPUDA_WPUDA2 : bit absolute WPUDA.3; - WPUDA_WPUDA1 : bit absolute WPUDA.2; - WPUDA_WPUDA0 : bit absolute WPUDA.1; + WPUDA_WPUDA2 : bit absolute WPUDA.2; + WPUDA_WPUDA1 : bit absolute WPUDA.1; + WPUDA_WPUDA0 : bit absolute WPUDA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -154,29 +162,29 @@ interface WDA : byte absolute $0097; WDA_WDA5 : bit absolute WDA.5; WDA_WDA4 : bit absolute WDA.4; - WDA_WDA2 : bit absolute WDA.3; - WDA_WDA1 : bit absolute WDA.2; - WDA_WDA0 : bit absolute WDA.1; + WDA_WDA2 : bit absolute WDA.2; + WDA_WDA1 : bit absolute WDA.1; + WDA_WDA0 : bit absolute WDA.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; + EECON2 : byte absolute $009D; CRCON : byte absolute $0110; CRCON_GO_nDONE : bit absolute CRCON.7; CRCON_ENC_nDEC : bit absolute CRCON.6; - CRCON_CRREG1 : bit absolute CRCON.5; - CRCON_CRREG0 : bit absolute CRCON.4; + CRCON_CRREG1 : bit absolute CRCON.1; + CRCON_CRREG0 : bit absolute CRCON.0; CRDAT0 : byte absolute $0111; CRDAT1 : byte absolute $0112; CRDAT2 : byte absolute $0113; @@ -185,69 +193,67 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '018-01A:SFR'} // WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-090:SFR'} // PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '094-097:SFR'} // LVDCON, WPUDA, IOCA, WDA - {$SET_STATE_RAM '099-09D:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '107-107:SFR'} // PORTC - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '110-114:SFR'} // CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '187-187:SFR'} // TRISC - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + // Bank 2 : PORTA + // Bank 3 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + // Bank 2 : PORTC + // Bank 3 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : WDTCON, CMCON0, CMCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '094-097:SFR'} // Bank 1 : LVDCON, WPUDA, IOCA, WDA + {$SET_STATE_RAM '099-09D:SFR'} // Bank 1 : VRCON, EEDAT, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '110-114:SFR'} // Bank 2 : CRCON, CRDAT0, CRDAT1, CRDAT2, CRDAT3 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-105:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_MAPPED_RAM '107-107:bnk0'} // PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-185:bnk1'} // TRISA - {$SET_MAPPED_RAM '187-187:bnk1'} // TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-105:bnk0'} // maps to PORTA (bank 0) + {$SET_MAPPED_RAM '107-107:bnk0'} // maps to PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-185:bnk1'} // maps to TRISA (bank 1) + {$SET_MAPPED_RAM '187-187:bnk1'} // maps to TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:FD'} // PIR1 - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '01A:03'} // CMCON1 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:FD'} // PIE1 - {$SET_UNIMP_BITS '08E:3B'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '094:37'} // LVDCON - {$SET_UNIMP_BITS '095:37'} // WPUDA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:37'} // WDA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '110:C3'} // CRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:FD'} // PIR1 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:FD'} // PIE1 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3B'} // PCON bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:37'} // WDA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:C3'} // CRCON bits 5,4,3,2 un-implemented (read as 0) // -- PIN mapping -- @@ -282,53 +288,53 @@ interface // -- Bits Configuration -- - // WURE : Wake-Up Reset Enable bit - {$define _WURE_OFF = $1FFF} // Standard wake-up and continue enabled - {$define _WURE_ON = $1FFE} // Wake-up and Reset enabled - - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - // IESO : Internal-External Switchover bit - {$define _IESO_ON = $1FFF} // Internal External Switchover mode enabled - {$define _IESO_OFF = $1FFB} // Internal External Switchover mode disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOD enabled and SBOdEN bit disabled - {$define _BOREN_NSLEEP = $1FF7} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. - {$define _BOREN_SBODEN = $1FEF} // SBODEN controls BOD function - {$define _BOREN_OFF = $1FE7} // BOD and SBODEN disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory is not code protected - {$define _CPD_ON = $1FDF} // Data memory is external read protected + // MCLRE : MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is alternate function, MCLR function is internally disabled // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory is not code protected - {$define _CP_ON = $1FBF} // Program memory is external read and write-protected + {$define _CP_OFF = $3FFF} // Program memory is not code protected + {$define _CP_ON = $3FBF} // Program memory is external read and write-protected - // MCLRE : MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // MCLR pin is MCLR function and weak internal pull-up is enabled - {$define _MCLRE_OFF = $1F7F} // MCLR pin function is alternate function, MCLR function is internally disabled + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory is not code protected + {$define _CPD_ON = $3F7F} // Data memory is external read protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOD enabled and SBOdEN bit disabled + {$define _BOREN_NSLEEP = $3EFF} // BOD enabled while running and disabled in Sleep. SBODEN bit disabled. + {$define _BOREN_SBODEN = $3DFF} // SBODEN controls BOD function + {$define _BOREN_OFF = $3CFF} // BOD and SBODEN disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal-External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, RC on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA4/T1G/OSC2/CLKOUT pin, I/O function on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA4/T1G/OSC2/CLKOUT, CLKIN on RA5/T1CKI/OSC1/CLKIN - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA5/T1CKI/OSC1/CLKIN and RA4/T1G/OSC2/CLKOUT + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor disabled + + // WURE : Wake-Up Reset Enable bit + {$define _WURE_OFF = $3FFF} // Standard wake-up and continue enabled + {$define _WURE_ON = $2FFF} // Wake-up and Reset enabled implementation end. diff --git a/PIC16F648A.pas b/devices16/PIC16F648A.pas similarity index 57% rename from PIC16F648A.pas rename to devices16/PIC16F648A.pas index 66b9c5ec..7eccc8e2 100644 --- a/PIC16F648A.pas +++ b/devices16/PIC16F648A.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_CMIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -95,8 +101,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CMCON : byte absolute $001f; + RCREG : byte absolute $001A; + CMCON : byte absolute $001F; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -106,7 +112,7 @@ interface CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -132,37 +138,37 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_CMIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PCON : byte absolute $008e; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; PCON_OSCF : bit absolute PCON.3; - PCON_POR : bit absolute PCON.2; - PCON_BOR : bit absolute PCON.1; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - VRCON : byte absolute $009f; + EECON2 : byte absolute $009D; + VRCON : byte absolute $009F; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; @@ -174,57 +180,56 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01F-01F:SFR'} // CMCON - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-09D:SFR'} // TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 - {$SET_STATE_RAM '09F-09F:SFR'} // VRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : CMCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-09D:SFR'} // Bank 1 : TXSTA, SPBRG, EEDATA, EEADR, EECON1, EECON2 + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : VRCON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08E:0B'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:EF'} // VRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:0B'} // PCON bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:EF'} // VRCON bit 4 un-implemented (read as 0) // -- PIN mapping -- @@ -257,43 +262,43 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $21FF} // Code protection off - {$define _CP_ON = $21FE} // 0000h to 0FFFh code-protected - - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $21FF} // Data memory code protection off - {$define _CPD_ON = $21FD} // Data memory code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_ECIO = $3FEF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FEE} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FED} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FEC} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low-Voltage Programming Enable bit - {$define _LVP_ON = $21FF} // RB4/PGM pin has PGM function, low-voltage programming enabled - {$define _LVP_OFF = $21FB} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $21FF} // BOD enabled - {$define _BOREN_OFF = $21F7} // BOD disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $21FF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $21EF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $21FF} // PWRT disabled - {$define _PWRTE_ON = $21DF} // PWRT enabled + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $21FF} // WDT enabled - {$define _WDTE_OFF = $21BF} // WDT disabled + // LVP : Low-Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB4/PGM pin has PGM function, low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $29FF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $297F} // RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $28FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $287F} // INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_ECIO = $21FF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $217F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $20FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $207F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection off + {$define _CPD_ON = $3EFF} // Data memory code-protected + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 0FFFh code-protected implementation end. diff --git a/PIC16F676.pas b/devices16/PIC16F676.pas similarity index 50% rename from PIC16F676.pas rename to devices16/PIC16F676.pas index 253a41e4..57b1a533 100644 --- a/PIC16F676.pas +++ b/devices16/PIC16F676.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,42 +52,46 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_EEIF : bit absolute PIR1.5; - PIR1_ADIF : bit absolute PIR1.4; + PIR1 : byte absolute $000C; + PIR1_EEIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; CMCON : byte absolute $0019; CMCON_COUT : bit absolute CMCON.6; - CMCON_CINV : bit absolute CMCON.5; - CMCON_CIS : bit absolute CMCON.4; + CMCON_CINV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; TRISA : byte absolute $0085; TRISA_TRISA5 : bit absolute TRISA.5; TRISA_TRISA4 : bit absolute TRISA.4; @@ -97,14 +106,14 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_EEIE : bit absolute PIE1.5; - PIE1_ADIE : bit absolute PIE1.4; + PIE1 : byte absolute $008C; + PIE1_EEIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; PIE1_CMIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; OSCCAL : byte absolute $0090; OSCCAL_CAL5 : bit absolute OSCCAL.7; OSCCAL_CAL4 : bit absolute OSCCAL.6; @@ -124,9 +133,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -135,22 +144,29 @@ interface IOCA_IOCA1 : bit absolute IOCA.1; IOCA_IOCA0 : bit absolute IOCA.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EEADR_EEADR6 : bit absolute EEADR.6; + EEADR_EEADR5 : bit absolute EEADR.5; + EEADR_EEADR4 : bit absolute EEADR.4; + EEADR_EEADR3 : bit absolute EEADR.3; + EEADR_EEADR2 : bit absolute EEADR.2; + EEADR_EEADR1 : bit absolute EEADR.1; + EEADR_EEADR0 : bit absolute EEADR.0; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -158,51 +174,59 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-010:SFR'} // TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '019-019:SFR'} // CMCON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-05F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '090-091:SFR'} // OSCCAL, ANSEL - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '099-09F:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0DF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-00F:SFR'} // Bank 0 : TMR1H + {$SET_STATE_RAM '010-010:SFR:ALL'} // Bank 0 : T1CON + // Bank 1 : OSCCAL + {$SET_STATE_RAM '019-019:SFR:ALL'} // Bank 0 : CMCON + // Bank 1 : VRCON + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '020-05F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '091-091:SFR'} // Bank 1 : ANSEL + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPUA, IOCA + {$SET_STATE_RAM '09A-09D:SFR'} // Bank 1 : EEDAT, EEADR, EECON1, EECON2 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:C9'} // PIR1 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '019:5F'} // CMCON - {$SET_UNIMP_BITS '01F:DF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08C:C9'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:FC'} // OSCCAL - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09B:7F'} // EEADR - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:70'} // ADCON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:C9'} // PIR1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:5F'} // CMCON bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:DF'} // ADCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:C9'} // PIE1 bits 5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:FC'} // OSCCAL bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:7F'} // EEADR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -231,45 +255,39 @@ interface // -- Bits Configuration -- - // BG : Bandgap Calibration bits for BOD and POR voltage - {$define _BG_3 = $31FF} // Highest bandgap voltage - {$define _BG_2 = $31FE} // . - {$define _BG_1 = $31FD} // . - {$define _BG_0 = $31FC} // Lowest bandgap voltage - - // CPD : Data Code Protection bit - {$define _CPD_OFF = $31FF} // Data memory code protection is disabled - {$define _CPD_ON = $31FB} // Data memory code protection is enabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RC oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // CP : Code Protection bit - {$define _CP_OFF = $31FF} // Program Memory code protection is disabled - {$define _CP_ON = $31F7} // Program Memory code protection is enabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown-out Detect Enable bit - {$define _BOREN_ON = $31FF} // BOD enabled - {$define _BOREN_OFF = $31EF} // BOD disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled // MCLRE : RA3/MCLR pin function select - {$define _MCLRE_ON = $31FF} // RA3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $31DF} // RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RA3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $31FF} // PWRT disabled - {$define _PWRTE_ON = $31BF} // PWRT enabled + // BOREN : Brown-out Detect Enable bit + {$define _BOREN_ON = $3FFF} // BOD enabled + {$define _BOREN_OFF = $3FBF} // BOD disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $31FF} // WDT enabled - {$define _WDTE_OFF = $317F} // WDT disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection is disabled + {$define _CP_ON = $3F7F} // Program Memory code protection is enabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $37FF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $36FF} // RC oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $35FF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $34FF} // INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $33FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $32FF} // HS oscillator: High speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $31FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $30FF} // LP oscillator: Low power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled implementation end. diff --git a/PIC16F677.pas b/devices16/PIC16F677.pas similarity index 57% rename from PIC16F677.pas rename to devices16/PIC16F677.pas index 3040384a..bf1ef0bf 100644 --- a/PIC16F677.pas +++ b/devices16/PIC16F677.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,24 +59,24 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; - PIR1_ADIF : bit absolute PIR1.4; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; PIR1_SSPIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; SSPBUF : byte absolute $0013; @@ -84,8 +89,8 @@ interface SSPCON_SSPM2 : bit absolute SSPCON.2; SSPCON_SSPM1 : bit absolute SSPCON.1; SSPCON_SSPM0 : bit absolute SSPCON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -95,7 +100,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -124,21 +129,21 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; - PIE1_ADIE : bit absolute PIE1.4; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; PIE1_SSPIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -153,15 +158,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -174,9 +170,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -190,18 +186,18 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -221,23 +217,23 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; @@ -246,18 +242,18 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - ANSELH : byte absolute $011f; + ANSELH : byte absolute $011F; ANSELH_ANS11 : bit absolute ANSELH.3; ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - SRCON : byte absolute $019e; + EECON1 : byte absolute $018C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -268,69 +264,75 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-010:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '013-014:SFR'} // SSPBUF, SSPCON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '093-097:SFR'} // SSPMSK, SSPSTAT, WPUA, IOCA, WDTCON - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10D:SFR'} // PCLATH, INTCON, EEDAT, EEADR - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // ANSEL, ANSELH - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19E-19E:SFR'} // SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : SSPBUF, SSPCON + {$SET_STATE_RAM '01E-01E:SFR:ALL'} // Bank 0 : ADRESH + // Bank 1 : ADRESL + // Bank 2 : ANSEL + // Bank 3 : SRCON + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '093-097:SFR'} // Bank 1 : SSPADD, SSPSTAT, WPUA, IOCA, WDTCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11F-11F:SFR'} // Bank 2 : ANSELH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:49'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:4F'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11F:0F'} // ANSELH - {$SET_UNIMP_BITS '18C:0F'} // EECON1 - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:49'} // PIR1 bits 7,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:49'} // PIE1 bits 7,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // ANSELH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -366,49 +368,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F684.pas b/devices16/PIC16F684.pas similarity index 60% rename from PIC16F684.pas rename to devices16/PIC16F684.pas index f7237352..681b7ebf 100644 --- a/PIC16F684.pas +++ b/devices16/PIC16F684.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,7 +52,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_CCP1IF : bit absolute PIR1.5; @@ -56,15 +61,15 @@ interface PIR1_OSFIF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -74,14 +79,15 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0013; CCPR1H : byte absolute $0014; CCP1CON : byte absolute $0015; - CCP1CON_P1M1 : bit absolute CCP1CON.7; - CCP1CON_P1M0 : bit absolute CCP1CON.6; - CCP1CON_DC1B1 : bit absolute CCP1CON.5; - CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_PM1 : bit absolute CCP1CON.7; + CCP1CON_PM0 : bit absolute CCP1CON.6; + CCP1CON_DCB1 : bit absolute CCP1CON.5; + CCP1CON_DCB0 : bit absolute CCP1CON.4; CCP1CON_CCP1M3 : bit absolute CCP1CON.3; CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; @@ -119,19 +125,20 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - CMCON1 : byte absolute $001a; + CMCON1 : byte absolute $001A; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -153,7 +160,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_CCP1IE : bit absolute PIE1.5; @@ -162,15 +169,15 @@ interface PIE1_OSFIE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.6; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IOSCF2 : bit absolute OSCCON.6; + OSCCON_IOSCF1 : bit absolute OSCCON.5; + OSCCON_IOSCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_HTS : bit absolute OSCCON.2; OSCCON_LTS : bit absolute OSCCON.1; @@ -194,9 +201,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -205,22 +212,22 @@ interface IOCA_IOCA1 : bit absolute IOCA.1; IOCA_IOCA0 : bit absolute IOCA.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -228,49 +235,59 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-01A:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS, WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-092:SFR'} // PCON, OSCCON, OSCTUNE, ANSEL, PR2 - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '099-09F:SFR'} // VRCON, EEDAT, EEADR, EECON1, EECON2, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-012:SFR:ALL'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL, PR2 + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : CCPR1L, CCPR1H + {$SET_STATE_RAM '015-016:SFR:ALL'} // Bank 0 : CCP1CON, PWM1CON + // Bank 1 : WPUA, IOCA + {$SET_STATE_RAM '017-018:SFR'} // Bank 0 : ECCPAS, WDTCON + {$SET_STATE_RAM '019-01A:SFR:ALL'} // Bank 0 : CMCON0, CMCON1 + // Bank 1 : VRCON, EEDAT + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADRESH, ADCON0 + // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09D:SFR'} // Bank 1 : EEADR, EECON1, EECON2 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '01A:03'} // CMCON1 - {$SET_UNIMP_BITS '01F:DF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:70'} // ADCON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:DF'} // ADCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -299,49 +316,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown Out Detect - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown Out Detect + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin - {$define _FOSC_EXTRCIO = $0DFF} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin - {$define _FOSC_INTOSCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F685.pas b/devices16/PIC16F685.pas similarity index 55% rename from PIC16F685.pas rename to devices16/PIC16F685.pas index 9596207a..cf109310 100644 --- a/PIC16F685.pas +++ b/devices16/PIC16F685.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,25 +59,25 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; - PIR1_CCP1IF : bit absolute PIR1.5; - PIR1_TMR2IF : bit absolute PIR1.4; - PIR1_TMR1IF : bit absolute PIR1.3; - PIR2 : byte absolute $000d; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -82,7 +87,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -94,7 +100,7 @@ interface CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - PWM1CON : byte absolute $001c; + PWM1CON : byte absolute $001C; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -103,7 +109,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $001d; + ECCPAS : byte absolute $001D; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -112,8 +118,8 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -123,7 +129,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -152,22 +158,22 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; - PIE1_CCP1IE : bit absolute PIE1.5; - PIE1_TMR2IE : bit absolute PIE1.4; - PIE1_TMR1IE : bit absolute PIE1.3; - PIE2 : byte absolute $008d; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -185,9 +191,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -201,20 +207,30 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -234,23 +250,23 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; @@ -259,25 +275,25 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - ANSELH : byte absolute $011f; + ANSELH : byte absolute $011F; ANSELH_ANS11 : bit absolute ANSELH.3; ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - PSTRCON : byte absolute $019d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + PSTRCON : byte absolute $019D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - SRCON : byte absolute $019e; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -288,72 +304,84 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-012:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-017:SFR'} // CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01C-01F:SFR'} // PWM1CON, ECCPAS, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '095-097:SFR'} // WPUA, IOCA, WDTCON - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDAT, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // ANSEL, ANSELH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19D-19E:SFR'} // PSTRCON, SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-017:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01C-01D:SFR'} // Bank 0 : PWM1CON, ECCPAS + {$SET_STATE_RAM '01E-01E:SFR:ALL'} // Bank 0 : ADRESH + // Bank 1 : ADRESL + // Bank 2 : ANSEL + // Bank 3 : SRCON + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : WPUA, IOCA, WDTCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11F-11F:SFR'} // Bank 2 : ANSELH + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '19D-19D:SFR'} // Bank 3 : PSTRCON - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:47'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:47'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11F:0F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 - {$SET_UNIMP_BITS '19D:1F'} // PSTRCON - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:47'} // PIR1 bits 7,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:47'} // PIE1 bits 7,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // ANSELH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -389,49 +417,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F687.pas b/devices16/PIC16F687.pas similarity index 60% rename from PIC16F687.pas rename to devices16/PIC16F687.pas index faaf6f87..e69eb303 100644 --- a/PIC16F687.pas +++ b/devices16/PIC16F687.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,26 +59,26 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; PIR1_SSPIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; SSPBUF : byte absolute $0013; @@ -96,9 +101,9 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -108,7 +113,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -137,23 +142,23 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; PIE1_SSPIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -168,15 +173,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -189,9 +185,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -223,7 +219,7 @@ interface SPBRG_BRG2 : bit absolute SPBRG.2; SPBRG_BRG1 : bit absolute SPBRG.1; SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; + SPBRGH : byte absolute $009A; SPBRGH_BRG15 : bit absolute SPBRGH.7; SPBRGH_BRG14 : bit absolute SPBRGH.6; SPBRGH_BRG13 : bit absolute SPBRGH.5; @@ -232,25 +228,25 @@ interface SPBRGH_BRG10 : bit absolute SPBRGH.2; SPBRGH_BRG9 : bit absolute SPBRGH.1; SPBRGH_BRG8 : bit absolute SPBRGH.0; - BAUDCTL : byte absolute $009b; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL : byte absolute $009B; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -270,23 +266,23 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; @@ -295,18 +291,18 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - ANSELH : byte absolute $011f; + ANSELH : byte absolute $011F; ANSELH_ANS11 : bit absolute ANSELH.3; ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - SRCON : byte absolute $019e; + EECON1 : byte absolute $018C; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -317,71 +313,77 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-010:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '013-014:SFR'} // SSPBUF, SSPCON - {$SET_STATE_RAM '018-01A:SFR'} // RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '093-09B:SFR'} // SSPMSK, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10D:SFR'} // PCLATH, INTCON, EEDAT, EEADR - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // ANSEL, ANSELH - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19E-19E:SFR'} // SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : SSPBUF, SSPCON + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01E:SFR:ALL'} // Bank 0 : ADRESH + // Bank 1 : ADRESL + // Bank 2 : ANSEL + // Bank 3 : SRCON + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '093-09B:SFR'} // Bank 1 : SSPADD, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11F-11F:SFR'} // Bank 2 : ANSELH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:79'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11F:0F'} // ANSELH - {$SET_UNIMP_BITS '18C:0F'} // EECON1 - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:79'} // PIR1 bits 7,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:79'} // PIE1 bits 7,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // ANSELH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -417,49 +419,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F688.pas b/devices16/PIC16F688.pas similarity index 55% rename from PIC16F688.pas rename to devices16/PIC16F688.pas index 764beb18..023bc7b2 100644 --- a/PIC16F688.pas +++ b/devices16/PIC16F688.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -37,8 +37,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -47,7 +52,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -56,24 +61,24 @@ interface PIR1_OSFIF : bit absolute PIR1.2; PIR1_TXIF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; BAUDCTL : byte absolute $0011; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; SPBRGH : byte absolute $0012; SPBRG : byte absolute $0013; RCREG : byte absolute $0014; @@ -111,19 +116,20 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - CMCON1 : byte absolute $001a; + CMCON1 : byte absolute $001A; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -145,7 +151,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -154,15 +160,15 @@ interface PIE1_OSFIE : bit absolute PIE1.2; PIE1_TXIE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBODEN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.6; - OSCCON_IRCF1 : bit absolute OSCCON.5; - OSCCON_IRCF0 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IOSCF2 : bit absolute OSCCON.6; + OSCCON_IOSCF1 : bit absolute OSCCON.5; + OSCCON_IOSCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_HTS : bit absolute OSCCON.2; OSCCON_LTS : bit absolute OSCCON.1; @@ -185,9 +191,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -196,25 +202,35 @@ interface IOCA_IOCA1 : bit absolute IOCA.1; IOCA_IOCA0 : bit absolute IOCA.0; EEDATH : byte absolute $0097; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; EEADRH : byte absolute $0098; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; VRCON : byte absolute $0099; - VRCON_VREN : bit absolute VRCON.6; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - EEDAT : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + EEDAT : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -222,66 +238,66 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-005:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '007-007:SFR'} // PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-01A:SFR'} // TMR1L, TMR1H, T1CON, BAUDCTL, SPBRGH, SPBRG, RCREG, TXREG, TXSTA, RCSTA, WDTCON, CMCON0, CMCON1 - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-085:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '087-087:SFR'} // TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-091:SFR'} // PCON, OSCCON, OSCTUNE, ANSEL - {$SET_STATE_RAM '095-09F:SFR'} // WPUA, IOCA, EEDATH, EEADRH, VRCON, EEDAT, EEADR, EECON1, EECON2, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-105:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_STATE_RAM '107-107:SFR'} // PORTC - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-185:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA - {$SET_STATE_RAM '187-187:SFR'} // TRISC - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + // Bank 2 : PORTA + // Bank 3 : TRISA + {$SET_STATE_RAM '007-007:SFR:ALL'} // Bank 0 : PORTC + // Bank 1 : TRISC + // Bank 2 : PORTC + // Bank 3 : TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, BAUDCTL, SPBRGH, SPBRG, RCREG, TXREG, TXSTA, RCSTA, WDTCON, CMCON0, CMCON1 + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-091:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : WPUA, IOCA, EEDATH, EEADRH, VRCON, EEDAT, EEADR, EECON1, EECON2, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '120-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-105:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA - {$SET_MAPPED_RAM '107-107:bnk0'} // PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-185:bnk1'} // TRISA - {$SET_MAPPED_RAM '187-187:bnk1'} // TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-105:bnk0'} // maps to PORTA (bank 0) + {$SET_MAPPED_RAM '107-107:bnk0'} // maps to PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-185:bnk1'} // maps to TRISA (bank 1) + {$SET_MAPPED_RAM '187-187:bnk1'} // maps to TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '007:3F'} // PORTC - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '011:DB'} // BAUDCTL - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '01A:03'} // CMCON1 - {$SET_UNIMP_BITS '01F:DF'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '087:3F'} // TRISC - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:3F'} // EEDATH - {$SET_UNIMP_BITS '098:0F'} // EEADRH - {$SET_UNIMP_BITS '099:AF'} // VRCON - {$SET_UNIMP_BITS '09C:8F'} // EECON1 - {$SET_UNIMP_BITS '09F:70'} // ADCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:DF'} // ADCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -310,49 +326,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown Out Detect - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown Out Detect + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin - {$define _FOSC_EXTRCIO = $0DFF} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin - {$define _FOSC_INTOSCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F689.pas b/devices16/PIC16F689.pas similarity index 58% rename from PIC16F689.pas rename to devices16/PIC16F689.pas index 1df6d771..b218d03f 100644 --- a/PIC16F689.pas +++ b/devices16/PIC16F689.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,26 +59,26 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; PIR1_SSPIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; SSPBUF : byte absolute $0013; @@ -96,9 +101,9 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -108,7 +113,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -137,23 +142,23 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; PIE1_SSPIE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -168,15 +173,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -189,9 +185,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -223,7 +219,7 @@ interface SPBRG_BRG2 : bit absolute SPBRG.2; SPBRG_BRG1 : bit absolute SPBRG.1; SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; + SPBRGH : byte absolute $009A; SPBRGH_BRG15 : bit absolute SPBRGH.7; SPBRGH_BRG14 : bit absolute SPBRGH.6; SPBRGH_BRG13 : bit absolute SPBRGH.5; @@ -232,27 +228,37 @@ interface SPBRGH_BRG10 : bit absolute SPBRGH.2; SPBRGH_BRG9 : bit absolute SPBRGH.1; SPBRGH_BRG8 : bit absolute SPBRGH.0; - BAUDCTL : byte absolute $009b; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL : byte absolute $009B; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -272,23 +278,23 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; @@ -297,19 +303,19 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - ANSELH : byte absolute $011f; + ANSELH : byte absolute $011F; ANSELH_ANS11 : bit absolute ANSELH.3; ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - SRCON : byte absolute $019e; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -320,72 +326,81 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-010:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON - {$SET_STATE_RAM '013-014:SFR'} // SSPBUF, SSPCON - {$SET_STATE_RAM '018-01A:SFR'} // RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '093-09B:SFR'} // SSPMSK, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDAT, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // ANSEL, ANSELH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19E-19E:SFR'} // SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-010:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON + {$SET_STATE_RAM '013-014:SFR'} // Bank 0 : SSPBUF, SSPCON + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01E:SFR:ALL'} // Bank 0 : ADRESH + // Bank 1 : ADRESL + // Bank 2 : ANSEL + // Bank 3 : SRCON + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '093-09B:SFR'} // Bank 1 : SSPADD, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11F-11F:SFR'} // Bank 2 : ANSELH + {$SET_STATE_RAM '120-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:79'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11F:0F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:79'} // PIR1 bits 7,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // ANSELH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -421,49 +436,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F690.pas b/devices16/PIC16F690.pas similarity index 60% rename from PIC16F690.pas rename to devices16/PIC16F690.pas index 8146f765..17515639 100644 --- a/PIC16F690.pas +++ b/devices16/PIC16F690.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,7 +59,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RABIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -62,20 +67,20 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -85,7 +90,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -117,8 +123,8 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - PWM1CON : byte absolute $001c; + RCREG : byte absolute $001A; + PWM1CON : byte absolute $001C; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -127,7 +133,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $001d; + ECCPAS : byte absolute $001D; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -136,8 +142,8 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -147,7 +153,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RABPU : bit absolute OPTION_REG.7; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -176,7 +182,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -184,17 +190,17 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -210,15 +216,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -231,9 +228,9 @@ interface WPUA : byte absolute $0095; WPUA_WPUA5 : bit absolute WPUA.5; WPUA_WPUA4 : bit absolute WPUA.4; - WPUA_WPUA2 : bit absolute WPUA.3; - WPUA_WPUA1 : bit absolute WPUA.2; - WPUA_WPUA0 : bit absolute WPUA.1; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; IOCA : byte absolute $0096; IOCA_IOCA5 : bit absolute IOCA.5; IOCA_IOCA4 : bit absolute IOCA.4; @@ -265,7 +262,7 @@ interface SPBRG_BRG2 : bit absolute SPBRG.2; SPBRG_BRG1 : bit absolute SPBRG.1; SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; + SPBRGH : byte absolute $009A; SPBRGH_BRG15 : bit absolute SPBRGH.7; SPBRGH_BRG14 : bit absolute SPBRGH.6; SPBRGH_BRG13 : bit absolute SPBRGH.5; @@ -274,27 +271,37 @@ interface SPBRGH_BRG10 : bit absolute SPBRGH.2; SPBRGH_BRG9 : bit absolute SPBRGH.1; SPBRGH_BRG8 : bit absolute SPBRGH.0; - BAUDCTL : byte absolute $009b; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL : byte absolute $009B; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - EEDAT : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + EEDAT : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; WPUB : byte absolute $0115; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.7; + WPUB_WPUB2 : bit absolute WPUB.6; + WPUB_WPUB1 : bit absolute WPUB.5; + WPUB_WPUB0 : bit absolute WPUB.4; IOCB : byte absolute $0116; IOCB_IOCB7 : bit absolute IOCB.7; IOCB_IOCB6 : bit absolute IOCB.6; @@ -314,23 +321,23 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - ANSEL : byte absolute $011e; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + ANSEL : byte absolute $011E; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; @@ -339,25 +346,25 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - ANSELH : byte absolute $011f; + ANSELH : byte absolute $011F; ANSELH_ANS11 : bit absolute ANSELH.3; ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; - PSTRCON : byte absolute $019d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + PSTRCON : byte absolute $019D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - SRCON : byte absolute $019e; + SRCON : byte absolute $019E; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; SRCON_C1SEN : bit absolute SRCON.5; @@ -368,72 +375,83 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-01A:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01C-01F:SFR'} // PWM1CON, ECCPAS, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-09B:SFR'} // PR2, SSPMSK, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDAT, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '115-116:SFR'} // WPUB, IOCB - {$SET_STATE_RAM '118-11B:SFR'} // VRCON, CM1CON0, CM2CON0, CM2CON1 - {$SET_STATE_RAM '11E-11F:SFR'} // ANSEL, ANSELH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '19D-19E:SFR'} // PSTRCON, SRCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDAT, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01C-01D:SFR'} // Bank 0 : PWM1CON, ECCPAS + {$SET_STATE_RAM '01E-01E:SFR:ALL'} // Bank 0 : ADRESH + // Bank 1 : ADRESL + // Bank 2 : ANSEL + // Bank 3 : SRCON + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-09B:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT, WPUA, IOCA, WDTCON, TXSTA, SPBRG, SPBRGH, BAUDCTL + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '118-11B:SFR'} // Bank 2 : VRCON, CM1CON0, CM2CON0, CM2CON1 + {$SET_STATE_RAM '11F-11F:SFR'} // Bank 2 : ANSELH + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '19D-19D:SFR'} // Bank 3 : PSTRCON - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:F0'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:F0'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '095:37'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '097:1F'} // WDTCON - {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '115:F0'} // WPUB - {$SET_UNIMP_BITS '116:F0'} // IOCB - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11F:0F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 - {$SET_UNIMP_BITS '19D:1F'} // PSTRCON - {$SET_UNIMP_BITS '19E:FC'} // SRCON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PIR2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // PIE2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:37'} // WPUA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // ANSELH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // SRCON bits 1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -469,49 +487,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN + {$define _FOSC_INTRCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTRCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $0DFF} // RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN - {$define _FOSC_INTRCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTRCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F707.pas b/devices16/PIC16F707.pas similarity index 62% rename from PIC16F707.pas rename to devices16/PIC16F707.pas index 59a2a2b6..83e8e3f4 100644 --- a/PIC16F707.pas +++ b/devices16/PIC16F707.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,22 +88,22 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_TMR3GIF : bit absolute PIR2.7; PIR2_TMR3IF : bit absolute PIR2.6; PIR2_TMRBIF : bit absolute PIR2.5; PIR2_TMRAIF : bit absolute PIR2.4; - PIR2_CCP2IF : bit absolute PIR2.3; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_TMR1CS1 : bit absolute T1CON.7; - T1CON_TMRCS1 : bit absolute T1CON.6; - T1CON_TMRCS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -106,7 +111,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -136,18 +142,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -155,13 +161,14 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS1 : bit absolute OPTION_REG.2; - OPTION_REG_PS0 : bit absolute OPTION_REG.1; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; TRISA : byte absolute $0085; TRISA_TRISA7 : bit absolute TRISA.7; TRISA_TRISA6 : bit absolute TRISA.6; @@ -203,7 +210,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -212,16 +219,16 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_TMR3GIE : bit absolute PIE2.7; PIE2_TMR3IE : bit absolute PIE2.6; PIE2_TMRBIE : bit absolute PIE2.5; PIE2_TMRAIE : bit absolute PIE2.4; - PIE2_CCP2IE : bit absolute PIE2.3; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; @@ -236,9 +243,14 @@ interface OSCCON_ICSL : bit absolute OSCCON.3; OSCCON_ICSS : bit absolute OSCCON.2; OSCTUNE : byte absolute $0091; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -249,45 +261,29 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; T3CON : byte absolute $0097; T3CON_TMR3CS1 : bit absolute T3CON.7; T3CON_TMR3CS0 : bit absolute T3CON.6; T3CON_T3CKPS1 : bit absolute T3CON.5; T3CON_T3CKPS0 : bit absolute T3CON.4; T3CON_T3SYNC : bit absolute T3CON.2; - T3CON_TMR3ON : bit absolute T3CON.1; + T3CON_TMR3ON : bit absolute T3CON.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - TMR3L : byte absolute $009a; - TMR3H : byte absolute $009b; - APFCON : byte absolute $009c; + TMR3L : byte absolute $009A; + TMR3H : byte absolute $009B; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; + FVRCON : byte absolute $009D; FVRCON_FVRRDY : bit absolute FVRCON.7; FVRCON_FVREN : bit absolute FVRCON.6; FVRCON_TSEN : bit absolute FVRCON.5; @@ -296,7 +292,7 @@ interface FVRCON_CDAFVR0 : bit absolute FVRCON.2; FVRCON_ADFVR1 : bit absolute FVRCON.1; FVRCON_ADFVR0 : bit absolute FVRCON.0; - T3GCON : byte absolute $009e; + T3GCON : byte absolute $009E; T3GCON_TMR3GE : bit absolute T3GCON.7; T3GCON_T3GPOL : bit absolute T3GCON.6; T3GCON_T3GTM : bit absolute T3GCON.5; @@ -305,26 +301,27 @@ interface T3GCON_T3GVAL : bit absolute T3GCON.2; T3GCON_T3GSS1 : bit absolute T3GCON.1; T3GCON_T3GSS0 : bit absolute T3GCON.0; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; TACON : byte absolute $0105; TACON_TMRAON : bit absolute TACON.7; - TACON_TACS : bit absolute TACON.6; - TACON_TASE : bit absolute TACON.5; - TACON_TAPSA : bit absolute TACON.4; - TACON_TMRAPSA : bit absolute TACON.3; + TACON_TACS : bit absolute TACON.5; + TACON_TASE : bit absolute TACON.4; + TACON_TAPSA : bit absolute TACON.3; TACON_TAPS2 : bit absolute TACON.2; TACON_TAPS1 : bit absolute TACON.1; TACON_TAPS0 : bit absolute TACON.0; CPSBCON0 : byte absolute $0106; CPSBCON0_CPSBON : bit absolute CPSBCON0.7; CPSBCON0_CPSBRM : bit absolute CPSBCON0.6; - CPSBCON0_CPSBOUT : bit absolute CPSBCON0.3; - CPSBCON0_TBXCS : bit absolute CPSBCON0.2; + CPSBCON0_CPSBRNG1 : bit absolute CPSBCON0.3; + CPSBCON0_CPSBRNG0 : bit absolute CPSBCON0.2; + CPSBCON0_CPSBOUT : bit absolute CPSBCON0.1; + CPSBCON0_TBXCS : bit absolute CPSBCON0.0; CPSBCON1 : byte absolute $0107; CPSBCON1_CPSBCH3 : bit absolute CPSBCON1.3; CPSBCON1_CPSBCH2 : bit absolute CPSBCON1.2; @@ -333,32 +330,44 @@ interface CPSACON0 : byte absolute $0108; CPSACON0_CPSAON : bit absolute CPSACON0.7; CPSACON0_CPSARM : bit absolute CPSACON0.6; - CPSACON0_CPSAOUT : bit absolute CPSACON0.3; - CPSACON0_TAXCS : bit absolute CPSACON0.2; + CPSACON0_CPSARNG1 : bit absolute CPSACON0.3; + CPSACON0_CPSARNG0 : bit absolute CPSACON0.2; + CPSACON0_CPSAOUT : bit absolute CPSACON0.1; + CPSACON0_TAXCS : bit absolute CPSACON0.0; CPSACON1 : byte absolute $0109; CPSACON1_CPSACH3 : bit absolute CPSACON1.3; CPSACON1_CPSACH2 : bit absolute CPSACON1.2; CPSACON1_CPSACH1 : bit absolute CPSACON1.1; CPSACON1_CPSACH0 : bit absolute CPSACON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; TMRA : byte absolute $0110; TBCON : byte absolute $0111; TBCON_TMRBON : bit absolute TBCON.7; - TBCON_TBCS : bit absolute TBCON.6; - TBCON_TBSE : bit absolute TBCON.5; - TBCON_TBPSA : bit absolute TBCON.4; - TBCON_TMRBPSA : bit absolute TBCON.3; + TBCON_TBCS : bit absolute TBCON.5; + TBCON_TBSE : bit absolute TBCON.4; + TBCON_TBPSA : bit absolute TBCON.3; TBCON_TBPS2 : bit absolute TBCON.2; TBCON_TBPS1 : bit absolute TBCON.1; TBCON_TBPS0 : bit absolute TBCON.0; TMRB : byte absolute $0112; DACCON0 : byte absolute $0113; - DACCON0_DACEN : bit absolute DACCON0.6; - DACCON0_DACLPS : bit absolute DACCON0.5; - DACCON0_DACOE : bit absolute DACCON0.4; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; DACCON0_DACPSS1 : bit absolute DACCON0.3; DACCON0_DACPSS0 : bit absolute DACCON0.2; DACCON1 : byte absolute $0114; @@ -386,12 +395,12 @@ interface ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; ANSELC : byte absolute $0187; - ANSELC_ANSC7 : bit absolute ANSELC.6; - ANSELC_ANSC6 : bit absolute ANSELC.5; - ANSELC_ANSC5 : bit absolute ANSELC.4; - ANSELC_ANSC2 : bit absolute ANSELC.3; - ANSELC_ANSC1 : bit absolute ANSELC.2; - ANSELC_ANSC0 : bit absolute ANSELC.1; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; ANSELD : byte absolute $0188; ANSELD_ANSD7 : bit absolute ANSELD.7; ANSELD_ANSD6 : bit absolute ANSELD.6; @@ -405,73 +414,78 @@ interface ANSELE_ANSE2 : bit absolute ANSELE.2; ANSELE_ANSE1 : bit absolute ANSELE.1; ANSELE_ANSE0 : bit absolute ANSELE.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-09F:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, T3CON, TXSTA, SPBRG, TMR3L, TMR3H, APFCON, FVRCON, T3GCON, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-114:SFR'} // INDF, TMR0, PCL, STATUS, FSR, TACON, CPSBCON0, CPSBCON1, CPSACON0, CPSACON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH, TMRA, TBCON, TMRB, DACCON0, DACCON1 - {$SET_STATE_RAM '115-17F:GPR'} - {$SET_STATE_RAM '180-18C:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-009:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE + // Bank 2 : TACON, CPSBCON0, CPSBCON1, CPSACON0, CPSACON1 + // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08D-09F:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB, T3CON, TXSTA, SPBRG, TMR3L, TMR3H, APFCON, FVRCON, T3GCON, ADCON1 + {$SET_STATE_RAM '10D-114:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH, TMRA, TBCON, TMRB, DACCON0, DACCON1 + {$SET_STATE_RAM '115-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '100-104:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '097:FD'} // T3CON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '105:00'} // TACON - {$SET_UNIMP_BITS '106:00'} // CPSBCON0 - {$SET_UNIMP_BITS '107:00'} // CPSBCON1 - {$SET_UNIMP_BITS '108:00'} // CPSACON0 - {$SET_UNIMP_BITS '109:00'} // CPSACON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '110:00'} // TMRA - {$SET_UNIMP_BITS '111:00'} // TBCON - {$SET_UNIMP_BITS '112:00'} // TMRB - {$SET_UNIMP_BITS '113:00'} // DACCON0 - {$SET_UNIMP_BITS '114:00'} // DACCON1 - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '187:3F'} // ANSELC - {$SET_UNIMP_BITS '189:07'} // ANSELE - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F1'} // PIR2 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F1'} // PIE2 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:BF'} // TACON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '106:CF'} // CPSBCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:0F'} // CPSBCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:CF'} // CPSACON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSACON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:BF'} // TBCON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:E7'} // ANSELC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -529,55 +543,51 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $377F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $377E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSC = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN pins + {$define _FOSC_EC_OSC = $3FFB} // EC oscillator: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS_OSC = $3FFA} // HS oscillator: High Speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT_OSC = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKIN and RA7/OSC1/CLKIN + {$define _FOSC_LP_OSC = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $377F} // INTOSC Frequency is 16 MHz (32x) - {$define _PLLEN_OFF = $377D} // INTOSC Frequency is 500 kHz + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BORV : Brown-out Reset Voltage Selection bit - {$define _BORV_19 = $377F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $377B} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $377F} // BOR enabled - {$define _BOREN_NSLEEP = $3777} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $376F} // BOR disabled (Preconditioned State) - {$define _BOREN_OFF = $3767} // BOR disabled (Preconditioned State) + // MCLRE : RE3/MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $377F} // Program memory code protection is disabled - {$define _CP_ON = $375F} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR Pin Function Select bit - {$define _MCLRE_ON = $377F} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $373F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $37FF} // PWRT disabled - {$define _PWRTE_ON = $377F} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled (Preconditioned State) + {$define _BOREN_OFF = $3CFF} // BOR disabled (Preconditioned State) - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $377F} // WDT enabled - {$define _WDTE_OFF = $367F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // BORV : Brown-out Reset Voltage Selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $3D7F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSC = $3B7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $397F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN pins - {$define _FOSC_EC_OSC = $377F} // EC oscillator: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS_OSC = $357F} // HS oscillator: High Speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT_OSC = $337F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKIN and RA7/OSC1/CLKIN - {$define _FOSC_LP_OSC = $317F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16 MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_OFF = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F716.pas b/devices16/PIC16F716.pas similarity index 55% rename from PIC16F716.pas rename to devices16/PIC16F716.pas index ee32e92b..569d550f 100644 --- a/PIC16F716.pas +++ b/devices16/PIC16F716.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -38,8 +38,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -48,17 +53,18 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; - PIR1_CCP1IF : bit absolute PIR1.5; - PIR1_TMR2IF : bit absolute PIR1.4; - PIR1_TMR1IF : bit absolute PIR1.3; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -68,7 +74,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -92,22 +99,22 @@ interface ECCPAS : byte absolute $0019; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; - ECCPAS_ECCPAS0 : bit absolute ECCPAS.5; - ECCPAS_PSSAC1 : bit absolute ECCPAS.4; - ECCPAS_PSSAC0 : bit absolute ECCPAS.3; - ECCPAS_PSSBD1 : bit absolute ECCPAS.2; - ECCPAS_PSSBD0 : bit absolute ECCPAS.1; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ECCPAS_ECCPAS0 : bit absolute ECCPAS.4; + ECCPAS_PSSAC1 : bit absolute ECCPAS.3; + ECCPAS_PSSAC0 : bit absolute ECCPAS.2; + ECCPAS_PSSBD1 : bit absolute ECCPAS.1; + ECCPAS_PSSBD0 : bit absolute ECCPAS.0; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -130,16 +137,16 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; - PIE1_CCP1IE : bit absolute PIE1.5; - PIE1_TMR2IE : bit absolute PIE1.4; - PIE1_TMR1IE : bit absolute PIE1.3; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; @@ -147,42 +154,49 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-012:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-019:SFR'} // CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS - {$SET_STATE_RAM '01E-01F:SFR'} // ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-08E:SFR'} // PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : PORTA, PORTB + // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + {$SET_STATE_RAM '00E-00E:SFR:ALL'} // Bank 0 : TMR1L + // Bank 1 : PCON + {$SET_STATE_RAM '00F-011:SFR'} // Bank 0 : TMR1H, T1CON, TMR2 + {$SET_STATE_RAM '012-012:SFR:ALL'} // Bank 0 : T2CON + // Bank 1 : PR2 + {$SET_STATE_RAM '015-019:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, ECCPAS + {$SET_STATE_RAM '01E-01E:SFR'} // Bank 0 : ADRES + {$SET_STATE_RAM '01F-01F:SFR:ALL'} // Bank 0 : ADCON0 + // Bank 1 : ADCON1 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:1F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:47'} // PIR1 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '019:DF'} // ECCPAS - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:1F'} // TRISA - {$SET_UNIMP_BITS '08C:47'} // PIE1 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '09F:07'} // ADCON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:47'} // PIR1 bits 7,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:DF'} // ECCPAS bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:1F'} // TRISA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:47'} // PIE1 bits 7,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) // -- PIN mapping -- @@ -215,31 +229,31 @@ interface // -- Bits Configuration -- - // CP : Code Protect - {$define _CP_OFF = $20CF} // Program memory code protection is disabled - {$define _CP_ON = $20CE} // Program memory code protection is enabled - - // BODENV : Brown-out Reset Voltage bit - {$define _BODENV_40 = $20CF} // VBOR set to 4.0V - {$define _BODENV_25 = $20CD} // VBOR set to 2.5V + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $20CF} // BOR enabled - {$define _BOREN_OFF = $20CB} // BOR disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $20CF} // PWRT disabled - {$define _PWRTE_ON = $20C7} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $20DF} // WDT enabled - {$define _WDTE_OFF = $20CF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_RC = $20EF} // RC oscillator - {$define _FOSC_HS = $20CF} // HS oscillator - {$define _FOSC_XT = $20AF} // XT oscillator - {$define _FOSC_LP = $208F} // LP oscillator + // BODENV : Brown-out Reset Voltage bit + {$define _BODENV_40 = $3FFF} // VBOR set to 4.0V + {$define _BODENV_25 = $3F7F} // VBOR set to 2.5V + + // CP : Code Protect + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $1FFF} // Program memory code protection is enabled implementation end. diff --git a/devices16/PIC16F72.pas b/devices16/PIC16F72.pas new file mode 100644 index 00000000..cadd2d41 --- /dev/null +++ b/devices16/PIC16F72.pas @@ -0,0 +1,320 @@ +unit PIC16F72; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F72'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RBIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RBIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_CCP1X : bit absolute CCP1CON.5; + CCP1CON_CCP1Y : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.5; + ADCON0_CHS1 : bit absolute ADCON0.4; + ADCON0_CHS0 : bit absolute ADCON0.3; + ADCON0_GO_nDONE : bit absolute ADCON0.2; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + ADCON1 : byte absolute $009F; + ADCON1_PCFG2 : bit absolute ADCON1.2; + ADCON1_PCFG1 : bit absolute ADCON1.1; + ADCON1_PCFG0 : bit absolute ADCON1.0; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; + PMCON1_RD : bit absolute PMCON1.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00E-017:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRES, ADCON0 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-13F:bnk0'} // maps to area 020-03F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1BF:bnk1'} // maps to area 0A0-0BF (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:4F'} // PIR1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:4F'} // PIE1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : MCLR/Vpp + // Pin 2 : RA0/AN0 + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS + // Pin 8 : Vss + // Pin 9 : OSC1/CLKI + // Pin 10 : OSC2/CLKO + // Pin 11 : RC0/T1OSO/T1CKI + // Pin 12 : RC1/T1OSI + // Pin 13 : RC2/CCP1 + // Pin 14 : RC3/SCK/SCL + // Pin 15 : RC4/SDI/SDA + // Pin 16 : RC5/SDO + // Pin 17 : RC6 + // Pin 18 : RC7 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/INT + // Pin 22 : RB1 + // Pin 23 : RB2 + // Pin 24 : RB3 + // Pin 25 : RB4 + // Pin 26 : RB5 + // Pin 27 : RB6/PGC + // Pin 28 : RB7/PGD + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-2,1-3,2-4,3-5,4-6,5-7'} // PORTA + {$MAP_RAM_TO_PIN '006:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '007:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled + + // CP : FLASH Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $3FEF} // All Memory locations code protected + + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled + +implementation +end. diff --git a/devices16/PIC16F720.pas b/devices16/PIC16F720.pas new file mode 100644 index 00000000..5fa27669 --- /dev/null +++ b/devices16/PIC16F720.pas @@ -0,0 +1,426 @@ +unit PIC16F720; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F720'} +{$SET PIC_MAXFREQ = 16000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RABIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RABIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_DC1 : bit absolute CCP1CON.5; + CCP1CON_B1 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + RCSTA : byte absolute $0018; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXREG : byte absolute $0019; + RCREG : byte absolute $001A; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $008C; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_DONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + OSCCON : byte absolute $0090; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; + OSCCON_ICSL : bit absolute OSCCON.3; + OSCCON_ICSS : bit absolute OSCCON.2; + OSCTUNE : byte absolute $0091; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + WPUA : byte absolute $0095; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + IOCA : byte absolute $0096; + IOCA_IOCA5 : bit absolute IOCA.5; + IOCA_IOCA4 : bit absolute IOCA.4; + IOCA_IOCA3 : bit absolute IOCA.3; + IOCA_IOCA2 : bit absolute IOCA.2; + IOCA_IOCA1 : bit absolute IOCA.1; + IOCA_IOCA0 : bit absolute IOCA.0; + TXSTA : byte absolute $0098; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + SPBRG : byte absolute $0099; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + WPUB : byte absolute $0115; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + IOCB : byte absolute $0116; + IOCB_IOCB7 : bit absolute IOCB.7; + IOCB_IOCB6 : bit absolute IOCB.6; + IOCB_IOCB5 : bit absolute IOCB.5; + IOCB_IOCB4 : bit absolute IOCB.4; + ANSELA : byte absolute $0185; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $0186; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $0187; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMCON1 : byte absolute $018C; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $018D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '08E-096:SFR'} // Bank 1 : PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUA, IOCA + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09D-09D:SFR'} // Bank 1 : FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '185-187:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '18D-18D:SFR'} // Bank 3 : PMCON2 + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:F7'} // PMCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:00'} // PMCON2 bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/T1CKI/CLKIN + // Pin 3 : RA4/AN3/T1G/CLKOUT + // Pin 4 : RA3/MCLR/Vpp + // Pin 5 : RC5/CCP1 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7 + // Pin 8 : RC6/AN8/SS + // Pin 9 : RC7/AN9/SDO + // Pin 10 : RB7/TX/CK + // Pin 11 : RB6/SCK/SCL + // Pin 12 : RB5/AN11/RX/DT + // Pin 13 : RB4/AN10/SDI/SDA + // Pin 14 : RC2/AN6 + // Pin 15 : RC1/AN5 + // Pin 16 : RC0/AN4 + // Pin 17 : RA2/AN2/T0CKI/INT + // Pin 18 : RA1/AN1/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '006:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '007:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_ECCLK = $3FFF} // EC oscillator: CLKO function on RA4/CLKO pin, CLKI on RA5/CLKI + {$define _FOSC_ECIO = $3FFE} // EC oscillator: I/O function on RA4/CLKO pin, CLKI on RA5/CLKI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKO function on RA4/CLKO pin, I/O function on RA5/CLKI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/CLKO pin, I/O function on RA5/CLKI + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_OFF = $3FF7} // WDT disabled + {$define _WDTE_ON = $3FFF} // WDT enabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_ON = $3FEF} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + + // MCLRE : RA3/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA3/MCLR/VPP pin function is MCLR; Weak pull-up enabled. + {$define _MCLRE_OFF = $3FDF} // RA3/MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up disabled + + // CP : Flash Program Memory Code Protection bit + {$define _CP_ON = $3FBF} // 0000h to 07FFh code protection on + {$define _CP_OFF = $3FFF} // Code protection off + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_OFF = $3CFF} // Brown-out Reset disabled (Preconditioned State) + {$define _BOREN_NSLEEP = $3EFF} // Brown-out Reset enabled during operation and disabled in Sleep + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16 MHz (32x) + + // WRTEN : Flash memory self-write protection bits + {$define _WRTEN_OFF = $3FFF} // Write protection off + {$define _WRTEN_BOOT = $3FFE} // 0h to 1FFh of flash memory write protected, 200h to FFFh may be modified + {$define _WRTEN_HALF = $3FFD} // 0h to 7FFh of flash memory write protected, 800h to FFFh may be modified + {$define _WRTEN_FULL = $3FFC} // 0h to FFFh of flash memory write protected, no address may be modified + +implementation +end. diff --git a/devices16/PIC16F721.pas b/devices16/PIC16F721.pas new file mode 100644 index 00000000..422cfe88 --- /dev/null +++ b/devices16/PIC16F721.pas @@ -0,0 +1,427 @@ +unit PIC16F721; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F721'} +{$SET PIC_MAXFREQ = 16000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RABIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RABIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_DC1 : bit absolute CCP1CON.5; + CCP1CON_B1 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + RCSTA : byte absolute $0018; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXREG : byte absolute $0019; + RCREG : byte absolute $001A; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRABPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $008C; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_DONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + OSCCON : byte absolute $0090; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; + OSCCON_ICSL : bit absolute OSCCON.3; + OSCCON_ICSS : bit absolute OSCCON.2; + OSCTUNE : byte absolute $0091; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + WPUA : byte absolute $0095; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + IOCA : byte absolute $0096; + IOCA_IOCA5 : bit absolute IOCA.5; + IOCA_IOCA4 : bit absolute IOCA.4; + IOCA_IOCA3 : bit absolute IOCA.3; + IOCA_IOCA2 : bit absolute IOCA.2; + IOCA_IOCA1 : bit absolute IOCA.1; + IOCA_IOCA0 : bit absolute IOCA.0; + TXSTA : byte absolute $0098; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + SPBRG : byte absolute $0099; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + WPUB : byte absolute $0115; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + IOCB : byte absolute $0116; + IOCB_IOCB7 : bit absolute IOCB.7; + IOCB_IOCB6 : bit absolute IOCB.6; + IOCB_IOCB5 : bit absolute IOCB.5; + IOCB_IOCB4 : bit absolute IOCB.4; + ANSELA : byte absolute $0185; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $0186; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $0187; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMCON1 : byte absolute $018C; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $018D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '08E-096:SFR'} // Bank 1 : PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUA, IOCA + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09D-09D:SFR'} // Bank 1 : FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '115-116:SFR'} // Bank 2 : WPUB, IOCB + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '185-187:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '18D-18D:SFR'} // Bank 3 : PMCON2 + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:F7'} // PMCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:00'} // PMCON2 bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/T1CKI/CLKIN + // Pin 3 : RA4/AN3/T1G/CLKOUT + // Pin 4 : RA3/MCLR/Vpp + // Pin 5 : RC5/CCP1 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7 + // Pin 8 : RC6/AN8/SS + // Pin 9 : RC7/AN9/SDO + // Pin 10 : RB7/TX/CK + // Pin 11 : RB6/SCK/SCL + // Pin 12 : RB5/AN11/RX/DT + // Pin 13 : RB4/AN10/SDI/SDA + // Pin 14 : RC2/AN6 + // Pin 15 : RC1/AN5 + // Pin 16 : RC0/AN4 + // Pin 17 : RA2/AN2/T0CKI/INT + // Pin 18 : RA1/AN1/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '006:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '007:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_ECCLK = $3FFF} // EC oscillator: CLKO function on RA4/CLKO pin, CLKI on RA5/CLKI + {$define _FOSC_ECIO = $3FFE} // EC oscillator: I/O function on RA4/CLKO pin, CLKI on RA5/CLKI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKO function on RA4/CLKO pin, I/O function on RA5/CLKI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/CLKO pin, I/O function on RA5/CLKI + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_OFF = $3FF7} // WDT disabled + {$define _WDTE_ON = $3FFF} // WDT enabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_ON = $3FEF} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + + // MCLRE : RA3/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA3/MCLR/VPP pin function is MCLR; Weak pull-up enabled. + {$define _MCLRE_OFF = $3FDF} // RA3/MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up disabled + + // CP : Flash Program Memory Code Protection bit + {$define _CP_ON = $3FBF} // 0000h to 0FFFh code protection on + {$define _CP_OFF = $3FFF} // Code protection off + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_OFF = $3CFF} // Brown-out Reset disabled (Preconditioned State) + {$define _BOREN_NSLEEP = $3EFF} // Brown-out Reset enabled during operation and disabled in Sleep + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16 MHz (32x) + + // WRTEN : Flash memory self-write protection bits + {$define _WRTEN_OFF = $3FFF} // Write protection off + {$define _WRTEN_BOOT = $3FFE} // 0h to 1FFh of flash memory write protected, 200h to FFFh may be modified + {$define _WRTEN_HALF = $3FFD} // 0h to 7FFh of flash memory write protected, 800h to FFFh may be modified + {$define _WRTEN_FULL = $3FFC} // 0h to FFFh of flash memory write protected, no address may be modified + +implementation +end. diff --git a/PIC16F722.pas b/devices16/PIC16F722.pas similarity index 59% rename from PIC16F722.pas rename to devices16/PIC16F722.pas index fb4e0cc5..2e123280 100644 --- a/PIC16F722.pas +++ b/devices16/PIC16F722.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,17 +76,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -89,7 +95,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -119,18 +126,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -138,7 +145,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -175,7 +182,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -184,19 +191,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -211,7 +219,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -222,60 +229,56 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -290,69 +293,76 @@ interface ANSELB_ANSB2 : bit absolute ANSELB.2; ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-096:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '108-109:SFR'} // Bank 2 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -397,62 +407,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F722A.pas b/devices16/PIC16F722A.pas similarity index 59% rename from PIC16F722A.pas rename to devices16/PIC16F722A.pas index 66858011..43c8b927 100644 --- a/PIC16F722A.pas +++ b/devices16/PIC16F722A.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,17 +76,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -89,7 +95,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -119,18 +126,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -138,7 +145,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -174,8 +181,8 @@ interface TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; - TRISE_TRISE3 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -184,19 +191,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -211,7 +219,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -222,31 +229,15 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; SPBRG_BRG7 : bit absolute SPBRG.7; SPBRG_BRG6 : bit absolute SPBRG.6; @@ -256,34 +247,46 @@ interface SPBRG_BRG2 : bit absolute SPBRG.2; SPBRG_BRG1 : bit absolute SPBRG.1; SPBRG_BRG0 : bit absolute SPBRG.0; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -298,69 +301,76 @@ interface ANSELB_ANSB2 : bit absolute ANSELB.2; ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-096:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '108-109:SFR'} // Bank 2 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -405,62 +415,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-circuit debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-circuit debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLL Enable bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR Pin Function Select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR Pin Function Select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLL Enable bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-circuit debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-circuit debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F723.pas b/devices16/PIC16F723.pas similarity index 59% rename from PIC16F723.pas rename to devices16/PIC16F723.pas index a8032333..67587b8c 100644 --- a/PIC16F723.pas +++ b/devices16/PIC16F723.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,17 +76,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -89,7 +95,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -119,18 +126,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -138,7 +145,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -175,7 +182,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -184,19 +191,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -211,7 +219,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -222,60 +229,56 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -290,69 +293,77 @@ interface ANSELB_ANSB2 : bit absolute ANSELB.2; ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-096:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '120-12F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '108-109:SFR'} // Bank 2 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '120-12F:GPR'} + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -397,62 +408,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F723A.pas b/devices16/PIC16F723A.pas similarity index 59% rename from PIC16F723A.pas rename to devices16/PIC16F723A.pas index cdc165a4..0bf3eb1d 100644 --- a/PIC16F723A.pas +++ b/devices16/PIC16F723A.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,17 +76,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -89,7 +95,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -119,18 +126,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -138,7 +145,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -174,8 +181,8 @@ interface TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; - TRISE_TRISE3 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -184,19 +191,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -211,7 +219,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -222,31 +229,15 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; SPBRG_BRG7 : bit absolute SPBRG.7; SPBRG_BRG6 : bit absolute SPBRG.6; @@ -256,34 +247,46 @@ interface SPBRG_BRG2 : bit absolute SPBRG.2; SPBRG_BRG1 : bit absolute SPBRG.1; SPBRG_BRG0 : bit absolute SPBRG.0; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -298,69 +301,77 @@ interface ANSELB_ANSB2 : bit absolute ANSELB.2; ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-096:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '120-12F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '108-109:SFR'} // Bank 2 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '120-12F:GPR'} + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -405,62 +416,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-circuit debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-circuit debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLL Enable bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR Pin Function Select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR Pin Function Select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLL Enable bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-circuit debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-circuit debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F724.pas b/devices16/PIC16F724.pas similarity index 61% rename from PIC16F724.pas rename to devices16/PIC16F724.pas index 380ec6eb..a88bfa19 100644 --- a/PIC16F724.pas +++ b/devices16/PIC16F724.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,17 +88,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -101,7 +107,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -131,18 +138,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -150,7 +157,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -199,7 +206,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -208,19 +215,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -235,7 +243,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -246,60 +253,56 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -315,80 +318,83 @@ interface ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; ANSELD : byte absolute $0188; - ANSELD_ANSD7 : bit absolute ANSELD.7; - ANSELD_ANSD6 : bit absolute ANSELD.6; - ANSELD_ANSD5 : bit absolute ANSELD.5; - ANSELD_ANSD4 : bit absolute ANSELD.4; - ANSELD_ANSD3 : bit absolute ANSELD.3; - ANSELD_ANSD2 : bit absolute ANSELD.2; - ANSELD_ANSD1 : bit absolute ANSELD.1; - ANSELD_ANSD0 : bit absolute ANSELD.0; ANSELE : byte absolute $0189; ANSELE_ANSE2 : bit absolute ANSELE.2; ANSELE_ANSE1 : bit absolute ANSELE.1; ANSELE_ANSE0 : bit absolute ANSELE.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-096:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '120-12F:GPR'} - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '188-18C:SFR'} // ANSELD, ANSELE, PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:00'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '189:07'} // ANSELE - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '008-009:SFR:ALL'} // Bank 0 : PORTD, PORTE + // Bank 1 : TRISD, TRISE + // Bank 2 : CPSCON0, CPSCON1 + // Bank 3 : ANSELD, ANSELE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '120-12F:GPR'} + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -446,62 +452,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F726.pas b/devices16/PIC16F726.pas similarity index 59% rename from PIC16F726.pas rename to devices16/PIC16F726.pas index f76cf03c..aee38677 100644 --- a/PIC16F726.pas +++ b/devices16/PIC16F726.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,17 +76,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -89,7 +95,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -119,18 +126,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -138,7 +145,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -175,7 +182,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -184,19 +191,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -211,7 +219,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -222,60 +229,56 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -290,68 +293,77 @@ interface ANSELB_ANSB2 : bit absolute ANSELB.2; ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-096:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '108-109:SFR'} // Bank 2 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -396,62 +408,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F727.pas b/devices16/PIC16F727.pas similarity index 61% rename from PIC16F727.pas rename to devices16/PIC16F727.pas index 9cd36fc8..8a7acf50 100644 --- a/PIC16F727.pas +++ b/devices16/PIC16F727.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_TMR1GIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,17 +88,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_TMR1CS1 : bit absolute T1CON.6; - T1CON_TMR1CS0 : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1ON : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; T2CON : byte absolute $0012; T2CON_TOUTPS3 : bit absolute T2CON.6; @@ -101,7 +107,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -131,18 +138,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_CHS3 : bit absolute ADCON0.5; ADCON0_CHS2 : bit absolute ADCON0.4; ADCON0_CHS1 : bit absolute ADCON0.3; @@ -150,7 +157,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -199,7 +206,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_TMR1GIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -208,19 +215,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - T1GCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + T1GCON : byte absolute $008F; T1GCON_TMR1GE : bit absolute T1GCON.7; T1GCON_T1GPOL : bit absolute T1GCON.6; T1GCON_T1GTM : bit absolute T1GCON.5; T1GCON_T1GSPM : bit absolute T1GCON.4; T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; T1GCON_T1GVAL : bit absolute T1GCON.2; - T1GCON_T1GSS0 : bit absolute T1GCON.1; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; OSCCON : byte absolute $0090; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -235,7 +243,6 @@ interface OSCTUNE_TUN0 : bit absolute OSCTUNE.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -246,60 +253,56 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - APFCON : byte absolute $009c; + APFCON : byte absolute $009C; APFCON_SSSEL : bit absolute APFCON.1; APFCON_CCP2SEL : bit absolute APFCON.0; - FVRCON : byte absolute $009d; - FVRCON_FVRRDY : bit absolute FVRCON.5; - FVRCON_FVREN : bit absolute FVRCON.4; - FVRCON_ADFVR1 : bit absolute FVRCON.3; - FVRCON_ADFVR0 : bit absolute FVRCON.2; - ADCON1 : byte absolute $009f; + FVRCON : byte absolute $009D; + FVRCON_FVRRDY : bit absolute FVRCON.7; + FVRCON_FVREN : bit absolute FVRCON.6; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; - ADCON1_ADREF1 : bit absolute ADCON1.3; - ADCON1_ADREF0 : bit absolute ADCON1.2; + ADCON1_ADREF1 : bit absolute ADCON1.1; + ADCON1_ADREF0 : bit absolute ADCON1.0; CPSCON0 : byte absolute $0108; CPSCON0_CPSON : bit absolute CPSCON0.7; - CPSCON0_CPSOUT : bit absolute CPSCON0.4; - CPSCON0_T0XCS : bit absolute CPSCON0.3; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; CPSCON1 : byte absolute $0109; CPSCON1_CPSCH3 : bit absolute CPSCON1.3; CPSCON1_CPSCH2 : bit absolute CPSCON1.2; CPSCON1_CPSCH1 : bit absolute CPSCON1.1; CPSCON1_CPSCH0 : bit absolute CPSCON1.0; - PMDATL : byte absolute $010c; - PMADRL : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; + PMDATL : byte absolute $010C; + PMADRL : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; ANSELA : byte absolute $0185; ANSELA_ANSA5 : bit absolute ANSELA.5; ANSELA_ANSA4 : bit absolute ANSELA.4; @@ -315,79 +318,83 @@ interface ANSELB_ANSB1 : bit absolute ANSELB.1; ANSELB_ANSB0 : bit absolute ANSELB.0; ANSELD : byte absolute $0188; - ANSELD_ANSD7 : bit absolute ANSELD.7; - ANSELD_ANSD6 : bit absolute ANSELD.6; - ANSELD_ANSD5 : bit absolute ANSELD.5; - ANSELD_ANSD4 : bit absolute ANSELD.4; - ANSELD_ANSD3 : bit absolute ANSELD.3; - ANSELD_ANSD2 : bit absolute ANSELD.2; - ANSELD_ANSD1 : bit absolute ANSELD.1; - ANSELD_ANSD0 : bit absolute ANSELD.0; ANSELE : byte absolute $0189; ANSELE_ANSE2 : bit absolute ANSELE.2; ANSELE_ANSE1 : bit absolute ANSELE.1; ANSELE_ANSE0 : bit absolute ANSELE.0; - PMCON1 : byte absolute $018c; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-096:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPMSK, SSPSTAT, WPUB, IOCB - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // APFCON, FVRCON - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '108-10F:SFR'} // CPSCON0, CPSCON1, PCLATH, INTCON, PMDATL, PMADRL, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-186:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, ANSELA, ANSELB - {$SET_STATE_RAM '188-18C:SFR'} // ANSELD, ANSELE, PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:FD'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:3F'} // ADCON0 - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '090:3C'} // OSCCON - {$SET_UNIMP_BITS '091:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09C:03'} // APFCON - {$SET_UNIMP_BITS '09D:F3'} // FVRCON - {$SET_UNIMP_BITS '09F:73'} // ADCON1 - {$SET_UNIMP_BITS '108:00'} // CPSCON0 - {$SET_UNIMP_BITS '109:0F'} // CPSCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '185:3F'} // ANSELA - {$SET_UNIMP_BITS '186:3F'} // ANSELB - {$SET_UNIMP_BITS '189:07'} // ANSELE - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '008-009:SFR:ALL'} // Bank 0 : PORTD, PORTE + // Bank 1 : TRISD, TRISE + // Bank 2 : CPSCON0, CPSCON1 + // Bank 3 : ANSELD, ANSELE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATL + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-087:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '08D-096:SFR'} // Bank 1 : PIE2, PCON, T1GCON, OSCCON, OSCTUNE, PR2, SSPADD, SSPSTAT, WPUB, IOCB + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : APFCON, FVRCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADRL, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '185-186:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:3F'} // ADCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3C'} // OSCCON bits 7,6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C3'} // FVRCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:73'} // ADCON1 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '186:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '18C:80'} // PMCON1 bit 7 un-implemented (read as 1) // -- PIN mapping -- @@ -445,62 +452,55 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3F7F} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3F7E} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // PLLEN : INTOSC PLLEN Enable Bit - {$define _PLLEN_ON = $3F7F} // INTOSC Frequency is 16MHz (32x) - {$define _PLLEN_OFF = $3F7D} // INTOSC Frequency is 500 kHz - - // WDTCS : Watchdog Timer Clock Select - {$define _WDTCS_ = $3F7F} // Standard Watchdog Timer is selected - {$define _WDTCS_ = $3F7B} // Low Power Watchdog Timer is selected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // BORV : Brown-out Reset Voltage selection bit - {$define _BORV_19 = $3F7F} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal - {$define _BORV_25 = $3F77} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $3F7F} // BOR enabled - {$define _BOREN_NSLEEP = $3F6F} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_OFF = $3F5F} // BOR disabled - {$define _BOREN_OFF = $3F4F} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // RES : Reserved - {$define _RES_ = $3F7F} // Reserved + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR // CP : Code Protection bit {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_OFF = $3E7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - {$define _MCLRE_ON = $3F7F} // RE3/MCLR pin function is MCLR + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_OFF = $3DFF} // BOR disabled + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3F7F} // PWRT disabled - {$define _PWRTE_ON = $3D7F} // PWRT enabled + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_19 = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9 V nominal + {$define _BORV_25 = $3BFF} // Brown-out Reset Voltage (VBOR) set to 2.5 V nominal - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3F7F} // WDT enabled - {$define _WDTE_OFF = $3B7F} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // PLLEN : INTOSC PLLEN Enable Bit + {$define _PLLEN_ON = $3FFF} // INTOSC Frequency is 16MHz (32x) + {$define _PLLEN_OFF = $2FFF} // INTOSC Frequency is 500 kHz - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $3F7F} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRCIO = $377F} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCCLK = $2F7F} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $277F} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1F7F} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $177F} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0F7F} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $077F} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // VCAPEN : Voltage Regulator Capacitor Enable bits - {$define _VCAPEN_DIS = $0033} // All VCAP pin functions are disabled - {$define _VCAPEN_RA6 = $0032} // VCAP functionality is enabled on RA6 - {$define _VCAPEN_RA5 = $0031} // VCAP functionality is enabled on RA5 - {$define _VCAPEN_RA0 = $0030} // VCAP functionality is enabled on RA0 + {$define _VCAPEN_DIS = $3FFF} // All VCAP pin functions are disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 implementation end. diff --git a/PIC16F73.pas b/devices16/PIC16F73.pas similarity index 56% rename from PIC16F73.pas rename to devices16/PIC16F73.pas index 984539e8..27609ef4 100644 --- a/PIC16F73.pas +++ b/devices16/PIC16F73.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -58,7 +63,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -66,14 +71,15 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -83,7 +89,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -108,31 +115,31 @@ interface RCSTA_RX9 : bit absolute RCSTA.6; RCSTA_SREN : bit absolute RCSTA.5; RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_FERR : bit absolute RCSTA.3; - RCSTA_OERR : bit absolute RCSTA.2; - RCSTA_RX9D : bit absolute RCSTA.1; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -165,7 +172,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -173,11 +180,11 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -194,80 +201,96 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-01F:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08D-08E:SFR'} // Bank 1 : PIE2, PCON + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:F7'} // RCSTA - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:07'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:81'} // PMCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F7'} // RCSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -311,27 +334,27 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $005F} // BOR enabled - {$define _BOREN_OFF = $005E} // BOR disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // CP : FLASH Program Memory Code Protection bit - {$define _CP_OFF = $005F} // Code protection off - {$define _CP_ON = $005D} // All Memory locations code protected + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $005F} // PWRT disabled - {$define _PWRTE_ON = $005B} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $005F} // WDT enabled - {$define _WDTE_OFF = $0057} // WDT disabled + // CP : FLASH Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $3FEF} // All Memory locations code protected - // FOSC : Oscillator Selection bits - {$define _FOSC_RC = $007F} // RC oscillator - {$define _FOSC_HS = $006F} // HS oscillator - {$define _FOSC_XT = $005F} // XT oscillator - {$define _FOSC_LP = $004F} // LP oscillator + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled implementation end. diff --git a/PIC16F737.pas b/devices16/PIC16F737.pas similarity index 59% rename from PIC16F737.pas rename to devices16/PIC16F737.pas index 9fc90fba..2177bb7f 100644 --- a/PIC16F737.pas +++ b/devices16/PIC16F737.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,20 +76,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; - PIR2_LVDIF : bit absolute PIR2.4; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_LVDIF : bit absolute PIR2.5; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP3IF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -94,7 +100,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -124,18 +131,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; @@ -145,7 +152,7 @@ interface ADCON0_CHS3 : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -180,7 +187,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -189,23 +196,25 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; - PIE2_LVDIE : bit absolute PIE2.4; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_LVDIE : bit absolute PIE2.5; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP3IE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.2; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.5; - OSCCON_IRCF1 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF2 : bit absolute OSCCON.6; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; - OSCCON_SCS0 : bit absolute OSCCON.1; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -247,15 +256,15 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON2 : byte absolute $009b; + ADCON2 : byte absolute $009B; ADCON2_ACQT2 : bit absolute ADCON2.5; ADCON2_ACQT1 : bit absolute ADCON2.4; ADCON2_ACQT0 : bit absolute ADCON2.3; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -264,7 +273,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -272,8 +281,8 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_VCFG1 : bit absolute ADCON1.5; @@ -295,72 +304,93 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-099:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG - {$SET_STATE_RAM '09B-09F:SFR'} // ADCON2, CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '109-10F:SFR'} // LVDCON, PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:EB'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:EB'} // PIE2 - {$SET_UNIMP_BITS '08E:07'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '097:3F'} // CCP3CON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09B:38'} // ADCON2 - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:3F'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08D-099:SFR'} // Bank 1 : PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADCON2, CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '109-109:SFR'} // Bank 2 : LVDCON + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:EB'} // PIR2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:EB'} // PIE2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:07'} // PCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:38'} // ADCON2 bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:3F'} // LVDCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:01'} // PMCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -405,61 +435,61 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bits - {$define _CP_OFF = $39FF} // Code protection off - {$define _CP_ON = $39FE} // 0000h to 0FFFh code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCP2MX : CCP2 Multiplex bit - {$define _CCP2MX_RC1 = $39FF} // CCP2 is on RC1 - {$define _CCP2MX_RB3 = $39FD} // CCP2 is on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $39FF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $39FB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // BORV : Brown-out Reset Voltage bits - {$define _BORV_20 = $39FF} // VBOR set to 2.0V - {$define _BORV_27 = $39F7} // VBOR set to 2.7V - {$define _BORV_42 = $39EF} // VBOR set to 4.2V - {$define _BORV_45 = $39E7} // VBOR set to 4.5V + // MCLRE : MCLR/VPP/RE3 Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP/RE3 pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $39FF} // Enabled - {$define _BOREN_OFF = $39DF} // Disabled + {$define _BOREN_ON = $3FFF} // Enabled + {$define _BOREN_OFF = $3FBF} // Disabled - // MCLRE : MCLR/VPP/RE3 Pin Function Select bit - {$define _MCLRE_ON = $39FF} // MCLR/VPP/RE3 pin function is MCLR - {$define _MCLRE_OFF = $39BF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' + // BORV : Brown-out Reset Voltage bits + {$define _BORV_20 = $3FFF} // VBOR set to 2.0V + {$define _BORV_27 = $3F7F} // VBOR set to 2.7V + {$define _BORV_42 = $3EFF} // VBOR set to 4.2V + {$define _BORV_45 = $3E7F} // VBOR set to 4.5V - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $39FF} // PWRT disabled - {$define _PWRTE_ON = $397F} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $39FF} // WDT enabled - {$define _WDTE_OFF = $38FF} // WDT disabled + // CCP2MX : CCP2 Multiplex bit + {$define _CCP2MX_RC1 = $3FFF} // CCP2 is on RC1 + {$define _CCP2MX_RB3 = $2FFF} // CCP2 is on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $27FF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 - {$define _FOSC_EXTRCIO = $25FF} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_INTOSCCLK = $23FF} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 - {$define _FOSC_INTOSCIO = $21FF} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 - {$define _FOSC_EC = $07FF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_HS = $05FF} // HS oscillator - {$define _FOSC_XT = $03FF} // XT oscillator - {$define _FOSC_LP = $01FF} // LP oscillator + // CP : Flash Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 0FFFh code-protected - // BORSEN : Brown-out Reset Software Enable bit - {$define _BORSEN_ON = $0043} // Enabled - {$define _BORSEN_OFF = $0042} // Disabled + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled // IESO : Internal External Switchover bit - {$define _IESO_ON = $0043} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0041} // Internal External Switchover mode disabled + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0047} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0043} // Fail-Safe Clock Monitor disabled + // BORSEN : Brown-out Reset Software Enable bit + {$define _BORSEN_ON = $3FFF} // Enabled + {$define _BORSEN_OFF = $3FBF} // Disabled implementation end. diff --git a/PIC16F74.pas b/devices16/PIC16F74.pas similarity index 60% rename from PIC16F74.pas rename to devices16/PIC16F74.pas index 145b2279..8598955e 100644 --- a/PIC16F74.pas +++ b/devices16/PIC16F74.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -71,7 +76,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -80,14 +85,15 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -97,7 +103,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -122,31 +129,31 @@ interface RCSTA_RX9 : bit absolute RCSTA.6; RCSTA_SREN : bit absolute RCSTA.5; RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_FERR : bit absolute RCSTA.3; - RCSTA_OERR : bit absolute RCSTA.2; - RCSTA_RX9D : bit absolute RCSTA.1; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -193,10 +200,10 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -205,11 +212,11 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -226,78 +233,96 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08D-08E:SFR'} // Bank 1 : PIE2, PCON + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:F7'} // RCSTA - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:07'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:81'} // PMCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F7'} // RCSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -355,27 +380,27 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $005F} // BOR enabled - {$define _BOREN_OFF = $005E} // BOR disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // CP : FLASH Program Memory Code Protection bit - {$define _CP_OFF = $005F} // Code protection off - {$define _CP_ON = $005D} // All Memory locations code protected + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $005F} // PWRT disabled - {$define _PWRTE_ON = $005B} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $005F} // WDT enabled - {$define _WDTE_OFF = $0057} // WDT disabled + // CP : FLASH Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $3FEF} // All Memory locations code protected - // FOSC : Oscillator Selection bits - {$define _FOSC_RC = $007F} // RC oscillator - {$define _FOSC_HS = $006F} // HS oscillator - {$define _FOSC_XT = $005F} // XT oscillator - {$define _FOSC_LP = $004F} // LP oscillator + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled implementation end. diff --git a/PIC16F747.pas b/devices16/PIC16F747.pas similarity index 62% rename from PIC16F747.pas rename to devices16/PIC16F747.pas index e10e985c..91a76272 100644 --- a/PIC16F747.pas +++ b/devices16/PIC16F747.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,20 +88,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; - PIR2_LVDIF : bit absolute PIR2.4; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_LVDIF : bit absolute PIR2.5; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP3IF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -106,7 +112,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -136,18 +143,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; @@ -157,7 +164,7 @@ interface ADCON0_CHS3 : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -210,7 +217,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -219,23 +226,25 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; - PIE2_LVDIE : bit absolute PIE2.4; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_LVDIE : bit absolute PIE2.5; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP3IE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.2; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.5; - OSCCON_IRCF1 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF2 : bit absolute OSCCON.6; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; - OSCCON_SCS0 : bit absolute OSCCON.1; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -277,15 +286,15 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON2 : byte absolute $009b; + ADCON2 : byte absolute $009B; ADCON2_ACQT2 : bit absolute ADCON2.5; ADCON2_ACQT1 : bit absolute ADCON2.4; ADCON2_ACQT0 : bit absolute ADCON2.3; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -294,7 +303,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -302,8 +311,8 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_VCFG1 : bit absolute ADCON1.5; @@ -325,68 +334,90 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-099:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG - {$SET_STATE_RAM '09B-09F:SFR'} // ADCON2, CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '109-10F:SFR'} // LVDCON, PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:EB'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '08D:EB'} // PIE2 - {$SET_UNIMP_BITS '08E:07'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '097:3F'} // CCP3CON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09B:38'} // ADCON2 - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:3F'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08D-099:SFR'} // Bank 1 : PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADCON2, CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '109-109:SFR'} // Bank 2 : LVDCON + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:EB'} // PIR2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:EB'} // PIE2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:07'} // PCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:38'} // ADCON2 bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:3F'} // LVDCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:01'} // PMCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -444,61 +475,61 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bits - {$define _CP_OFF = $39FF} // Code protection off - {$define _CP_ON = $39FE} // 0000h to 0FFFh code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCP2MX : CCP2 Multiplex bit - {$define _CCP2MX_RC1 = $39FF} // CCP2 is on RC1 - {$define _CCP2MX_RB3 = $39FD} // CCP2 is on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $39FF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $39FB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // BORV : Brown-out Reset Voltage bits - {$define _BORV_20 = $39FF} // VBOR set to 2.0V - {$define _BORV_27 = $39F7} // VBOR set to 2.7V - {$define _BORV_42 = $39EF} // VBOR set to 4.2V - {$define _BORV_45 = $39E7} // VBOR set to 4.5V + // MCLRE : MCLR/VPP/RE3 Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP/RE3 pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $39FF} // Enabled - {$define _BOREN_OFF = $39DF} // Disabled + {$define _BOREN_ON = $3FFF} // Enabled + {$define _BOREN_OFF = $3FBF} // Disabled - // MCLRE : MCLR/VPP/RE3 Pin Function Select bit - {$define _MCLRE_ON = $39FF} // MCLR/VPP/RE3 pin function is MCLR - {$define _MCLRE_OFF = $39BF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' + // BORV : Brown-out Reset Voltage bits + {$define _BORV_20 = $3FFF} // VBOR set to 2.0V + {$define _BORV_27 = $3F7F} // VBOR set to 2.7V + {$define _BORV_42 = $3EFF} // VBOR set to 4.2V + {$define _BORV_45 = $3E7F} // VBOR set to 4.5V - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $39FF} // PWRT disabled - {$define _PWRTE_ON = $397F} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $39FF} // WDT enabled - {$define _WDTE_OFF = $38FF} // WDT disabled + // CCP2MX : CCP2 Multiplex bit + {$define _CCP2MX_RC1 = $3FFF} // CCP2 is on RC1 + {$define _CCP2MX_RB3 = $2FFF} // CCP2 is on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $27FF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 - {$define _FOSC_EXTRCIO = $25FF} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_INTOSCCLK = $23FF} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 - {$define _FOSC_INTOSCIO = $21FF} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 - {$define _FOSC_EC = $07FF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_HS = $05FF} // HS oscillator - {$define _FOSC_XT = $03FF} // XT oscillator - {$define _FOSC_LP = $01FF} // LP oscillator + // CP : Flash Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 0FFFh code-protected - // BORSEN : Brown-out Reset Software Enable bit - {$define _BORSEN_ON = $0043} // Enabled - {$define _BORSEN_OFF = $0042} // Disabled + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled // IESO : Internal External Switchover bit - {$define _IESO_ON = $0043} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0041} // Internal External Switchover mode disabled + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0047} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0043} // Fail-Safe Clock Monitor disabled + // BORSEN : Brown-out Reset Software Enable bit + {$define _BORSEN_ON = $3FFF} // Enabled + {$define _BORSEN_OFF = $3FBF} // Disabled implementation end. diff --git a/devices16/PIC16F753.pas b/devices16/PIC16F753.pas new file mode 100644 index 00000000..d90a3b1a --- /dev/null +++ b/devices16/PIC16F753.pas @@ -0,0 +1,649 @@ +unit PIC16F753; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F753'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $0007; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + IOCAF : byte absolute $0008; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCF : byte absolute $0009; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_HLTMR2IF : bit absolute PIR1.3; + PIR1_HLTMR1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; + PIR2_C2IF : bit absolute PIR2.5; + PIR2_C1IF : bit absolute PIR2.4; + PIR2_COG1IF : bit absolute PIR2.2; + PIR2_CCP1IF : bit absolute PIR2.0; + TMR1L : byte absolute $000F; + TMR1H : byte absolute $0010; + T1CON : byte absolute $0011; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0012; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + CCPR1L : byte absolute $0013; + CCPR1H : byte absolute $0014; + CCP1CON : byte absolute $0015; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + ADRESL : byte absolute $001C; + ADRESH : byte absolute $001D; + ADCON0 : byte absolute $001E; + ADCON0_ADFM : bit absolute ADCON0.7; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $001F; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0087; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + IOCAP : byte absolute $0088; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCCP : byte absolute $0089; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + PIE1 : byte absolute $008C; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_HLTMR2IE : bit absolute PIE1.3; + PIE1_HLTMR1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; + PIE2_C2IE : bit absolute PIE2.5; + PIE2_C1IE : bit absolute PIE2.4; + PIE2_COG1IE : bit absolute PIE2.2; + PIE2_CCP1IE : bit absolute PIE2.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; + OSCCON_HTS : bit absolute OSCCON.2; + OSCCON_LTS : bit absolute OSCCON.1; + FVR1CON0 : byte absolute $0090; + FVR1CON0_FVREN : bit absolute FVR1CON0.7; + FVR1CON0_FVRRDY : bit absolute FVR1CON0.6; + FVR1CON0_FVROE : bit absolute FVR1CON0.5; + FVR1CON0_FVRBUFSS01 : bit absolute FVR1CON0.4; + FVR1CON0_FVRBUFSS00 : bit absolute FVR1CON0.3; + FVR1CON0_FVRBUFEN : bit absolute FVR1CON0.0; + DAC1CON0 : byte absolute $0091; + DAC1CON0_DACEN : bit absolute DAC1CON0.7; + DAC1CON0_DACFM : bit absolute DAC1CON0.6; + DAC1CON0_DACOE : bit absolute DAC1CON0.5; + DAC1CON0_DACPSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DACPSS0 : bit absolute DAC1CON0.2; + DAC1REFL : byte absolute $0092; + DAC1REFH : byte absolute $0093; + OPA1CON : byte absolute $0096; + OPA1CON_OPAEN : bit absolute OPA1CON.7; + OPA1CON_OPAUGM : bit absolute OPA1CON.4; + OPA1CON_OPA1NCH1 : bit absolute OPA1CON.3; + OPA1CON_OPA1NCH0 : bit absolute OPA1CON.2; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + CM2CON0 : byte absolute $009B; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $009C; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CM1CON0 : byte absolute $009D; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $009E; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $009F; + CMOUT_MCOUT2 : bit absolute CMOUT.1; + CMOUT_MCOUT1 : bit absolute CMOUT.0; + LATA : byte absolute $0105; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $0107; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + IOCAN : byte absolute $0108; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCCN : byte absolute $0109; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + WPUA : byte absolute $010C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $010D; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SLRCONC : byte absolute $010E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + PCON : byte absolute $010F; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + TMR2 : byte absolute $0110; + PR2 : byte absolute $0111; + T2CON : byte absolute $0112; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + HLTMR1 : byte absolute $0113; + HLTPR1 : byte absolute $0114; + HLT1CON0 : byte absolute $0115; + HLT1CON0_H1OUTPS3 : bit absolute HLT1CON0.6; + HLT1CON0_H1OUTPS2 : bit absolute HLT1CON0.5; + HLT1CON0_H1OUTPS1 : bit absolute HLT1CON0.4; + HLT1CON0_H1OUTPS0 : bit absolute HLT1CON0.3; + HLT1CON0_H1ON : bit absolute HLT1CON0.2; + HLT1CON0_H1CKPS1 : bit absolute HLT1CON0.1; + HLT1CON0_H1CKPS0 : bit absolute HLT1CON0.0; + HLT1CON1 : byte absolute $0116; + HLT1CON1_H1FES : bit absolute HLT1CON1.7; + HLT1CON1_H1RES : bit absolute HLT1CON1.6; + HLT1CON1_H1ERS2 : bit absolute HLT1CON1.4; + HLT1CON1_H1ERS1 : bit absolute HLT1CON1.3; + HLT1CON1_H1ERS0 : bit absolute HLT1CON1.2; + HLT1CON1_H1FEREN : bit absolute HLT1CON1.1; + HLT1CON1_H1REREN : bit absolute HLT1CON1.0; + HLTMR2 : byte absolute $0117; + HLTPR2 : byte absolute $0118; + HLT2CON0 : byte absolute $0119; + HLT2CON0_H2OUTPS3 : bit absolute HLT2CON0.6; + HLT2CON0_H2OUTPS2 : bit absolute HLT2CON0.5; + HLT2CON0_H2OUTPS1 : bit absolute HLT2CON0.4; + HLT2CON0_H2OUTPS0 : bit absolute HLT2CON0.3; + HLT2CON0_H2ON : bit absolute HLT2CON0.2; + HLT2CON0_H2CKPS1 : bit absolute HLT2CON0.1; + HLT2CON0_H2CKPS0 : bit absolute HLT2CON0.0; + HLT2CON1 : byte absolute $011A; + HLT2CON1_H2FES : bit absolute HLT2CON1.7; + HLT2CON1_H2RES : bit absolute HLT2CON1.6; + HLT2CON1_H2ERS2 : bit absolute HLT2CON1.4; + HLT2CON1_H2ERS1 : bit absolute HLT2CON1.3; + HLT2CON1_H2ERS0 : bit absolute HLT2CON1.2; + HLT2CON1_H2FEREN : bit absolute HLT2CON1.1; + HLT2CON1_H2REREN : bit absolute HLT2CON1.0; + SLPC1CON0 : byte absolute $011E; + SLPC1CON0_SC1EN : bit absolute SLPC1CON0.7; + SLPC1CON0_SC1MRPE : bit absolute SLPC1CON0.5; + SLPC1CON0_SC1POL : bit absolute SLPC1CON0.4; + SLPC1CON0_SC1TSS1 : bit absolute SLPC1CON0.3; + SLPC1CON0_SC1TSS0 : bit absolute SLPC1CON0.2; + SLPC1CON0_SC1INS : bit absolute SLPC1CON0.0; + SLPC1CON1 : byte absolute $011F; + SLPC1CON1_SC1RNG : bit absolute SLPC1CON1.4; + SLPC1CON1_SC1ISET3 : bit absolute SLPC1CON1.3; + SLPC1CON1_SC1ISET2 : bit absolute SLPC1CON1.2; + SLPC1CON1_SC1ISET1 : bit absolute SLPC1CON1.1; + SLPC1CON1_SC1ISET0 : bit absolute SLPC1CON1.0; + ANSELA : byte absolute $0185; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $0187; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + APFCON : byte absolute $0188; + APFCON_T1GSEL : bit absolute APFCON.4; + OSCTUNE : byte absolute $0189; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + PMCON1 : byte absolute $018C; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $018D; + PMADRL : byte absolute $018E; + PMADRH : byte absolute $018F; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0190; + PMDATH : byte absolute $0191; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + COG1PHR : byte absolute $0192; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0193; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BKR : byte absolute $0194; + COG1BKR_G1BKR3 : bit absolute COG1BKR.3; + COG1BKR_G1BKR2 : bit absolute COG1BKR.2; + COG1BKR_G1BKR1 : bit absolute COG1BKR.1; + COG1BKR_G1BKR0 : bit absolute COG1BKR.0; + COG1BKF : byte absolute $0195; + COG1BKF_G1BKF3 : bit absolute COG1BKF.3; + COG1BKF_G1BKF2 : bit absolute COG1BKF.2; + COG1BKF_G1BKF1 : bit absolute COG1BKF.1; + COG1BKF_G1BKF0 : bit absolute COG1BKF.0; + COG1DBR : byte absolute $0196; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0197; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0198; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1OE1 : bit absolute COG1CON0.6; + COG1CON0_G1OE0 : bit absolute COG1CON0.5; + COG1CON0_G1POL1 : bit absolute COG1CON0.4; + COG1CON0_G1POL0 : bit absolute COG1CON0.3; + COG1CON0_G1LD : bit absolute COG1CON0.2; + COG1CON0_G1MD : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0199; + COG1CON1_G1RDBTS : bit absolute COG1CON1.7; + COG1CON1_G1FDBTS : bit absolute COG1CON1.6; + COG1CON1_G1CS1 : bit absolute COG1CON1.1; + COG1CON1_G1CS0 : bit absolute COG1CON1.0; + COG1RIS : byte absolute $019A; + COG1RIS_G1RIHLT2 : bit absolute COG1RIS.6; + COG1RIS_G1R1HLT1 : bit absolute COG1RIS.5; + COG1RIS_G1RIT2M : bit absolute COG1RIS.4; + COG1RIS_G1RIFLT : bit absolute COG1RIS.3; + COG1RIS_C1RICCP1 : bit absolute COG1RIS.2; + COG1RIS_G1RIC2 : bit absolute COG1RIS.1; + COG1RIS_G1RIC1 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $019B; + COG1RSIM_G1RMHLT2 : bit absolute COG1RSIM.6; + COG1RSIM_G1RMHLT1 : bit absolute COG1RSIM.5; + COG1RSIM_G1RTM2M : bit absolute COG1RSIM.4; + COG1RSIM_G1RMFLT : bit absolute COG1RSIM.3; + COG1RSIM_G1RMCCP1 : bit absolute COG1RSIM.2; + COG1RSIM_G1RMC2 : bit absolute COG1RSIM.1; + COG1RSIM_G1RMC1 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $019C; + COG1FIS_G1FIHLT2 : bit absolute COG1FIS.6; + COG1FIS_G1FIHLT1 : bit absolute COG1FIS.5; + COG1FIS_G1FIT2M : bit absolute COG1FIS.4; + COG1FIS_G1FIFLT : bit absolute COG1FIS.3; + COG1FIS_G1FICCP1 : bit absolute COG1FIS.2; + COG1FIS_G1FIC2 : bit absolute COG1FIS.1; + COG1FIS_G1FIC1 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $019D; + COG1FSIM_G1FMHLT2 : bit absolute COG1FSIM.6; + COG1FSIM_G1FMHLT1 : bit absolute COG1FSIM.5; + COG1FSIM_G1FMT2M : bit absolute COG1FSIM.4; + COG1FSIM_G1FMFLT : bit absolute COG1FSIM.3; + COG1FSIM_G1FMCCP1 : bit absolute COG1FSIM.2; + COG1FSIM_G1FMC2 : bit absolute COG1FSIM.1; + COG1FSIM_G1FMC1 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $019E; + COG1ASD0_G1ASDE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASD1L1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASD1L0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASD0L1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASD0L0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $019F; + COG1ASD1_G1ASDSHLT2 : bit absolute COG1ASD1.4; + COG1ASD1_G1ASDSHLT1 : bit absolute COG1ASD1.3; + COG1ASD1_G1ASDSC2 : bit absolute COG1ASD1.2; + COG1ASD1_G1ASDSC1 : bit absolute COG1ASD1.1; + COG1ASD1_G1ASDSFLT : bit absolute COG1ASD1.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR:ALL'} // Bank 0 : PORTA + // Bank 1 : TRISA + // Bank 2 : LATA + // Bank 3 : ANSELA + {$SET_STATE_RAM '007-009:SFR:ALL'} // Bank 0 : PORTC, IOCAF, IOCCF + // Bank 1 : TRISC, IOCAP, IOCCP + // Bank 2 : LATC, IOCAN, IOCCN + // Bank 3 : ANSELC, APFCON, OSCTUNE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : WPUA, WPUC + // Bank 3 : PMCON1, PMCON2 + {$SET_STATE_RAM '00F-013:SFR:ALL'} // Bank 0 : TMR1L, TMR1H, T1CON, T1GCON, CCPR1L + // Bank 1 : OSCCON, FVR1CON0, DAC1CON0, DAC1REFL, DAC1REFH + // Bank 2 : PCON, TMR2, PR2, T2CON, HLTMR1 + // Bank 3 : PMADRH, PMDATL, PMDATH, COG1PHR, COG1PHF + {$SET_STATE_RAM '014-015:SFR'} // Bank 0 : CCPR1H, CCP1CON + {$SET_STATE_RAM '01C-01D:SFR'} // Bank 0 : ADRESL, ADRESH + {$SET_STATE_RAM '01E-01F:SFR:ALL'} // Bank 0 : ADCON0, ADCON1 + // Bank 1 : CM1CON1, CMOUT + // Bank 2 : SLPC1CON0, SLPC1CON1 + // Bank 3 : COG1ASD0, COG1ASD1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '096-096:SFR'} // Bank 1 : OPA1CON + {$SET_STATE_RAM '09B-09D:SFR'} // Bank 1 : CM2CON0, CM2CON1, CM1CON0 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : SLRCONC + {$SET_STATE_RAM '114-11A:SFR'} // Bank 2 : HLTPR1, HLT1CON0, HLT1CON1, HLTMR2, HLTPR2, HLT2CON0, HLT2CON1 + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : PMADRL + {$SET_STATE_RAM '194-19D:SFR'} // Bank 3 : COG1BKR, COG1BKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '100-104:bnk0'} // maps to INDF, TMR0, PCL, STATUS, FSR (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '007:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:CF'} // PIR1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:35'} // PIR2 bits 7,6,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // ADCON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:71'} // ADCON1 bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '087:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '088:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:CF'} // PIE1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:35'} // PIE2 bits 7,6,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:36'} // OSCCON bits 7,6,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:F9'} // FVR1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:EC'} // DAC1CON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:9F'} // OPA1CON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:30'} // SLRCONC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:7F'} // HLT1CON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // HLT1CON1 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:7F'} // HLT2CON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // HLT2CON1 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:BD'} // SLPC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:1F'} // SLPC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '188:10'} // APFCON bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:07'} // PMCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:07'} // PMADRH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '191:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '192:0F'} // COG1PHR bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '193:0F'} // COG1PHF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:0F'} // COG1BKR bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:0F'} // COG1BKF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '196:0F'} // COG1DBR bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:0F'} // COG1DBF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '198:FD'} // COG1CON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '199:C3'} // COG1CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19A:7F'} // COG1RIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '19B:7F'} // COG1RSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '19C:7F'} // COG1FIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '19D:7F'} // COG1FSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:1F'} // COG1ASD1 bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/T1CKI/CLKIN + // Pin 3 : RA4/T1G/AN3/CLKOUT + // Pin 4 : RA3/T1G/Vpp/MCLR + // Pin 5 : RC5/COG1OUT0/CCP1 + // Pin 6 : RC4/COG1OUT1/C2OUT + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC2/SLPCIN/AN6/OPA1OUT/C1IN2-/C2IN2- + // Pin 9 : RC1/OPA1IN-/AN5/C1IN1-/C2IN1- + // Pin 10 : RC0/OPA1IN+/AN4/C2IN0+ + // Pin 11 : RA2/INT/C1OUT/T0CKI/AN2/COG1FLT + // Pin 12 : RA1/C1IN0-/C2IN0-/AN1/VREF+/FVRIN/ICSPCLK + // Pin 13 : RA0/C1IN0+/AN0/DACOUT/FVROUT/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '007:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC0 : FOSC: Oscillator Selection bit + {$define _FOSC0_EC = $3FFF} // EC oscillator mode. CLKIN function on RA5/CLKIN + {$define _FOSC0_INT = $3FFE} // Internal oscillator mode. I/O function on RA5/CLKIN + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // Watchdog Timer enabled + {$define _WDTE_OFF = $3FF7} // Watchdog Timer disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // Power-up Timer disabled + {$define _PWRTE_ON = $3FEF} // Power-up Timer enabled + + // MCLRE : MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is MCLR function with internal weak pullup + {$define _MCLRE_OFF = $3FDF} // MCLR pin is alternate function + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_EN = $3FFF} // BOR enabled + {$define _BOREN_SLEEP_DIS = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_DIS = $3CFF} // BOR disabled + + // WRT : Flash Program Memory Self Write Enable bit + {$define _WRT_OFF = $3FFF} // Flash self-write protection off + {$define _WRT_FOURTH = $3BFF} // 000h to 0FFh self-write protected + {$define _WRT_HALF = $37FF} // 000h to 1FFh self-write protected + {$define _WRT_ALL = $33FF} // 000h to 3FFh self-write protected + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function disabled. CLKOUT pin acts as I/O + {$define _CLKOUTEN_ON = $2FFF} // CLKOUT function enabled. CLKOUT pin is CLKOUT + + // DEBUG : Debug Mode Enable bit + {$define _DEBUG_OFF = $3FFF} // Debug mode disabled + {$define _DEBUG_ON = $1FFF} // Debug mode enabled + +implementation +end. diff --git a/PIC16F76.pas b/devices16/PIC16F76.pas similarity index 56% rename from PIC16F76.pas rename to devices16/PIC16F76.pas index dfa28106..ab75f862 100644 --- a/PIC16F76.pas +++ b/devices16/PIC16F76.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -58,7 +63,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -66,14 +71,15 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -83,7 +89,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -108,31 +115,31 @@ interface RCSTA_RX9 : bit absolute RCSTA.6; RCSTA_SREN : bit absolute RCSTA.5; RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_FERR : bit absolute RCSTA.3; - RCSTA_OERR : bit absolute RCSTA.2; - RCSTA_RX9D : bit absolute RCSTA.1; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -165,7 +172,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -173,11 +180,11 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -194,80 +201,97 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-01F:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08D-08E:SFR'} // Bank 1 : PIE2, PCON + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:F7'} // RCSTA - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:07'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:81'} // PMCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F7'} // RCSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -311,27 +335,27 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $005F} // BOR enabled - {$define _BOREN_OFF = $005E} // BOR disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // CP : FLASH Program Memory Code Protection bit - {$define _CP_OFF = $005F} // Code protection off - {$define _CP_ON = $005D} // All Memory locations code protected + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $005F} // PWRT disabled - {$define _PWRTE_ON = $005B} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $005F} // WDT enabled - {$define _WDTE_OFF = $0057} // WDT disabled + // CP : FLASH Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $3FEF} // All Memory locations code protected - // FOSC : Oscillator Selection bits - {$define _FOSC_RC = $007F} // RC oscillator - {$define _FOSC_HS = $006F} // HS oscillator - {$define _FOSC_XT = $005F} // XT oscillator - {$define _FOSC_LP = $004F} // LP oscillator + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled implementation end. diff --git a/PIC16F767.pas b/devices16/PIC16F767.pas similarity index 59% rename from PIC16F767.pas rename to devices16/PIC16F767.pas index 6e6ff1c7..79bb2e99 100644 --- a/PIC16F767.pas +++ b/devices16/PIC16F767.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,20 +76,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; - PIR2_LVDIF : bit absolute PIR2.4; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_LVDIF : bit absolute PIR2.5; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP3IF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -94,7 +100,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -124,18 +131,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; @@ -145,7 +152,7 @@ interface ADCON0_CHS3 : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -180,7 +187,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -189,23 +196,25 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; - PIE2_LVDIE : bit absolute PIE2.4; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_LVDIE : bit absolute PIE2.5; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP3IE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.2; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.5; - OSCCON_IRCF1 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF2 : bit absolute OSCCON.6; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; - OSCCON_SCS0 : bit absolute OSCCON.1; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -247,15 +256,15 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON2 : byte absolute $009b; + ADCON2 : byte absolute $009B; ADCON2_ACQT2 : bit absolute ADCON2.5; ADCON2_ACQT1 : bit absolute ADCON2.4; ADCON2_ACQT0 : bit absolute ADCON2.3; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -264,7 +273,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -272,8 +281,8 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_VCFG1 : bit absolute ADCON1.5; @@ -295,72 +304,93 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-099:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG - {$SET_STATE_RAM '09B-09F:SFR'} // ADCON2, CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '109-10F:SFR'} // LVDCON, PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:EB'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:EB'} // PIE2 - {$SET_UNIMP_BITS '08E:07'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '097:3F'} // CCP3CON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09B:38'} // ADCON2 - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:3F'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08D-099:SFR'} // Bank 1 : PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADCON2, CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '109-109:SFR'} // Bank 2 : LVDCON + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:EB'} // PIR2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:EB'} // PIE2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:07'} // PCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:38'} // ADCON2 bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:3F'} // LVDCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:01'} // PMCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -405,61 +435,61 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bits - {$define _CP_OFF = $39FF} // Code protection off - {$define _CP_ON = $39FE} // 0000h to 1FFFh code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCP2MX : CCP2 Multiplex bit - {$define _CCP2MX_RC1 = $39FF} // CCP2 is on RC1 - {$define _CCP2MX_RB3 = $39FD} // CCP2 is on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $39FF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $39FB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // BORV : Brown-out Reset Voltage bits - {$define _BORV_20 = $39FF} // VBOR set to 2.0V - {$define _BORV_27 = $39F7} // VBOR set to 2.7V - {$define _BORV_42 = $39EF} // VBOR set to 4.2V - {$define _BORV_45 = $39E7} // VBOR set to 4.5V + // MCLRE : MCLR/VPP/RE3 Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP/RE3 pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $39FF} // Enabled - {$define _BOREN_OFF = $39DF} // Disabled + {$define _BOREN_ON = $3FFF} // Enabled + {$define _BOREN_OFF = $3FBF} // Disabled - // MCLRE : MCLR/VPP/RE3 Pin Function Select bit - {$define _MCLRE_ON = $39FF} // MCLR/VPP/RE3 pin function is MCLR - {$define _MCLRE_OFF = $39BF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' + // BORV : Brown-out Reset Voltage bits + {$define _BORV_20 = $3FFF} // VBOR set to 2.0V + {$define _BORV_27 = $3F7F} // VBOR set to 2.7V + {$define _BORV_42 = $3EFF} // VBOR set to 4.2V + {$define _BORV_45 = $3E7F} // VBOR set to 4.5V - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $39FF} // PWRT disabled - {$define _PWRTE_ON = $397F} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $39FF} // WDT enabled - {$define _WDTE_OFF = $38FF} // WDT disabled + // CCP2MX : CCP2 Multiplex bit + {$define _CCP2MX_RC1 = $3FFF} // CCP2 is on RC1 + {$define _CCP2MX_RB3 = $2FFF} // CCP2 is on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $27FF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 - {$define _FOSC_EXTRCIO = $25FF} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_INTOSCCLK = $23FF} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 - {$define _FOSC_INTOSCIO = $21FF} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 - {$define _FOSC_EC = $07FF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_HS = $05FF} // HS oscillator - {$define _FOSC_XT = $03FF} // XT oscillator - {$define _FOSC_LP = $01FF} // LP oscillator + // CP : Flash Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 1FFFh code-protected - // BORSEN : Brown-out Reset Software Enable bit - {$define _BORSEN_ON = $0043} // Enabled - {$define _BORSEN_OFF = $0042} // Disabled + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled // IESO : Internal External Switchover bit - {$define _IESO_ON = $0043} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0041} // Internal External Switchover mode disabled + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0047} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0043} // Fail-Safe Clock Monitor disabled + // BORSEN : Brown-out Reset Software Enable bit + {$define _BORSEN_ON = $3FFF} // Enabled + {$define _BORSEN_OFF = $3FBF} // Disabled implementation end. diff --git a/PIC16F77.pas b/devices16/PIC16F77.pas similarity index 60% rename from PIC16F77.pas rename to devices16/PIC16F77.pas index 5792ef52..918acadd 100644 --- a/PIC16F77.pas +++ b/devices16/PIC16F77.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -71,7 +76,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -80,14 +85,15 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -97,7 +103,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -122,31 +129,31 @@ interface RCSTA_RX9 : bit absolute RCSTA.6; RCSTA_SREN : bit absolute RCSTA.5; RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_FERR : bit absolute RCSTA.3; - RCSTA_OERR : bit absolute RCSTA.2; - RCSTA_RX9D : bit absolute RCSTA.1; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRES : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRES : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -193,10 +200,10 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -205,11 +212,11 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -226,78 +233,97 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON1 : byte absolute $009f; + ADCON1 : byte absolute $009F; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09F-09F:SFR'} // ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRES, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08D-08E:SFR'} // Bank 1 : PIE2, PCON + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:01'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:F7'} // RCSTA - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08D:01'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:07'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:81'} // PMCON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:01'} // PIR2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F7'} // RCSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:01'} // PIE2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:07'} // ADCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:81'} // PMCON1 bits 6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -355,27 +381,27 @@ interface // -- Bits Configuration -- - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $005F} // BOR enabled - {$define _BOREN_OFF = $005E} // BOR disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_RC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // CP : FLASH Program Memory Code Protection bit - {$define _CP_OFF = $005F} // Code protection off - {$define _CP_ON = $005D} // All Memory locations code protected + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $005F} // PWRT disabled - {$define _PWRTE_ON = $005B} // PWRT enabled + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $005F} // WDT enabled - {$define _WDTE_OFF = $0057} // WDT disabled + // CP : FLASH Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $3FEF} // All Memory locations code protected - // FOSC : Oscillator Selection bits - {$define _FOSC_RC = $007F} // RC oscillator - {$define _FOSC_HS = $006F} // HS oscillator - {$define _FOSC_XT = $005F} // XT oscillator - {$define _FOSC_LP = $004F} // LP oscillator + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled implementation end. diff --git a/PIC16F777.pas b/devices16/PIC16F777.pas similarity index 62% rename from PIC16F777.pas rename to devices16/PIC16F777.pas index e5beb33f..50a659ec 100644 --- a/PIC16F777.pas +++ b/devices16/PIC16F777.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,20 +88,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; - PIR2_LVDIF : bit absolute PIR2.4; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_LVDIF : bit absolute PIR2.5; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP3IF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -106,7 +112,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -136,18 +143,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; @@ -157,7 +164,7 @@ interface ADCON0_CHS3 : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -210,7 +217,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -219,23 +226,25 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; - PIE2_LVDIE : bit absolute PIE2.4; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_LVDIE : bit absolute PIE2.5; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP3IE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.2; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; - OSCCON_IRCF2 : bit absolute OSCCON.5; - OSCCON_IRCF1 : bit absolute OSCCON.4; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; + OSCCON_IRCF2 : bit absolute OSCCON.6; + OSCCON_IRCF1 : bit absolute OSCCON.5; + OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; - OSCCON_SCS0 : bit absolute OSCCON.1; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -277,15 +286,15 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADCON2 : byte absolute $009b; + ADCON2 : byte absolute $009B; ADCON2_ACQT2 : bit absolute ADCON2.5; ADCON2_ACQT1 : bit absolute ADCON2.4; ADCON2_ACQT0 : bit absolute ADCON2.3; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -294,7 +303,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -302,8 +311,8 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_VCFG1 : bit absolute ADCON1.5; @@ -325,68 +334,90 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - PMDATA : byte absolute $010c; - PMADR : byte absolute $010d; - PMDATH : byte absolute $010e; - PMADRH : byte absolute $010f; - PMCON1 : byte absolute $018c; + PMDATA : byte absolute $010C; + PMADR : byte absolute $010D; + PMDATH : byte absolute $010E; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMADRH : byte absolute $010F; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMCON1 : byte absolute $018C; PMCON1_RD : bit absolute PMCON1.0; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-099:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG - {$SET_STATE_RAM '09B-09F:SFR'} // ADCON2, CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '109-10F:SFR'} // LVDCON, PCLATH, INTCON, PMDATA, PMADR, PMDATH, PMADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18C:SFR'} // PCLATH, INTCON, PMCON1 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:EB'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '08D:EB'} // PIE2 - {$SET_UNIMP_BITS '08E:07'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '097:3F'} // CCP3CON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09B:38'} // ADCON2 - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:3F'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // PMDATH - {$SET_UNIMP_BITS '10F:1F'} // PMADRH - {$SET_UNIMP_BITS '18C:01'} // PMCON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR:ALL'} // Bank 0 : PIR1 + // Bank 1 : PIE1 + // Bank 2 : PMDATA + // Bank 3 : PMCON1 + {$SET_STATE_RAM '00D-01F:SFR'} // Bank 0 : PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08D-099:SFR'} // Bank 1 : PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, CCPR3L, CCPR3H, CCP3CON, TXSTA, SPBRG + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADCON2, CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '109-109:SFR'} // Bank 2 : LVDCON + {$SET_STATE_RAM '10D-10F:SFR'} // Bank 2 : PMADR, PMDATH, PMADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:EB'} // PIR2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:EB'} // PIE2 bits 4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:07'} // PCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:38'} // ADCON2 bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:3F'} // LVDCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // PMADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:01'} // PMCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) // -- PIN mapping -- @@ -444,61 +475,61 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bits - {$define _CP_OFF = $39FF} // Code protection off - {$define _CP_ON = $39FE} // 0000h to 1FFFh code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCP2MX : CCP2 Multiplex bit - {$define _CCP2MX_RC1 = $39FF} // CCP2 is on RC1 - {$define _CCP2MX_RB3 = $39FD} // CCP2 is on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $39FF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $39FB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // BORV : Brown-out Reset Voltage bits - {$define _BORV_20 = $39FF} // VBOR set to 2.0V - {$define _BORV_27 = $39F7} // VBOR set to 2.7V - {$define _BORV_42 = $39EF} // VBOR set to 4.2V - {$define _BORV_45 = $39E7} // VBOR set to 4.5V + // MCLRE : MCLR/VPP/RE3 Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP/RE3 pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $39FF} // Enabled - {$define _BOREN_OFF = $39DF} // Disabled + {$define _BOREN_ON = $3FFF} // Enabled + {$define _BOREN_OFF = $3FBF} // Disabled - // MCLRE : MCLR/VPP/RE3 Pin Function Select bit - {$define _MCLRE_ON = $39FF} // MCLR/VPP/RE3 pin function is MCLR - {$define _MCLRE_OFF = $39BF} // MCLR/VPP/RE3 pin function is digital input only, MCLR gated to '1' + // BORV : Brown-out Reset Voltage bits + {$define _BORV_20 = $3FFF} // VBOR set to 2.0V + {$define _BORV_27 = $3F7F} // VBOR set to 2.7V + {$define _BORV_42 = $3EFF} // VBOR set to 4.2V + {$define _BORV_45 = $3E7F} // VBOR set to 4.5V - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $39FF} // PWRT disabled - {$define _PWRTE_ON = $397F} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $39FF} // WDT enabled - {$define _WDTE_OFF = $38FF} // WDT disabled + // CCP2MX : CCP2 Multiplex bit + {$define _CCP2MX_RC1 = $3FFF} // CCP2 is on RC1 + {$define _CCP2MX_RB3 = $2FFF} // CCP2 is on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $27FF} // EXTRC oscillator; CLKO function on OSC2/CLKO/RA6 - {$define _FOSC_EXTRCIO = $25FF} // EXTRC oscillator; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_INTOSCCLK = $23FF} // INTRC oscillator; CLKO function on OSC2/CLKO/RA6 and port I/O function on OSC1/CLKI/RA7 - {$define _FOSC_INTOSCIO = $21FF} // INTRC oscillator; port I/O function on OSC1/CLKI/RA7 and OSC2/CLKO/RA6 - {$define _FOSC_EC = $07FF} // EXTCLK; port I/O function on OSC2/CLKO/RA6 - {$define _FOSC_HS = $05FF} // HS oscillator - {$define _FOSC_XT = $03FF} // XT oscillator - {$define _FOSC_LP = $01FF} // LP oscillator + // CP : Flash Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 1FFFh code-protected - // BORSEN : Brown-out Reset Software Enable bit - {$define _BORSEN_ON = $0043} // Enabled - {$define _BORSEN_OFF = $0042} // Disabled + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled // IESO : Internal External Switchover bit - {$define _IESO_ON = $0043} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0041} // Internal External Switchover mode disabled + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled - // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0047} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0043} // Fail-Safe Clock Monitor disabled + // BORSEN : Brown-out Reset Software Enable bit + {$define _BORSEN_ON = $3FFF} // Enabled + {$define _BORSEN_OFF = $3FBF} // Disabled implementation end. diff --git a/PIC16F785.pas b/devices16/PIC16F785.pas similarity index 64% rename from PIC16F785.pas rename to devices16/PIC16F785.pas index f26dd8b1..00f555eb 100644 --- a/PIC16F785.pas +++ b/devices16/PIC16F785.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -44,8 +44,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -54,7 +59,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RAIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_CCP1IF : bit absolute PIR1.5; @@ -63,15 +68,15 @@ interface PIR1_OSFIF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -81,12 +86,13 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0013; CCPR1H : byte absolute $0014; CCP1CON : byte absolute $0015; - CCP1CON_DC1B1 : bit absolute CCP1CON.5; - CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_DCB1 : bit absolute CCP1CON.5; + CCP1CON_DCB0 : bit absolute CCP1CON.4; CCP1CON_CCP1M3 : bit absolute CCP1CON.3; CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; @@ -97,8 +103,8 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -108,7 +114,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RAPU : bit absolute OPTION_REG.7; + OPTION_REG_nRAPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -137,7 +143,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_CCP1IE : bit absolute PIE1.5; @@ -146,11 +152,11 @@ interface PIE1_OSFIE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -203,20 +209,20 @@ interface VRCON_C1VREN : bit absolute VRCON.7; VRCON_C2VREN : bit absolute VRCON.6; VRCON_VRR : bit absolute VRCON.5; - VRCON_VR3 : bit absolute VRCON.4; - VRCON_VR2 : bit absolute VRCON.3; - VRCON_VR1 : bit absolute VRCON.2; - VRCON_VR0 : bit absolute VRCON.1; - EEDATA : byte absolute $009a; - EEADR : byte absolute $009b; - EECON1 : byte absolute $009c; + VRCON_VR3 : bit absolute VRCON.3; + VRCON_VR2 : bit absolute VRCON.2; + VRCON_VR1 : bit absolute VRCON.1; + VRCON_VR0 : bit absolute VRCON.0; + EEDATA : byte absolute $009A; + EEADR : byte absolute $009B; + EECON1 : byte absolute $009C; EECON1_WRERR : bit absolute EECON1.3; EECON1_WREN : bit absolute EECON1.2; EECON1_WR : bit absolute EECON1.1; EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009d; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + EECON2 : byte absolute $009D; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -266,7 +272,7 @@ interface CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; - CM2CON0 : byte absolute $011a; + CM2CON0 : byte absolute $011A; CM2CON0_C2ON : bit absolute CM2CON0.7; CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; @@ -275,79 +281,77 @@ interface CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; - CM2CON1 : byte absolute $011b; + CM2CON1 : byte absolute $011B; CM2CON1_MC1OUT : bit absolute CM2CON1.7; CM2CON1_MC2OUT : bit absolute CM2CON1.6; - CM2CON1_T1GSS : bit absolute CM2CON1.5; - CM2CON1_C2SYNC : bit absolute CM2CON1.4; - OPA1CON : byte absolute $011c; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + OPA1CON : byte absolute $011C; OPA1CON_OPAON : bit absolute OPA1CON.7; - OPA2CON : byte absolute $011d; + OPA2CON : byte absolute $011D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-00C:SFR'} // PCLATH, INTCON, PIR1 - {$SET_STATE_RAM '00E-015:SFR'} // TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '018-018:SFR'} // WDTCON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08C:SFR'} // PCLATH, INTCON, PIE1 - {$SET_STATE_RAM '08E-093:SFR'} // PCON, OSCCON, OSCTUNE, ANSEL0, PR2, ANSEL1 - {$SET_STATE_RAM '095-096:SFR'} // WPUA, IOCA - {$SET_STATE_RAM '098-09F:SFR'} // REFCON, VRCON, EEDATA, EEADR, EECON1, EECON2, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-107:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '10A-10B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '110-114:SFR'} // PWMCON1, PWMCON0, PWMCLK, PWMPH1, PWMPH2 - {$SET_STATE_RAM '119-11D:SFR'} // CM1CON0, CM2CON0, CM2CON1, OPA1CON, OPA2CON - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-187:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '18A-18B:SFR'} // PCLATH, INTCON - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : PORTA, PORTB, PORTC + // Bank 3 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PIR1 + {$SET_STATE_RAM '00E-015:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : WDTCON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : PIE1 + {$SET_STATE_RAM '08E-093:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL0, PR2, ANSEL1 + {$SET_STATE_RAM '095-096:SFR'} // Bank 1 : WPUA, IOCA + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : REFCON, VRCON, EEDATA, EEADR, EECON1, EECON2, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '110-114:SFR'} // Bank 2 : PWMCON1, PWMCON0, PWMCLK, PWMPH1, PWMPH2 + {$SET_STATE_RAM '119-11D:SFR'} // Bank 2 : CM1CON0, CM2CON0, CM2CON1, OPA1CON, OPA2CON - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-107:bnk0'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '185-187:bnk1'} // TRISA, TRISB, TRISC - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '105-107:bnk0'} // maps to PORTA, PORTB, PORTC (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '185-187:bnk1'} // maps to TRISA, TRISB, TRISC (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '006:F0'} // PORTB - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '015:3F'} // CCP1CON - {$SET_UNIMP_BITS '018:1F'} // WDTCON - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '086:F0'} // TRISB - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:0F'} // ANSEL1 - {$SET_UNIMP_BITS '095:3F'} // WPUA - {$SET_UNIMP_BITS '096:3F'} // IOCA - {$SET_UNIMP_BITS '098:3E'} // REFCON - {$SET_UNIMP_BITS '099:EF'} // VRCON - {$SET_UNIMP_BITS '09C:0F'} // EECON1 - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 - {$SET_UNIMP_BITS '11C:80'} // OPA1CON - {$SET_UNIMP_BITS '11D:80'} // OPA2CON + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '006:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '086:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:0F'} // ANSEL1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:3F'} // IOCA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3E'} // REFCON bits 7,6,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:EF'} // VRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09C:0F'} // EECON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:C3'} // CM2CON1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:80'} // OPA1CON bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:80'} // OPA2CON bits 6,5,4,3,2,1,0 un-implemented (read as 0) // -- PIN mapping -- @@ -383,49 +387,49 @@ interface // -- Bits Configuration -- - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $0FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $0FFE} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0FFF} // Internal External Switchover mode is enabled - {$define _IESO_OFF = $0FFD} // Internal External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled - // BOREN : Brown Out Detect - {$define _BOREN_ON = $0FFF} // BOR enabled - {$define _BOREN_NSLEEP = $0FFB} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $0FF7} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $0FF3} // BOR disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $0FFF} // Data memory code protection is disabled - {$define _CPD_ON = $0FEF} // Data memory code protection is enabled + // MCLRE : MCLR Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $0FFF} // Program memory code protection is disabled - {$define _CP_ON = $0FDF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : MCLR Pin Function Select bit - {$define _MCLRE_ON = $0FFF} // MCLR pin function is MCLR - {$define _MCLRE_OFF = $0FBF} // MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $0FFF} // PWRT disabled - {$define _PWRTE_ON = $0F7F} // PWRT enabled + // BOREN : Brown Out Detect + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $0FFF} // WDT enabled - {$define _WDTE_OFF = $0EFF} // WDT disabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $0FFF} // EXTRC oscillator: External RC on RA5/OSC1/CLKIN, CLKOUT function on RA4/OSC2/CLKOUT pin - {$define _FOSC_EXTRCIO = $0DFF} // EXTRCIO oscillator: External RC on RA5/OSC1/CLKIN, I/O function on RA4/OSC2/CLKOUT pin - {$define _FOSC_INTOSCCLK = $0BFF} // INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_INTOSCIO = $09FF} // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN - {$define _FOSC_EC = $07FF} // EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN - {$define _FOSC_HS = $05FF} // HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN - {$define _FOSC_XT = $03FF} // XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKINT - {$define _FOSC_LP = $01FF} // LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled implementation end. diff --git a/PIC16F818.pas b/devices16/PIC16F818.pas similarity index 55% rename from PIC16F818.pas rename to devices16/PIC16F818.pas index 7e474951..00461070 100644 --- a/PIC16F818.pas +++ b/devices16/PIC16F818.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; - PIR1_SSPIF : bit absolute PIR1.5; - PIR1_CCP1IF : bit absolute PIR1.4; - PIR1_TMR2IF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -95,17 +101,17 @@ interface CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -131,18 +137,18 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; - PIE1_SSPIE : bit absolute PIE1.5; - PIE1_CCP1IE : bit absolute PIE1.4; - PIE1_TMR2IE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -165,83 +171,96 @@ interface SSPSTAT_R_nW : bit absolute SSPSTAT.2; SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_FREE : bit absolute EECON1.6; - EECON1_WRERR : bit absolute EECON1.5; - EECON1_WREN : bit absolute EECON1.4; - EECON1_WR : bit absolute EECON1.3; - EECON1_RD : bit absolute EECON1.2; - EECON2 : byte absolute $018d; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-017:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:4F'} // PIR1 - {$SET_UNIMP_BITS '00D:10'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '08C:4F'} // PIE1 - {$SET_UNIMP_BITS '08D:10'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '08F:74'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '09F:CF'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:07'} // EEADRH - {$SET_UNIMP_BITS '18C:9F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-017:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-13F:bnk0'} // maps to area 020-03F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1BF:bnk0'} // maps to area 020-03F (bank 0) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:4F'} // PIR1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:10'} // PIR2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:4F'} // PIE1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:10'} // PIE2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:74'} // OSCCON bits 7,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:07'} // EEADRH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:9F'} // EECON1 bits 6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -274,56 +293,56 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection off - {$define _CP_ON = $3FFE} // All memory locations code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on RA6/OSC2/CLKO pin + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCPMX : CCP1 Pin Selection bit - {$define _CCPMX_RB2 = $3FFF} // CCP1 function on RB2 - {$define _CCPMX_RB3 = $3FFD} // CCP1 function on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3FFB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WRT : Flash Program Memory Write Enable bits - {$define _WRT_OFF = $3FFF} // Write protection off - {$define _WRT_512 = $3FF7} // 0000h to 01FFh write-protected, 0200h to 03FFh may be modified by EECON control - {$define _WRT_1024 = $3FEF} // 0000h to 03FFh write-protected + // MCLRE : RA5/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $3FFF} // Code protection off - {$define _CPD_ON = $3FDF} // Data EE memory locations code-protected + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled // LVP : Low-Voltage Programming Enable bit {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, Low-Voltage Programming enabled - {$define _LVP_OFF = $3FBF} // RB3/PGM pin has digital I/O function, HV on MCLR must be used for programming + {$define _LVP_OFF = $3F7F} // RB3/PGM pin has digital I/O function, HV on MCLR must be used for programming - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_OFF = $3F7F} // BOR disabled + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Code protection off + {$define _CPD_ON = $3EFF} // Data EE memory locations code-protected - // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_512 = $3DFF} // 0000h to 01FFh write-protected, 0200h to 03FFh may be modified by EECON control + {$define _WRT_1024 = $3BFF} // 0000h to 03FFh write-protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // CCPMX : CCP1 Pin Selection bit + {$define _CCPMX_RB2 = $3FFF} // CCP1 function on RB2 + {$define _CCPMX_RB3 = $2FFF} // CCP1 function on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $9FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO pin - {$define _FOSC_EXTRCIO = $97FF} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO pin - {$define _FOSC_INTOSCCLK = $8FFF} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin - {$define _FOSC_INTOSCIO = $87FF} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin - {$define _FOSC_EC = $1FFF} // EXTCLK; port I/O function on RA6/OSC2/CLKO pin - {$define _FOSC_HS = $17FF} // HS oscillator - {$define _FOSC_XT = $0FFF} // XT oscillator - {$define _FOSC_LP = $07FF} // LP oscillator + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All memory locations code-protected implementation end. diff --git a/PIC16F819.pas b/devices16/PIC16F819.pas similarity index 55% rename from PIC16F819.pas rename to devices16/PIC16F819.pas index a36256ec..ba58e68a 100644 --- a/PIC16F819.pas +++ b/devices16/PIC16F819.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -51,21 +56,21 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; - PIR1_SSPIF : bit absolute PIR1.5; - PIR1_CCP1IF : bit absolute PIR1.4; - PIR1_TMR2IF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -75,7 +80,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -95,17 +101,17 @@ interface CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -131,18 +137,18 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; - PIE1_SSPIE : bit absolute PIE1.5; - PIE1_CCP1IE : bit absolute PIE1.4; - PIE1_TMR2IE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -165,83 +171,95 @@ interface SSPSTAT_R_nW : bit absolute SSPSTAT.2; SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_FREE : bit absolute EECON1.6; - EECON1_WRERR : bit absolute EECON1.5; - EECON1_WREN : bit absolute EECON1.4; - EECON1_WR : bit absolute EECON1.3; - EECON1_RD : bit absolute EECON1.2; - EECON2 : byte absolute $018d; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-017:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:4F'} // PIR1 - {$SET_UNIMP_BITS '00D:10'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '08C:4F'} // PIE1 - {$SET_UNIMP_BITS '08D:10'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '08F:74'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '09F:CF'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:07'} // EEADRH - {$SET_UNIMP_BITS '18C:9F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-017:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1EF:bnk0'} // maps to area 020-06F (bank 0) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:4F'} // PIR1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:10'} // PIR2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:4F'} // PIE1 bits 7,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:10'} // PIE2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:74'} // OSCCON bits 7,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:07'} // EEADRH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:9F'} // EECON1 bits 6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -274,57 +292,57 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection off - {$define _CP_ON = $3FFE} // All memory locations code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO pin + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO pin + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin + {$define _FOSC_EC = $3FEF} // EXTCLK; port I/O function on RA6/OSC2/CLKO pin + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCPMX : CCP1 Pin Selection bit - {$define _CCPMX_RB2 = $3FFF} // CCP1 function on RB2 - {$define _CCPMX_RB3 = $3FFD} // CCP1 function on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3FFB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WRT : Flash Program Memory Write Enable bits - {$define _WRT_OFF = $3FFF} // Write protection off - {$define _WRT_512 = $3FF7} // 0000h to 01FFh write-protected, 0200h to 07FFh may be modified by EECON control - {$define _WRT_1024 = $3FEF} // 0000h to 03FFh write-protected, 0400h to 07FFh may be modified by EECON control - {$define _WRT_1536 = $3FE7} // 0000h to 05FFh write-protected, 0600h to 07FFh may be modified by EECON control + // MCLRE : RA5/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $3FFF} // Code protection off - {$define _CPD_ON = $3FDF} // Data EE memory locations code-protected + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled // LVP : Low-Voltage Programming Enable bit {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, Low-Voltage Programming enabled - {$define _LVP_OFF = $3FBF} // RB3/PGM pin has digital I/O function, HV on MCLR must be used for programming + {$define _LVP_OFF = $3F7F} // RB3/PGM pin has digital I/O function, HV on MCLR must be used for programming - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_OFF = $3F7F} // BOR disabled + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Code protection off + {$define _CPD_ON = $3EFF} // Data EE memory locations code-protected - // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_512 = $3DFF} // 0000h to 01FFh write-protected, 0200h to 07FFh may be modified by EECON control + {$define _WRT_1024 = $3BFF} // 0000h to 03FFh write-protected, 0400h to 07FFh may be modified by EECON control + {$define _WRT_1536 = $39FF} // 0000h to 05FFh write-protected, 0600h to 07FFh may be modified by EECON control - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // CCPMX : CCP1 Pin Selection bit + {$define _CCPMX_RB2 = $3FFF} // CCP1 function on RB2 + {$define _CCPMX_RB3 = $2FFF} // CCP1 function on RB3 - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $9FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO pin - {$define _FOSC_EXTRCIO = $97FF} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO pin - {$define _FOSC_INTOSCCLK = $8FFF} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin - {$define _FOSC_INTOSCIO = $87FF} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin - {$define _FOSC_EC = $1FFF} // EXTCLK; port I/O function on RA6/OSC2/CLKO pin - {$define _FOSC_HS = $17FF} // HS oscillator - {$define _FOSC_XT = $0FFF} // XT oscillator - {$define _FOSC_LP = $07FF} // LP oscillator + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All memory locations code-protected implementation end. diff --git a/PIC16F83.pas b/devices16/PIC16F83.pas similarity index 69% rename from PIC16F83.pas rename to devices16/PIC16F83.pas index 216d6383..a85a5320 100644 --- a/PIC16F83.pas +++ b/devices16/PIC16F83.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -40,8 +40,13 @@ interface PORTB_RB0 : bit absolute PORTB.0; EEDATA : byte absolute $0008; EEADR : byte absolute $0009; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_EEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,7 +56,7 @@ interface INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -85,28 +90,31 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '008-00B:SFR'} // EEDATA, EEADR, PCLATH, INTCON - {$SET_STATE_RAM '00C-02F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '088-08B:SFR'} // EECON1, EECON2, PCLATH, INTCON - {$SET_STATE_RAM '08C-0AF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : PORTA, PORTB + // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '008-009:SFR:ALL'} // Bank 0 : EEDATA, EEADR + // Bank 1 : EECON1, EECON2 + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-02F:GPR:ALLMAPPED'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:1F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '085:1F'} // TRISA - {$SET_UNIMP_BITS '088:1F'} // EECON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:1F'} // TRISA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '088:1F'} // EECON1 bits 7,6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -139,23 +147,23 @@ interface // -- Bits Configuration -- - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection disabled - {$define _CP_ON = $3C00} // All program memory is code protected - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // Power-up Timer is disabled - {$define _PWRTE_ON = $3BFF} // Power-up Timer is enabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator // WDTE : Watchdog Timer {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $37FF} // WDT disabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $3FFF} // RC oscillator - {$define _FOSC_HS = $2FFF} // HS oscillator - {$define _FOSC_XT = $1FFF} // XT oscillator - {$define _FOSC_LP = $0FFF} // LP oscillator + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // Power-up Timer is disabled + {$define _PWRTE_ON = $3FF7} // Power-up Timer is enabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection disabled + {$define _CP_ON = $000F} // All program memory is code protected implementation end. diff --git a/PIC16F84.pas b/devices16/PIC16F84.pas similarity index 69% rename from PIC16F84.pas rename to devices16/PIC16F84.pas index 05bcad11..a0d94927 100644 --- a/PIC16F84.pas +++ b/devices16/PIC16F84.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F84'} -{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_MAXFREQ = 10000000} {$SET PIC_NPINS = 18} {$SET PIC_NUMBANKS = 2} {$SET PIC_NUMPAGES = 1} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -40,8 +40,13 @@ interface PORTB_RB0 : bit absolute PORTB.0; EEDATA : byte absolute $0008; EEADR : byte absolute $0009; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_EEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -51,7 +56,7 @@ interface INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -85,28 +90,31 @@ interface // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '008-00B:SFR'} // EEDATA, EEADR, PCLATH, INTCON - {$SET_STATE_RAM '00C-04F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '088-08B:SFR'} // EECON1, EECON2, PCLATH, INTCON - {$SET_STATE_RAM '08C-0CF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : PORTA, PORTB + // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '008-009:SFR:ALL'} // Bank 0 : EEDATA, EEADR + // Bank 1 : EECON1, EECON2 + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-04F:GPR:ALLMAPPED'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:1F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '085:1F'} // TRISA - {$SET_UNIMP_BITS '088:1F'} // EECON1 + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:1F'} // TRISA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '088:1F'} // EECON1 bits 7,6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -139,23 +147,23 @@ interface // -- Bits Configuration -- - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection disabled - {$define _CP_ON = $3C00} // All program memory is code protected - - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // Power-up Timer is disabled - {$define _PWRTE_ON = $3BFF} // Power-up Timer is enabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator // WDTE : Watchdog Timer {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $37FF} // WDT disabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $3FFF} // RC oscillator - {$define _FOSC_HS = $2FFF} // HS oscillator - {$define _FOSC_XT = $1FFF} // XT oscillator - {$define _FOSC_LP = $0FFF} // LP oscillator + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // Power-up Timer is disabled + {$define _PWRTE_ON = $3FF7} // Power-up Timer is enabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection disabled + {$define _CP_ON = $000F} // All program memory is code protected implementation end. diff --git a/devices16/PIC16F84A.pas b/devices16/PIC16F84A.pas new file mode 100644 index 00000000..bdac042f --- /dev/null +++ b/devices16/PIC16F84A.pas @@ -0,0 +1,169 @@ +unit PIC16F84A; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F84A'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 18} +{$SET PIC_NUMBANKS = 2} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + EEDATA : byte absolute $0008; + EEADR : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_EEIE : bit absolute INTCON.6; + INTCON_T0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RBIE : bit absolute INTCON.3; + INTCON_T0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RBIF : bit absolute INTCON.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + EECON1 : byte absolute $0088; + EECON1_EEIF : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0089; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-1 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-1 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-006:SFR:ALL'} // Bank 0 : PORTA, PORTB + // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '008-009:SFR:ALL'} // Bank 0 : EEDATA, EEADR + // Bank 1 : EECON1, EECON2 + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-1 : PCLATH, INTCON + {$SET_STATE_RAM '00C-04F:GPR:ALLMAPPED'} + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:1F'} // PORTA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:1F'} // TRISA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '088:1F'} // EECON1 bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA2 + // Pin 2 : RA3 + // Pin 3 : RA4/T0CKI + // Pin 4 : MCLR + // Pin 5 : Vss + // Pin 6 : RB0/INT + // Pin 7 : RB1 + // Pin 8 : RB2 + // Pin 9 : RB3 + // Pin 10 : RB4 + // Pin 11 : RB5 + // Pin 12 : RB6 + // Pin 13 : RB7 + // Pin 14 : Vdd + // Pin 15 : OSC2/CLKOUT + // Pin 16 : OSC1/CLKIN + // Pin 17 : RA0 + // Pin 18 : RA1 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-17,1-18,2-1,3-2,4-3'} // PORTA + {$MAP_RAM_TO_PIN '006:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator + + // WDTE : Watchdog Timer + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // Power-up Timer is disabled + {$define _PWRTE_ON = $3FF7} // Power-up Timer is enabled + + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection disabled + {$define _CP_ON = $000F} // All program memory is code protected + +implementation +end. diff --git a/PIC16F87.pas b/devices16/PIC16F87.pas similarity index 58% rename from PIC16F87.pas rename to devices16/PIC16F87.pas index 2fcee45a..80a62442 100644 --- a/PIC16F87.pas +++ b/devices16/PIC16F87.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -51,24 +56,25 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INT0IF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; PIR1_SSPIF : bit absolute PIR1.3; PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -78,7 +84,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -108,9 +115,9 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; + RCREG : byte absolute $001A; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -136,26 +143,28 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; PIE1_SSPIE : bit absolute PIE1.3; PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -179,11 +188,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -192,7 +201,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -206,75 +215,91 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_FREE : bit absolute EECON1.6; - EECON1_WRERR : bit absolute EECON1.5; - EECON1_WREN : bit absolute EECON1.4; - EECON1_WR : bit absolute EECON1.3; - EECON1_RD : bit absolute EECON1.2; - EECON2 : byte absolute $018d; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-01A:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09D:SFR'} // CMCON, CVRCON - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:3F'} // PIR1 - {$SET_UNIMP_BITS '00D:D0'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '08C:3F'} // PIE1 - {$SET_UNIMP_BITS '08D:D0'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '18C:9F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09D:SFR'} // Bank 1 : CMCON, CVRCON + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PIR1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:D0'} // PIR2 bits 5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // PIE1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:D0'} // PIE2 bits 5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:9F'} // EECON1 bits 6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -307,65 +332,65 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection off - {$define _CP_ON = $3FFE} // 0000h to 0FFFh code-protected (all protected) + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin + {$define _FOSC_EC = $3FEF} // ECIO; port I/O function on RA6/OSC2/CLKO + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCPMX : CCP1 Pin Selection bit - {$define _CCPMX_RB0 = $3FFF} // CCP1 function on RB0 - {$define _CCPMX_RB3 = $3FFD} // CCP1 function on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3FFB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WRT : Flash Program Memory Write Enable bits - {$define _WRT_OFF = $3FFF} // Write protection off - {$define _WRT_256 = $3FF7} // 0000h to 00FFh write-protected, 0100h to 0FFFh may be modified by EECON control - {$define _WRT_2048 = $3FEF} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified by EECON control - {$define _WRT_ALL = $3FE7} // 0000h to 0FFFh write-protected + // MCLRE : RA5/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $3FFF} // Code protection off - {$define _CPD_ON = $3FDF} // Data EE memory code-protected + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled // LVP : Low-Voltage Programming Enable bit {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, Low-Voltage Programming enabled - {$define _LVP_OFF = $3FBF} // RB3 is digital I/O, HV on MCLR must be used for programming - - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_OFF = $3F7F} // BOR disabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Code protection off + {$define _CPD_ON = $3EFF} // Data EE memory code-protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected, 0100h to 0FFFh may be modified by EECON control + {$define _WRT_2048 = $3BFF} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified by EECON control + {$define _WRT_ALL = $39FF} // 0000h to 0FFFh write-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $9FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO - {$define _FOSC_EXTRCIO = $97FF} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO - {$define _FOSC_INTOSCCLK = $8FFF} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin - {$define _FOSC_INTOSCIO = $87FF} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin - {$define _FOSC_EC = $1FFF} // ECIO; port I/O function on RA6/OSC2/CLKO - {$define _FOSC_HS = $17FF} // HS oscillator - {$define _FOSC_XT = $0FFF} // XT oscillator - {$define _FOSC_LP = $07FF} // LP oscillator + // CCPMX : CCP1 Pin Selection bit + {$define _CCPMX_RB0 = $3FFF} // CCP1 function on RB0 + {$define _CCPMX_RB3 = $2FFF} // CCP1 function on RB3 - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0003} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0002} // Internal External Switchover mode disabled + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 0FFFh code-protected (all protected) // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0003} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0001} // Fail-Safe Clock Monitor disabled + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled + + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled implementation end. diff --git a/PIC16F870.pas b/devices16/PIC16F870.pas similarity index 51% rename from PIC16F870.pas rename to devices16/PIC16F870.pas index a91bff0b..b6c9bbab 100644 --- a/PIC16F870.pas +++ b/devices16/PIC16F870.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -58,22 +63,22 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - PIR2 : byte absolute $000d; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -83,7 +88,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -103,18 +109,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -147,108 +153,125 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PIE2 : byte absolute $008d; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-012:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1BF:GPR'} - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '140-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-16F:bnk0'} // maps to area 020-06F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1BF:bnk1'} // maps to area 0A0-0BF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:77'} // PIR1 - {$SET_UNIMP_BITS '00D:10'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08C:77'} // PIE1 - {$SET_UNIMP_BITS '08D:10'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:77'} // PIR1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:10'} // PIR2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:77'} // PIE1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:10'} // PIE2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -292,43 +315,43 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ALL = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $0FCF} // All memory code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_ON = $001F} // All memory code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ALL = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/PIC16F871.pas b/devices16/PIC16F871.pas similarity index 55% rename from PIC16F871.pas rename to devices16/PIC16F871.pas index c2ad79f0..92255e3c 100644 --- a/PIC16F871.pas +++ b/devices16/PIC16F871.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -71,23 +76,23 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; - PIR1_CCP1IF : bit absolute PIR1.3; - PIR1_TMR2IF : bit absolute PIR1.2; - PIR1_TMR1IF : bit absolute PIR1.1; - PIR2 : byte absolute $000d; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -97,7 +102,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; CCPR1L : byte absolute $0015; CCPR1H : byte absolute $0016; CCP1CON : byte absolute $0017; @@ -117,18 +123,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -175,112 +181,131 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; - PIE1_CCP1IE : bit absolute PIE1.3; - PIE1_TMR2IE : bit absolute PIE1.2; - PIE1_TMR1IE : bit absolute PIE1.1; - PIE2 : byte absolute $008d; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; PR2 : byte absolute $0092; TXSTA : byte absolute $0098; TXSTA_CSRC : bit absolute TXSTA.7; TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-012:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON - {$SET_STATE_RAM '015-01A:SFR'} // CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '092-092:SFR'} // PR2 - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1BF:GPR'} - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-012:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON + {$SET_STATE_RAM '015-01A:SFR'} // Bank 0 : CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '092-092:SFR'} // Bank 1 : PR2 + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '140-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-16F:bnk0'} // maps to area 020-06F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1BF:bnk1'} // maps to area 0A0-0BF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:F7'} // PIR1 - {$SET_UNIMP_BITS '00D:10'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08C:F7'} // PIE1 - {$SET_UNIMP_BITS '08D:10'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:F7'} // PIR1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:10'} // PIR2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:F7'} // PIE1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:10'} // PIE2 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -338,43 +363,43 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ALL = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $0FCF} // All memory code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_ON = $001F} // All memory code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ALL = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/PIC16F872.pas b/devices16/PIC16F872.pas similarity index 54% rename from PIC16F872.pas rename to devices16/PIC16F872.pas index ce535673..0ab45111 100644 --- a/PIC16F872.pas +++ b/devices16/PIC16F872.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -58,22 +63,22 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; - PIR1_SSPIF : bit absolute PIR1.5; - PIR1_CCP1IF : bit absolute PIR1.4; - PIR1_TMR2IF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.2; - PIR2 : byte absolute $000d; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -83,7 +88,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -103,17 +109,17 @@ interface CCP1CON_CCP1M2 : bit absolute CCP1CON.2; CCP1CON_CCP1M1 : bit absolute CCP1CON.1; CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -146,18 +152,18 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; - PIE1_SSPIE : bit absolute PIE1.5; - PIE1_CCP1IE : bit absolute PIE1.4; - PIE1_TMR2IE : bit absolute PIE1.3; - PIE1_TMR1IE : bit absolute PIE1.2; - PIE2 : byte absolute $008d; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -178,81 +184,98 @@ interface SSPSTAT_R_nW : bit absolute SSPSTAT.2; SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-017:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1BF:GPR'} - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-017:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-03F:GPR:ALL'} + {$SET_STATE_RAM '040-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '140-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-16F:bnk0'} // maps to area 020-06F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1BF:bnk1'} // maps to area 0A0-0BF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -296,43 +319,43 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ALL = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $0FCF} // All memory code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_ON = $001F} // All memory code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ALL = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/PIC16F873.pas b/devices16/PIC16F873.pas similarity index 57% rename from PIC16F873.pas rename to devices16/PIC16F873.pas index 11683802..9bb8d023 100644 --- a/PIC16F873.pas +++ b/devices16/PIC16F873.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F873'} -{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_MAXFREQ = 20000000} {$SET PIC_NPINS = 28} {$SET PIC_NUMBANKS = 4} {$SET PIC_NUMPAGES = 2} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -58,7 +63,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -66,17 +71,17 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -86,7 +91,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -116,27 +122,27 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -169,7 +175,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -177,13 +183,13 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -209,87 +215,103 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-01F:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -333,45 +355,45 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ON = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_UPPER_256 = $2FEF} // 0F00h to 0FFFh code protected + {$define _CP_HALF = $1FDF} // 0800h to 0FFFh code protected + {$define _CP_ALL = $0FCF} // 0000h to 0FFFh code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_UPPER_256 = $405F} // 0F00h to 0FFFh code protected - {$define _CP_HALF = $203F} // 0800h to 0FFFh code protected - {$define _CP_ALL = $001F} // 0000h to 0FFFh code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ON = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/devices16/PIC16F873A.pas b/devices16/PIC16F873A.pas new file mode 100644 index 00000000..5248a045 --- /dev/null +++ b/devices16/PIC16F873A.pas @@ -0,0 +1,419 @@ +unit PIC16F873A; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F873A'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RBIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RBIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_CCP1X : bit absolute CCP1CON.5; + CCP1CON_CCP1Y : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + RCSTA : byte absolute $0018; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXREG : byte absolute $0019; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; + CCP2CON_CCP2X : bit absolute CCP2CON.5; + CCP2CON_CCP2Y : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.5; + ADCON0_CHS1 : bit absolute ADCON0.4; + ADCON0_CHS0 : bit absolute ADCON0.3; + ADCON0_GO_nDONE : bit absolute ADCON0.2; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + SSPCON2 : byte absolute $0091; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + TXSTA : byte absolute $0098; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + SPBRG : byte absolute $0099; + CMCON : byte absolute $009C; + CMCON_C2OUT : bit absolute CMCON.7; + CMCON_C1OUT : bit absolute CMCON.6; + CMCON_C2INV : bit absolute CMCON.5; + CMCON_C1INV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; + CMCON_CM2 : bit absolute CMCON.2; + CMCON_CM1 : bit absolute CMCON.1; + CMCON_CM0 : bit absolute CMCON.0; + CVRCON : byte absolute $009D; + CVRCON_CVREN : bit absolute CVRCON.7; + CVRCON_CVROE : bit absolute CVRCON.6; + CVRCON_CVRR : bit absolute CVRCON.5; + CVRCON_CVR3 : bit absolute CVRCON.3; + CVRCON_CVR2 : bit absolute CVRCON.2; + CVRCON_CVR1 : bit absolute CVRCON.1; + CVRCON_CVR0 : bit absolute CVRCON.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_PCFG3 : bit absolute ADCON1.3; + ADCON1_PCFG2 : bit absolute ADCON1.2; + ADCON1_PCFG1 : bit absolute ADCON1.1; + ADCON1_PCFG0 : bit absolute ADCON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : MCLR/VPP + // Pin 2 : RA0/AN0 + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2/VREF-/CVREF + // Pin 5 : RA3/AN3/VREF+ + // Pin 6 : RA4/T0CKI/C1OUT + // Pin 7 : RA5/AN4/SS/C2OUT + // Pin 8 : VSS + // Pin 9 : OSC1/CLKI + // Pin 10 : OSC2/CLKO + // Pin 11 : RC0/T1OSO/T1CKI + // Pin 12 : RC1/T1OSI/CCP2 + // Pin 13 : RC2/CCP1 + // Pin 14 : RC3/SCK/SCL + // Pin 15 : RC4/SDI/SDA + // Pin 16 : RC5/SDO + // Pin 17 : RC6/TX/CK + // Pin 18 : RC7/RX/DT + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : RB0/INT + // Pin 22 : RB1 + // Pin 23 : RB2 + // Pin 24 : RB3/PGM + // Pin 25 : RB4 + // Pin 26 : RB5 + // Pin 27 : RB6/PGC + // Pin 28 : RB7/PGD + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-2,1-3,2-4,3-5,4-6,5-7'} // PORTA + {$MAP_RAM_TO_PIN '006:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '007:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled + + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled + + // LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming + + // CPD : Data EEPROM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection off + {$define _CPD_ON = $3EFF} // Data EEPROM code-protected + + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 0FFFh may be written to by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 03FFh write-protected; 0400h to 0FFFh may be written to by EECON control + {$define _WRT_HALF = $39FF} // 0000h to 07FFh write-protected; 0800h to 0FFFh may be written to by EECON control + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All program memory code-protected + +implementation +end. diff --git a/PIC16F874.pas b/devices16/PIC16F874.pas similarity index 60% rename from PIC16F874.pas rename to devices16/PIC16F874.pas index 4d5a97fa..7392622f 100644 --- a/PIC16F874.pas +++ b/devices16/PIC16F874.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F874'} -{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_MAXFREQ = 20000000} {$SET PIC_NPINS = 40} {$SET PIC_NUMBANKS = 4} {$SET PIC_NUMPAGES = 2} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -71,7 +76,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -80,17 +85,17 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -100,7 +105,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -130,27 +136,27 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -197,10 +203,10 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -209,13 +215,13 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -241,85 +247,103 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -377,45 +401,45 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ON = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_UPPER_256 = $2FEF} // 0F00h to 0FFFh code protected + {$define _CP_HALF = $1FDF} // 0800h to 0FFFh code protected + {$define _CP_ALL = $0FCF} // 0000h to 0FFFh code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_UPPER_256 = $405F} // 0F00h to 0FFFh code protected - {$define _CP_HALF = $203F} // 0800h to 0FFFh code protected - {$define _CP_ALL = $001F} // 0000h to 0FFFh code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ON = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/PIC16F874A.pas b/devices16/PIC16F874A.pas similarity index 61% rename from PIC16F874A.pas rename to devices16/PIC16F874A.pas index b244da48..88d54f8f 100644 --- a/PIC16F874A.pas +++ b/devices16/PIC16F874A.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F874A'} -{$SET PIC_MAXFREQ = 10000000} +{$SET PIC_MAXFREQ = 20000000} {$SET PIC_NPINS = 40} {$SET PIC_NUMBANKS = 4} {$SET PIC_NUMPAGES = 2} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -71,7 +76,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -80,17 +85,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_CMIF : bit absolute PIR2.5; + PIR2 : byte absolute $000D; + PIR2_CMIF : bit absolute PIR2.6; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -100,7 +106,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -130,27 +137,27 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -197,10 +204,10 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -209,14 +216,14 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_CMIE : bit absolute PIE2.5; + PIE2 : byte absolute $008D; + PIE2_CMIE : bit absolute PIE2.6; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -242,11 +249,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -255,7 +262,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -263,83 +270,100 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-07F:GPR:ALL'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '120-17F:bnk0'} // maps to area 020-07F (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + {$SET_MAPPED_RAM '1A0-1FF:bnk1'} // maps to area 0A0-0FF (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '09F:CF'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -397,45 +421,45 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $2FCF} // Code protection off - {$define _CP_ON = $2FCE} // All program memory code-protected + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $2FCF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $2FCD} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // WRT : Flash Program Memory Write Enable bits - {$define _WRT_OFF = $2FCF} // Write protection off; all program memory may be written to by EECON control - {$define _WRT_256 = $2FCB} // 0000h to 00FFh write-protected; 0100h to 0FFFh may be written to by EECON control - {$define _WRT_1FOURTH = $2FC7} // 0000h to 03FFh write-protected; 0400h to 0FFFh may be written to by EECON control - {$define _WRT_HALF = $2FC3} // 0000h to 07FFh write-protected; 0800h to 0FFFh may be written to by EECON control + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // CPD : Data EEPROM Memory Code Protection bit - {$define _CPD_OFF = $2FDF} // Data EEPROM code protection off - {$define _CPD_ON = $2FCF} // Data EEPROM code-protected + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled // LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $2FEF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $2FCF} // RB3 is digital I/O, HV on MCLR must be used for programming + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $2FCF} // BOR enabled - {$define _BOREN_OFF = $2F8F} // BOR disabled + // CPD : Data EEPROM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection off + {$define _CPD_ON = $3EFF} // Data EEPROM code-protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $2FCF} // PWRT disabled - {$define _PWRTE_ON = $2F4F} // PWRT enabled + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 0FFFh may be written to by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 03FFh write-protected; 0400h to 0FFFh may be written to by EECON control + {$define _WRT_HALF = $39FF} // 0000h to 07FFh write-protected; 0800h to 0FFFh may be written to by EECON control - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $2FCF} // WDT enabled - {$define _WDTE_OFF = $2ECF} // WDT disabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $2FCF} // RC oscillator - {$define _FOSC_HS = $2DCF} // HS oscillator - {$define _FOSC_XT = $2BCF} // XT oscillator - {$define _FOSC_LP = $29CF} // LP oscillator + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All program memory code-protected implementation end. diff --git a/PIC16F876.pas b/devices16/PIC16F876.pas similarity index 57% rename from PIC16F876.pas rename to devices16/PIC16F876.pas index a1b9da76..5017e692 100644 --- a/PIC16F876.pas +++ b/devices16/PIC16F876.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F876'} -{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_MAXFREQ = 20000000} {$SET PIC_NPINS = 28} {$SET PIC_NUMBANKS = 4} {$SET PIC_NUMPAGES = 4} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -48,8 +48,13 @@ interface PORTC_RC2 : bit absolute PORTC.2; PORTC_RC1 : bit absolute PORTC.1; PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -58,7 +63,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -66,17 +71,17 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -86,7 +91,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -116,27 +122,27 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -169,7 +175,7 @@ interface TRISC_TRISC2 : bit absolute TRISC.2; TRISC_TRISC1 : bit absolute TRISC.1; TRISC_TRISC0 : bit absolute TRISC.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -177,13 +183,13 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -209,87 +215,104 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '00A-01F:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '08A-08E:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -333,45 +356,45 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ON = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_UPPER_256 = $2FEF} // 1F00h to 1FFFh code protected + {$define _CP_HALF = $1FDF} // 1000h to 1FFFh code protected + {$define _CP_ALL = $0FCF} // 0000h to 1FFFh code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_UPPER_256 = $405F} // 1F00h to 1FFFh code protected - {$define _CP_HALF = $203F} // 1000h to 1FFFh code protected - {$define _CP_ALL = $001F} // 0000h to 1FFFh code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ON = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/devices16/PIC16F876A.pas b/devices16/PIC16F876A.pas new file mode 100644 index 00000000..084e9ea7 --- /dev/null +++ b/devices16/PIC16F876A.pas @@ -0,0 +1,421 @@ +unit PIC16F876A; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F876A'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RBIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RBIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_CCP1X : bit absolute CCP1CON.5; + CCP1CON_CCP1Y : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + RCSTA : byte absolute $0018; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXREG : byte absolute $0019; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; + CCP2CON_CCP2X : bit absolute CCP2CON.5; + CCP2CON_CCP2Y : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.5; + ADCON0_CHS1 : bit absolute ADCON0.4; + ADCON0_CHS0 : bit absolute ADCON0.3; + ADCON0_GO_nDONE : bit absolute ADCON0.2; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $008C; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + SSPCON2 : byte absolute $0091; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + TXSTA : byte absolute $0098; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + SPBRG : byte absolute $0099; + CMCON : byte absolute $009C; + CMCON_C2OUT : bit absolute CMCON.7; + CMCON_C1OUT : bit absolute CMCON.6; + CMCON_C2INV : bit absolute CMCON.5; + CMCON_C1INV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; + CMCON_CM2 : bit absolute CMCON.2; + CMCON_CM1 : bit absolute CMCON.1; + CMCON_CM0 : bit absolute CMCON.0; + CVRCON : byte absolute $009D; + CVRCON_CVREN : bit absolute CVRCON.7; + CVRCON_CVROE : bit absolute CVRCON.6; + CVRCON_CVRR : bit absolute CVRCON.5; + CVRCON_CVR3 : bit absolute CVRCON.3; + CVRCON_CVR2 : bit absolute CVRCON.2; + CVRCON_CVR1 : bit absolute CVRCON.1; + CVRCON_CVR0 : bit absolute CVRCON.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_PCFG3 : bit absolute ADCON1.3; + ADCON1_PCFG2 : bit absolute ADCON1.2; + ADCON1_PCFG1 : bit absolute ADCON1.1; + ADCON1_PCFG0 : bit absolute ADCON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : MCLR/VPP + // Pin 2 : RA0/AN0 + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2/VREF-/CVREF + // Pin 5 : RA3/AN3/VREF+ + // Pin 6 : RA4/T0CKI/C1OUT + // Pin 7 : RA5/AN4/SS/C2OUT + // Pin 8 : VSS + // Pin 9 : OSC1/CLKI + // Pin 10 : OSC2/CLKO + // Pin 11 : RC0/T1OSO/T1CKI + // Pin 12 : RC1/T1OSI/CCP2 + // Pin 13 : RC2/CCP1 + // Pin 14 : RC3/SCK/SCL + // Pin 15 : RC4/SDI/SDA + // Pin 16 : RC5/SDO + // Pin 17 : RC6/TX/CK + // Pin 18 : RC7/RX/DT + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : RB0/INT + // Pin 22 : RB1 + // Pin 23 : RB2 + // Pin 24 : RB3/PGM + // Pin 25 : RB4 + // Pin 26 : RB5 + // Pin 27 : RB6/PGC + // Pin 28 : RB7/PGD + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-2,1-3,2-4,3-5,4-6,5-7'} // PORTA + {$MAP_RAM_TO_PIN '006:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '007:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled + + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled + + // LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming + + // CPD : Data EEPROM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection off + {$define _CPD_ON = $3EFF} // Data EEPROM code-protected + + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control + {$define _WRT_HALF = $39FF} // 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All program memory code-protected + +implementation +end. diff --git a/PIC16F877.pas b/devices16/PIC16F877.pas similarity index 60% rename from PIC16F877.pas rename to devices16/PIC16F877.pas index e19328d2..c1c316d1 100644 --- a/PIC16F877.pas +++ b/devices16/PIC16F877.pas @@ -2,7 +2,7 @@ // Define hardware {$SET PIC_MODEL = 'PIC16F877'} -{$SET PIC_MAXFREQ = 4000000} +{$SET PIC_MAXFREQ = 20000000} {$SET PIC_NPINS = 40} {$SET PIC_NUMBANKS = 4} {$SET PIC_NUMPAGES = 4} @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -61,8 +61,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -71,7 +76,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_PSPIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -80,17 +85,17 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1CKPS1 : bit absolute T1CON.5; T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -100,7 +105,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -130,27 +136,27 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -197,10 +203,10 @@ interface TRISE_OBF : bit absolute TRISE.6; TRISE_IBOV : bit absolute TRISE.5; TRISE_PSPMODE : bit absolute TRISE.4; - TRISE_TRISE2 : bit absolute TRISE.3; - TRISE_TRISE1 : bit absolute TRISE.2; - TRISE_TRISE0 : bit absolute TRISE.1; - PIE1 : byte absolute $008c; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; PIE1_PSPIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -209,13 +215,13 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.2; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; SSPCON2 : byte absolute $0091; SSPCON2_GCEN : bit absolute SSPCON2.7; SSPCON2_ACKSTAT : bit absolute SSPCON2.6; @@ -241,85 +247,104 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_PCFG3 : bit absolute ADCON1.3; ADCON1_PCFG2 : bit absolute ADCON1.2; ADCON1_PCFG1 : bit absolute ADCON1.1; ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-08E:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON - {$SET_STATE_RAM '091-094:SFR'} // SSPCON2, PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09E-09F:SFR'} // ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-104:SFR'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_STATE_RAM '106-106:SFR'} // PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09E-09F:SFR'} // Bank 1 : ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '005:3F'} // PORTA - {$SET_UNIMP_BITS '009:07'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:59'} // PIR2 - {$SET_UNIMP_BITS '010:3F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '085:3F'} // TRISA - {$SET_UNIMP_BITS '089:F7'} // TRISE - {$SET_UNIMP_BITS '08D:59'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09F:8F'} // ADCON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:8F'} // ADCON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -377,45 +402,45 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3BFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3BFE} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator - // WRT : FLASH Program Memory Write Enable - {$define _WRT_ON = $3BFF} // Unprotected program memory may be written to by EECON control - {$define _WRT_OFF = $3BFD} // Unprotected program memory may not be written to by EECON control + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // CPD : Data EE Memory Code Protection - {$define _CPD_OFF = $3BFF} // Code Protection off - {$define _CPD_ON = $3BFB} // Data EEPROM memory code-protected + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // LVP : Low Voltage In-Circuit Serial Programming Enable bit - {$define _LVP_ON = $3BFF} // RB3/PGM pin has PGM function; low-voltage programming enabled - {$define _LVP_OFF = $3BF7} // RB3 is digital I/O, HV on MCLR must be used for programming + // CP : FLASH Program Memory Code Protection bits + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_UPPER_256 = $2FEF} // 1F00h to 1FFFh code protected + {$define _CP_HALF = $1FDF} // 1000h to 1FFFh code protected + {$define _CP_ALL = $0FCF} // 0000h to 1FFFh code protected // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3BFF} // BOR enabled - {$define _BOREN_OFF = $3BEF} // BOR disabled + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled - // CP : FLASH Program Memory Code Protection bits - {$define _CP_OFF = $607F} // Code protection off - {$define _CP_UPPER_256 = $405F} // 1F00h to 1FFFh code protected - {$define _CP_HALF = $203F} // 1000h to 1FFFh code protected - {$define _CP_ALL = $001F} // 0000h to 1FFFh code protected + // LVP : Low Voltage In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $BBFF} // PWRT disabled - {$define _PWRTE_ON = $3BFF} // PWRT enabled + // CPD : Data EE Memory Code Protection + {$define _CPD_OFF = $3FFF} // Code Protection off + {$define _CPD_ON = $3EFF} // Data EEPROM memory code-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $13BFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // WRT : FLASH Program Memory Write Enable + {$define _WRT_ON = $3FFF} // Unprotected program memory may be written to by EECON control + {$define _WRT_OFF = $3DFF} // Unprotected program memory may not be written to by EECON control - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC = $63BFF} // RC oscillator - {$define _FOSC_HS = $43BFF} // HS oscillator - {$define _FOSC_XT = $23BFF} // XT oscillator - {$define _FOSC_LP = $3BFF} // LP oscillator + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger implementation end. diff --git a/devices16/PIC16F877A.pas b/devices16/PIC16F877A.pas new file mode 100644 index 00000000..1824d564 --- /dev/null +++ b/devices16/PIC16F877A.pas @@ -0,0 +1,467 @@ +unit PIC16F877A; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F877A'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 4} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF : byte absolute $0000; + TMR0 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_IRP : bit absolute STATUS.7; + STATUS_RP1 : bit absolute STATUS.6; + STATUS_RP0 : bit absolute STATUS.5; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR : byte absolute $0004; + PORTA : byte absolute $0005; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $0006; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $0007; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $0008; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0009; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_RBIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_RBIF : bit absolute INTCON.0; + PIR1 : byte absolute $000C; + PIR1_PSPIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $000D; + PIR2_CMIF : bit absolute PIR2.6; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; + T1CON : byte absolute $0010; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1CS : bit absolute T1CON.1; + T1CON_TMR1ON : bit absolute T1CON.0; + TMR2 : byte absolute $0011; + T2CON : byte absolute $0012; + T2CON_TOUTPS3 : bit absolute T2CON.6; + T2CON_TOUTPS2 : bit absolute T2CON.5; + T2CON_TOUTPS1 : bit absolute T2CON.4; + T2CON_TOUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + SSPBUF : byte absolute $0013; + SSPCON : byte absolute $0014; + SSPCON_WCOL : bit absolute SSPCON.7; + SSPCON_SSPOV : bit absolute SSPCON.6; + SSPCON_SSPEN : bit absolute SSPCON.5; + SSPCON_CKP : bit absolute SSPCON.4; + SSPCON_SSPM3 : bit absolute SSPCON.3; + SSPCON_SSPM2 : bit absolute SSPCON.2; + SSPCON_SSPM1 : bit absolute SSPCON.1; + SSPCON_SSPM0 : bit absolute SSPCON.0; + CCPR1L : byte absolute $0015; + CCPR1H : byte absolute $0016; + CCP1CON : byte absolute $0017; + CCP1CON_CCP1X : bit absolute CCP1CON.5; + CCP1CON_CCP1Y : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + RCSTA : byte absolute $0018; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXREG : byte absolute $0019; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; + CCP2CON_CCP2X : bit absolute CCP2CON.5; + CCP2CON_CCP2Y : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; + ADCON0_ADCS1 : bit absolute ADCON0.7; + ADCON0_ADCS0 : bit absolute ADCON0.6; + ADCON0_CHS2 : bit absolute ADCON0.5; + ADCON0_CHS1 : bit absolute ADCON0.4; + ADCON0_CHS0 : bit absolute ADCON0.3; + ADCON0_GO_nDONE : bit absolute ADCON0.2; + ADCON0_ADON : bit absolute ADCON0.0; + OPTION_REG : byte absolute $0081; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + TRISA : byte absolute $0085; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0086; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0087; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0088; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0089; + TRISE_IBF : bit absolute TRISE.7; + TRISE_OBF : bit absolute TRISE.6; + TRISE_IBOV : bit absolute TRISE.5; + TRISE_PSPMODE : bit absolute TRISE.4; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $008C; + PIE1_PSPIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $008D; + PIE2_CMIE : bit absolute PIE2.6; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + SSPCON2 : byte absolute $0091; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + PR2 : byte absolute $0092; + SSPADD : byte absolute $0093; + SSPSTAT : byte absolute $0094; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + TXSTA : byte absolute $0098; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + SPBRG : byte absolute $0099; + CMCON : byte absolute $009C; + CMCON_C2OUT : bit absolute CMCON.7; + CMCON_C1OUT : bit absolute CMCON.6; + CMCON_C2INV : bit absolute CMCON.5; + CMCON_C1INV : bit absolute CMCON.4; + CMCON_CIS : bit absolute CMCON.3; + CMCON_CM2 : bit absolute CMCON.2; + CMCON_CM1 : bit absolute CMCON.1; + CMCON_CM0 : bit absolute CMCON.0; + CVRCON : byte absolute $009D; + CVRCON_CVREN : bit absolute CVRCON.7; + CVRCON_CVROE : bit absolute CVRCON.6; + CVRCON_CVRR : bit absolute CVRCON.5; + CVRCON_CVR3 : bit absolute CVRCON.3; + CVRCON_CVR2 : bit absolute CVRCON.2; + CVRCON_CVR1 : bit absolute CVRCON.1; + CVRCON_CVR0 : bit absolute CVRCON.0; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_PCFG3 : bit absolute ADCON1.3; + ADCON1_PCFG2 : bit absolute ADCON1.2; + ADCON1_PCFG1 : bit absolute ADCON1.1; + ADCON1_PCFG0 : bit absolute ADCON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : PCON + {$SET_STATE_RAM '091-094:SFR'} // Bank 1 : SSPCON2, PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '005:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '009:07'} // PORTE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:59'} // PIR2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:3F'} // T1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '085:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:F7'} // TRISE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:59'} // PIE2 bits 7,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:CF'} // ADCON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : MCLR/VPP + // Pin 2 : RA0/AN0 + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2/VREF-/CVREF + // Pin 5 : RA3/AN3/VREF+ + // Pin 6 : RA4/T0CKI/C1OUT + // Pin 7 : RA5/AN4/SS/C2OUT + // Pin 8 : RE0/RD/AN5 + // Pin 9 : RE1/WR/AN6 + // Pin 10 : RE2/CS/AN7 + // Pin 11 : VDD + // Pin 12 : VSS + // Pin 13 : OSC1/CLKI + // Pin 14 : OSC2/CLKO + // Pin 15 : RC0/T1OSO/T1CKI + // Pin 16 : RC1/T1OSI/CCP2 + // Pin 17 : RC2/CCP1 + // Pin 18 : RC3/SCK/SCL + // Pin 19 : RD0/PSP0 + // Pin 20 : RD1/PSP1 + // Pin 21 : RD2/PSP2 + // Pin 22 : RD3/PSP3 + // Pin 23 : RC4/SDI/SDA + // Pin 24 : RC5/SDO + // Pin 25 : RC6/TX/CK + // Pin 26 : RC7/RX/DT + // Pin 27 : RD4/PSP4 + // Pin 28 : RD5/PSP5 + // Pin 29 : RD6/PSP6 + // Pin 30 : RD7/PSP7 + // Pin 31 : VSS + // Pin 32 : VDD + // Pin 33 : RB0/INT + // Pin 34 : RB1 + // Pin 35 : RB2 + // Pin 36 : RB3/PGM + // Pin 37 : RB4 + // Pin 38 : RB5 + // Pin 39 : RB6/PGC + // Pin 40 : RB7/PGD + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '005:0-2,1-3,2-4,3-5,4-6,5-7'} // PORTA + {$MAP_RAM_TO_PIN '006:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '007:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '008:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '009:0-8,1-9,2-10'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC = $3FFF} // RC oscillator + {$define _FOSC_HS = $3FFE} // HS oscillator + {$define _FOSC_XT = $3FFD} // XT oscillator + {$define _FOSC_LP = $3FFC} // LP oscillator + + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled + + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled + + // LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming + + // CPD : Data EEPROM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection off + {$define _CPD_ON = $3EFF} // Data EEPROM code-protected + + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control + {$define _WRT_HALF = $39FF} // 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // All program memory code-protected + +implementation +end. diff --git a/PIC16F88.pas b/devices16/PIC16F88.pas similarity index 58% rename from PIC16F88.pas rename to devices16/PIC16F88.pas index edec04f5..62901ab2 100644 --- a/PIC16F88.pas +++ b/devices16/PIC16F88.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -41,8 +41,13 @@ interface PORTB_RB2 : bit absolute PORTB.2; PORTB_RB1 : bit absolute PORTB.1; PORTB_RB0 : bit absolute PORTB.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -51,7 +56,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INT0IF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -59,17 +64,18 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_CMIF : bit absolute PIR2.5; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_CMIF : bit absolute PIR2.6; PIR2_EEIF : bit absolute PIR2.4; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1RUN : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -79,7 +85,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -109,18 +116,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS2 : bit absolute ADCON0.5; ADCON0_CHS1 : bit absolute ADCON0.4; ADCON0_CHS0 : bit absolute ADCON0.3; ADCON0_GO_nDONE : bit absolute ADCON0.2; - ADCON0_ADON : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -146,7 +153,7 @@ interface TRISB_TRISB2 : bit absolute TRISB.2; TRISB_TRISB1 : bit absolute TRISB.1; TRISB_TRISB0 : bit absolute TRISB.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -154,19 +161,21 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_CMIE : bit absolute PIE2.5; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_CMIE : bit absolute PIE2.6; PIE2_EEIE : bit absolute PIE2.4; - PCON : byte absolute $008e; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - OSCCON : byte absolute $008f; + PCON : byte absolute $008E; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; OSCCON_OSTS : bit absolute OSCCON.3; OSCCON_IOFS : bit absolute OSCCON.2; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; OSCTUNE : byte absolute $0090; OSCTUNE_TUN5 : bit absolute OSCTUNE.5; OSCTUNE_TUN4 : bit absolute OSCTUNE.4; @@ -190,11 +199,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - ANSEL : byte absolute $009b; + ANSEL : byte absolute $009B; ANSEL_ANS6 : bit absolute ANSEL.6; ANSEL_ANS5 : bit absolute ANSEL.5; ANSEL_ANS4 : bit absolute ANSEL.4; @@ -202,7 +211,7 @@ interface ANSEL_ANS2 : bit absolute ANSEL.2; ANSEL_ANS1 : bit absolute ANSEL.1; ANSEL_ANS0 : bit absolute ANSEL.0; - CMCON : byte absolute $009c; + CMCON : byte absolute $009C; CMCON_C2OUT : bit absolute CMCON.7; CMCON_C1OUT : bit absolute CMCON.6; CMCON_C2INV : bit absolute CMCON.5; @@ -211,7 +220,7 @@ interface CMCON_CM2 : bit absolute CMCON.2; CMCON_CM1 : bit absolute CMCON.1; CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009d; + CVRCON : byte absolute $009D; CVRCON_CVREN : bit absolute CVRCON.7; CVRCON_CVROE : bit absolute CVRCON.6; CVRCON_CVRR : bit absolute CVRCON.5; @@ -219,8 +228,8 @@ interface CVRCON_CVR2 : bit absolute CVRCON.2; CVRCON_CVR1 : bit absolute CVRCON.1; CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_VCFG1 : bit absolute ADCON1.5; @@ -231,79 +240,95 @@ interface WDTCON_WDTPS1 : bit absolute WDTCON.2; WDTCON_WDTPS0 : bit absolute WDTCON.1; WDTCON_SWDTEN : bit absolute WDTCON.0; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; - EECON1 : byte absolute $018c; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_FREE : bit absolute EECON1.6; - EECON1_WRERR : bit absolute EECON1.5; - EECON1_WREN : bit absolute EECON1.4; - EECON1_WR : bit absolute EECON1.3; - EECON1_RD : bit absolute EECON1.2; - EECON2 : byte absolute $018d; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-006:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB - {$SET_STATE_RAM '00A-01A:SFR'} // PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-086:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB - {$SET_STATE_RAM '08A-090:SFR'} // PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE - {$SET_STATE_RAM '092-094:SFR'} // PR2, SSPADD, SSPSTAT - {$SET_STATE_RAM '098-099:SFR'} // TXSTA, SPBRG - {$SET_STATE_RAM '09B-09F:SFR'} // ANSEL, CMCON, CVRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-106:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB - {$SET_STATE_RAM '10A-10F:SFR'} // PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:D0'} // PIR2 - {$SET_UNIMP_BITS '010:7F'} // T1CON - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01F:FD'} // ADCON0 - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:D0'} // PIE2 - {$SET_UNIMP_BITS '08E:03'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:3F'} // OSCTUNE - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09B:7F'} // ANSEL - {$SET_UNIMP_BITS '09D:EF'} // CVRCON - {$SET_UNIMP_BITS '09F:F0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:0F'} // EEADRH - {$SET_UNIMP_BITS '18C:9F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-090:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE + {$SET_STATE_RAM '092-094:SFR'} // Bank 1 : PR2, SSPADD, SSPSTAT + {$SET_STATE_RAM '098-099:SFR'} // Bank 1 : TXSTA, SPBRG + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ANSEL, CMCON, CVRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:D0'} // PIR2 bits 5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:7F'} // T1CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:FD'} // ADCON0 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:D0'} // PIE2 bits 5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:03'} // PCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:7F'} // ANSEL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:EF'} // CVRCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON1 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // EEADRH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:9F'} // EECON1 bits 6,5 un-implemented (read as 0) // -- PIN mapping -- @@ -336,65 +361,65 @@ interface // -- Bits Configuration -- - // CP : Flash Program Memory Code Protection bit - {$define _CP_OFF = $3FFF} // Code protection off - {$define _CP_ON = $3FFE} // 0000h to 0FFFh code-protected (all protected) + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO + {$define _FOSC_EXTRCIO = $3FFE} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO + {$define _FOSC_INTOSCCLK = $3FFD} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin + {$define _FOSC_INTOSCIO = $3FFC} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin + {$define _FOSC_EC = $3FEF} // ECIO; port I/O function on RA6/OSC2/CLKO + {$define _FOSC_HS = $3FEE} // HS oscillator + {$define _FOSC_XT = $3FED} // XT oscillator + {$define _FOSC_LP = $3FEC} // LP oscillator - // CCPMX : CCP1 Pin Selection bit - {$define _CCPMX_RB0 = $3FFF} // CCP1 function on RB0 - {$define _CCPMX_RB3 = $3FFD} // CCP1 function on RB3 + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FFB} // WDT disabled - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins - {$define _DEBUG_ON = $3FFB} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FF7} // PWRT enabled - // WRT : Flash Program Memory Write Enable bits - {$define _WRT_OFF = $3FFF} // Write protection off - {$define _WRT_256 = $3FF7} // 0000h to 00FFh write-protected, 0100h to 0FFFh may be modified by EECON control - {$define _WRT_2048 = $3FEF} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified by EECON control - {$define _WRT_ALL = $3FE7} // 0000h to 0FFFh write-protected + // MCLRE : RA5/MCLR/VPP Pin Function Select bit + {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD - // CPD : Data EE Memory Code Protection bit - {$define _CPD_OFF = $3FFF} // Code protection off - {$define _CPD_ON = $3FDF} // Data EE memory code-protected + // BOREN : Brown-out Reset Enable bit + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_OFF = $3FBF} // BOR disabled // LVP : Low-Voltage Programming Enable bit {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, Low-Voltage Programming enabled - {$define _LVP_OFF = $3FBF} // RB3 is digital I/O, HV on MCLR must be used for programming - - // BOREN : Brown-out Reset Enable bit - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_OFF = $3F7F} // BOR disabled + {$define _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming - // MCLRE : RA5/MCLR/VPP Pin Function Select bit - {$define _MCLRE_ON = $3FFF} // RA5/MCLR/VPP pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD + // CPD : Data EE Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Code protection off + {$define _CPD_ON = $3EFF} // Data EE memory code-protected - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // WRT : Flash Program Memory Write Enable bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write-protected, 0100h to 0FFFh may be modified by EECON control + {$define _WRT_2048 = $3BFF} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified by EECON control + {$define _WRT_ALL = $39FF} // 0000h to 0FFFh write-protected - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins + {$define _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $9FFF} // EXTRC oscillator; CLKO function on RA6/OSC2/CLKO - {$define _FOSC_EXTRCIO = $97FF} // EXTRC oscillator; port I/O function on RA6/OSC2/CLKO - {$define _FOSC_INTOSCCLK = $8FFF} // INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin - {$define _FOSC_INTOSCIO = $87FF} // INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin - {$define _FOSC_EC = $1FFF} // ECIO; port I/O function on RA6/OSC2/CLKO - {$define _FOSC_HS = $17FF} // HS oscillator - {$define _FOSC_XT = $0FFF} // XT oscillator - {$define _FOSC_LP = $07FF} // LP oscillator + // CCPMX : CCP1 Pin Selection bit + {$define _CCPMX_RB0 = $3FFF} // CCP1 function on RB0 + {$define _CCPMX_RB3 = $2FFF} // CCP1 function on RB3 - // IESO : Internal External Switchover bit - {$define _IESO_ON = $0003} // Internal External Switchover mode enabled - {$define _IESO_OFF = $0002} // Internal External Switchover mode disabled + // CP : Flash Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // Code protection off + {$define _CP_ON = $1FFF} // 0000h to 0FFFh code-protected (all protected) // FCMEN : Fail-Safe Clock Monitor Enable bit - {$define _FCMEN_ON = $0003} // Fail-Safe Clock Monitor enabled - {$define _FCMEN_OFF = $0001} // Fail-Safe Clock Monitor disabled + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor enabled + {$define _FCMEN_OFF = $3FFE} // Fail-Safe Clock Monitor disabled + + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal External Switchover mode enabled + {$define _IESO_OFF = $3FFD} // Internal External Switchover mode disabled implementation end. diff --git a/PIC16F882.pas b/devices16/PIC16F882.pas similarity index 66% rename from PIC16F882.pas rename to devices16/PIC16F882.pas index c14b1db9..512cd46f 100644 --- a/PIC16F882.pas +++ b/devices16/PIC16F882.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -70,23 +75,23 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; PIR2_ULPWUIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GIV : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -96,7 +101,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -128,18 +134,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -149,7 +155,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -186,7 +192,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -194,20 +200,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; PIE2_ULPWUIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -232,15 +238,6 @@ interface SSPCON2_SEN : bit absolute SSPCON2.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -251,23 +248,7 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; VRCON : byte absolute $0097; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; @@ -287,24 +268,8 @@ interface TXSTA_TRMT : bit absolute TXSTA.1; TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - SPBRG_BRG7 : bit absolute SPBRG.7; - SPBRG_BRG6 : bit absolute SPBRG.6; - SPBRG_BRG5 : bit absolute SPBRG.5; - SPBRG_BRG4 : bit absolute SPBRG.4; - SPBRG_BRG3 : bit absolute SPBRG.3; - SPBRG_BRG2 : bit absolute SPBRG.2; - SPBRG_BRG1 : bit absolute SPBRG.1; - SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; - SPBRGH_BRG15 : bit absolute SPBRGH.7; - SPBRGH_BRG14 : bit absolute SPBRGH.6; - SPBRGH_BRG13 : bit absolute SPBRGH.5; - SPBRGH_BRG12 : bit absolute SPBRGH.4; - SPBRGH_BRG11 : bit absolute SPBRGH.3; - SPBRGH_BRG10 : bit absolute SPBRGH.2; - SPBRGH_BRG9 : bit absolute SPBRGH.1; - SPBRGH_BRG8 : bit absolute SPBRGH.0; - PWM1CON : byte absolute $009b; + SPBRGH : byte absolute $009A; + PWM1CON : byte absolute $009B; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -313,7 +278,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $009c; + ECCPAS : byte absolute $009C; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -322,15 +287,15 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - PSTRCON : byte absolute $009d; + PSTRCON : byte absolute $009D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; - ADCON1_ADFM : bit absolute ADCON1.6; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_VCFG1 : bit absolute ADCON1.5; ADCON1_VCFG0 : bit absolute ADCON1.4; WDTCON : byte absolute $0105; @@ -344,7 +309,7 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; CM2CON0 : byte absolute $0108; @@ -352,7 +317,7 @@ interface CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; CM2CON1 : byte absolute $0109; @@ -360,12 +325,23 @@ interface CM2CON1_MC2OUT : bit absolute CM2CON1.6; CM2CON1_C1RSEL : bit absolute CM2CON1.5; CM2CON1_C2RSEL : bit absolute CM2CON1.4; - CM2CON1_T1GSS : bit absolute CM2CON1.3; - CM2CON1_C2SYNC : bit absolute CM2CON1.2; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; SRCON : byte absolute $0185; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; @@ -373,14 +349,14 @@ interface SRCON_C2REN : bit absolute SRCON.4; SRCON_PULSS : bit absolute SRCON.3; SRCON_PULSR : bit absolute SRCON.2; - SRCON_FVREN : bit absolute SRCON.1; + SRCON_FVREN : bit absolute SRCON.0; BAUDCTL : byte absolute $0187; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; ANSEL : byte absolute $0188; ANSEL_ANS4 : bit absolute ANSEL.4; ANSEL_ANS3 : bit absolute ANSEL.3; @@ -394,74 +370,83 @@ interface ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-09F:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0BF:GPR'} - {$SET_STATE_RAM '0F0-0FF:GPR'} - {$SET_STATE_RAM '100-10F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1, PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '170-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, SRCON, TRISB, BAUDCTL, ANSEL, ANSELH, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:FD'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:08'} // TRISE - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:FD'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '09D:1F'} // PSTRCON - {$SET_UNIMP_BITS '09F:B0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '107:FB'} // CM1CON0 - {$SET_UNIMP_BITS '108:FB'} // CM2CON0 - {$SET_UNIMP_BITS '109:F3'} // CM2CON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '185:FD'} // SRCON - {$SET_UNIMP_BITS '187:DB'} // BAUDCTL - {$SET_UNIMP_BITS '188:1F'} // ANSEL - {$SET_UNIMP_BITS '189:3F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : WDTCON, PORTB, CM1CON0 + // Bank 3 : SRCON, TRISB, BAUDCTL + {$SET_STATE_RAM '009-009:SFR:ALL'} // Bank 0 : PORTE + // Bank 1 : TRISE + // Bank 2 : CM2CON1 + // Bank 3 : ANSELH + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-09F:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '108-108:SFR'} // Bank 2 : CM2CON0 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '188-188:SFR'} // Bank 3 : ANSEL + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B0'} // ADCON1 bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:FD'} // SRCON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '188:1F'} // ANSEL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // ANSELH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -506,66 +491,66 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3FFE} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRC_NOCLKOUT = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_CLKOUT = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_NOCLKOUT = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low Voltage Programming Enable bit - {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled - {$define _LVP_OFF = $3FFD} // RB3 pin has digital I/O, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $3FFB} // Fail-Safe Clock Monitor is disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // IESO : Internal External Switchover bit - {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $3FF7} // Internal/External Switchover mode is disabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - // BOREN : Brown Out Reset Selection bits - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_NSLEEP = $3FEF} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $3FDF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $3FCF} // BOR disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled // CPD : Data Code Protection bit {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled - {$define _CPD_ON = $3FBF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // BOREN : Brown Out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRC_NOCLKOUT = $37FF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_CLKOUT = $2FFF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_NOCLKOUT = $27FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1FFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $17FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0FFF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $07FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled + {$define _LVP_OFF = $2FFF} // RB3 pin has digital I/O, HV on MCLR must be used for programming - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_HALF = $0700} // 0000h to 03FFh write protected, 0400h to 07FFh may be modified by EECON control - {$define _WRT_1FOURTH = $0701} // 0000h to 00FFh write protected, 0100h to 07FFh may be modified by EECON control - {$define _WRT_OFF = $0703} // Write protection off + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // BOR4V : Brown-out Reset Selection bit - {$define _BOR4V_BOR21V = $0700} // Brown-out Reset set to 2.1V - {$define _BOR4V_BOR40V = $0704} // Brown-out Reset set to 4.0V + {$define _BOR4V_BOR21V = $3EFF} // Brown-out Reset set to 2.1V + {$define _BOR4V_BOR40V = $3FFF} // Brown-out Reset set to 4.0V + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_HALF = $39FF} // 0000h to 03FFh write protected, 0400h to 07FFh may be modified by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 00FFh write protected, 0100h to 07FFh may be modified by EECON control + {$define _WRT_OFF = $3FFF} // Write protection off implementation end. diff --git a/PIC16F883.pas b/devices16/PIC16F883.pas similarity index 65% rename from PIC16F883.pas rename to devices16/PIC16F883.pas index dd7aab81..ddfc74a6 100644 --- a/PIC16F883.pas +++ b/devices16/PIC16F883.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -70,23 +75,23 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; PIR2_ULPWUIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GIV : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -96,7 +101,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -128,18 +134,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -149,7 +155,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -186,7 +192,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -194,20 +200,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; PIE2_ULPWUIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -232,15 +238,6 @@ interface SSPCON2_SEN : bit absolute SSPCON2.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -251,23 +248,7 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; VRCON : byte absolute $0097; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; @@ -287,24 +268,8 @@ interface TXSTA_TRMT : bit absolute TXSTA.1; TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - SPBRG_BRG7 : bit absolute SPBRG.7; - SPBRG_BRG6 : bit absolute SPBRG.6; - SPBRG_BRG5 : bit absolute SPBRG.5; - SPBRG_BRG4 : bit absolute SPBRG.4; - SPBRG_BRG3 : bit absolute SPBRG.3; - SPBRG_BRG2 : bit absolute SPBRG.2; - SPBRG_BRG1 : bit absolute SPBRG.1; - SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; - SPBRGH_BRG15 : bit absolute SPBRGH.7; - SPBRGH_BRG14 : bit absolute SPBRGH.6; - SPBRGH_BRG13 : bit absolute SPBRGH.5; - SPBRGH_BRG12 : bit absolute SPBRGH.4; - SPBRGH_BRG11 : bit absolute SPBRGH.3; - SPBRGH_BRG10 : bit absolute SPBRGH.2; - SPBRGH_BRG9 : bit absolute SPBRGH.1; - SPBRGH_BRG8 : bit absolute SPBRGH.0; - PWM1CON : byte absolute $009b; + SPBRGH : byte absolute $009A; + PWM1CON : byte absolute $009B; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -313,7 +278,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $009c; + ECCPAS : byte absolute $009C; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -322,15 +287,15 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - PSTRCON : byte absolute $009d; + PSTRCON : byte absolute $009D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; - ADCON1_ADFM : bit absolute ADCON1.6; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_VCFG1 : bit absolute ADCON1.5; ADCON1_VCFG0 : bit absolute ADCON1.4; WDTCON : byte absolute $0105; @@ -344,7 +309,7 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; CM2CON0 : byte absolute $0108; @@ -352,7 +317,7 @@ interface CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; CM2CON1 : byte absolute $0109; @@ -360,12 +325,23 @@ interface CM2CON1_MC2OUT : bit absolute CM2CON1.6; CM2CON1_C1RSEL : bit absolute CM2CON1.5; CM2CON1_C2RSEL : bit absolute CM2CON1.4; - CM2CON1_T1GSS : bit absolute CM2CON1.3; - CM2CON1_C2SYNC : bit absolute CM2CON1.2; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; SRCON : byte absolute $0185; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; @@ -373,14 +349,14 @@ interface SRCON_C2REN : bit absolute SRCON.4; SRCON_PULSS : bit absolute SRCON.3; SRCON_PULSR : bit absolute SRCON.2; - SRCON_FVREN : bit absolute SRCON.1; + SRCON_FVREN : bit absolute SRCON.0; BAUDCTL : byte absolute $0187; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; ANSEL : byte absolute $0188; ANSEL_ANS4 : bit absolute ANSEL.4; ANSEL_ANS3 : bit absolute ANSEL.3; @@ -394,73 +370,84 @@ interface ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-09F:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-10F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1, PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, SRCON, TRISB, BAUDCTL, ANSEL, ANSELH, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:FD'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:08'} // TRISE - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:FD'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '09D:1F'} // PSTRCON - {$SET_UNIMP_BITS '09F:B0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '107:FB'} // CM1CON0 - {$SET_UNIMP_BITS '108:FB'} // CM2CON0 - {$SET_UNIMP_BITS '109:F3'} // CM2CON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '185:FD'} // SRCON - {$SET_UNIMP_BITS '187:DB'} // BAUDCTL - {$SET_UNIMP_BITS '188:1F'} // ANSEL - {$SET_UNIMP_BITS '189:3F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : WDTCON, PORTB, CM1CON0 + // Bank 3 : SRCON, TRISB, BAUDCTL + {$SET_STATE_RAM '009-009:SFR:ALL'} // Bank 0 : PORTE + // Bank 1 : TRISE + // Bank 2 : CM2CON1 + // Bank 3 : ANSELH + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-09F:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '108-108:SFR'} // Bank 2 : CM2CON0 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '188-188:SFR'} // Bank 3 : ANSEL + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B0'} // ADCON1 bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:FD'} // SRCON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '188:1F'} // ANSEL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // ANSELH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -505,67 +492,67 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3FFE} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRC_NOCLKOUT = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_CLKOUT = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_NOCLKOUT = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low Voltage Programming Enable bit - {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled - {$define _LVP_OFF = $3FFD} // RB3 pin has digital I/O, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $3FFB} // Fail-Safe Clock Monitor is disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // IESO : Internal External Switchover bit - {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $3FF7} // Internal/External Switchover mode is disabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - // BOREN : Brown Out Reset Selection bits - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_NSLEEP = $3FEF} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $3FDF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $3FCF} // BOR disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled // CPD : Data Code Protection bit {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled - {$define _CPD_ON = $3FBF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // BOREN : Brown Out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRC_NOCLKOUT = $37FF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_CLKOUT = $2FFF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_NOCLKOUT = $27FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1FFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $17FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0FFF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $07FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled + {$define _LVP_OFF = $2FFF} // RB3 pin has digital I/O, HV on MCLR must be used for programming - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_HALF = $0700} // 0000h to 07FFh write protected, 0800h to 0FFFh may be modified by EECON control - {$define _WRT_1FOURTH = $0701} // 0000h to 03FFh write protected, 0400h to 0FFFh may be modified by EECON control - {$define _WRT_256 = $0702} // 0000h to 00FFh write protected, 0100h to 0FFFh may be modified by EECON control - {$define _WRT_OFF = $0703} // Write protection off + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // BOR4V : Brown-out Reset Selection bit - {$define _BOR4V_BOR21V = $0700} // Brown-out Reset set to 2.1V - {$define _BOR4V_BOR40V = $0704} // Brown-out Reset set to 4.0V + {$define _BOR4V_BOR21V = $3EFF} // Brown-out Reset set to 2.1V + {$define _BOR4V_BOR40V = $3FFF} // Brown-out Reset set to 4.0V + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_HALF = $39FF} // 0000h to 07FFh write protected, 0800h to 0FFFh may be modified by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 03FFh write protected, 0400h to 0FFFh may be modified by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write protected, 0100h to 0FFFh may be modified by EECON control + {$define _WRT_OFF = $3FFF} // Write protection off implementation end. diff --git a/PIC16F884.pas b/devices16/PIC16F884.pas similarity index 68% rename from PIC16F884.pas rename to devices16/PIC16F884.pas index c1dc6e3d..f0e5850e 100644 --- a/PIC16F884.pas +++ b/devices16/PIC16F884.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -82,23 +87,23 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; PIR2_ULPWUIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GIV : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -108,7 +113,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -140,18 +146,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -161,7 +167,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -210,7 +216,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -218,20 +224,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; PIE2_ULPWUIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -256,15 +262,6 @@ interface SSPCON2_SEN : bit absolute SSPCON2.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -275,23 +272,7 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; VRCON : byte absolute $0097; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; @@ -311,24 +292,8 @@ interface TXSTA_TRMT : bit absolute TXSTA.1; TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - SPBRG_BRG7 : bit absolute SPBRG.7; - SPBRG_BRG6 : bit absolute SPBRG.6; - SPBRG_BRG5 : bit absolute SPBRG.5; - SPBRG_BRG4 : bit absolute SPBRG.4; - SPBRG_BRG3 : bit absolute SPBRG.3; - SPBRG_BRG2 : bit absolute SPBRG.2; - SPBRG_BRG1 : bit absolute SPBRG.1; - SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; - SPBRGH_BRG15 : bit absolute SPBRGH.7; - SPBRGH_BRG14 : bit absolute SPBRGH.6; - SPBRGH_BRG13 : bit absolute SPBRGH.5; - SPBRGH_BRG12 : bit absolute SPBRGH.4; - SPBRGH_BRG11 : bit absolute SPBRGH.3; - SPBRGH_BRG10 : bit absolute SPBRGH.2; - SPBRGH_BRG9 : bit absolute SPBRGH.1; - SPBRGH_BRG8 : bit absolute SPBRGH.0; - PWM1CON : byte absolute $009b; + SPBRGH : byte absolute $009A; + PWM1CON : byte absolute $009B; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -337,7 +302,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $009c; + ECCPAS : byte absolute $009C; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -346,15 +311,15 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - PSTRCON : byte absolute $009d; + PSTRCON : byte absolute $009D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; - ADCON1_ADFM : bit absolute ADCON1.6; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_VCFG1 : bit absolute ADCON1.5; ADCON1_VCFG0 : bit absolute ADCON1.4; WDTCON : byte absolute $0105; @@ -368,7 +333,7 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; CM2CON0 : byte absolute $0108; @@ -376,7 +341,7 @@ interface CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; CM2CON1 : byte absolute $0109; @@ -384,12 +349,23 @@ interface CM2CON1_MC2OUT : bit absolute CM2CON1.6; CM2CON1_C1RSEL : bit absolute CM2CON1.5; CM2CON1_C2RSEL : bit absolute CM2CON1.4; - CM2CON1_T1GSS : bit absolute CM2CON1.3; - CM2CON1_C2SYNC : bit absolute CM2CON1.2; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; SRCON : byte absolute $0185; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; @@ -397,14 +373,14 @@ interface SRCON_C2REN : bit absolute SRCON.4; SRCON_PULSS : bit absolute SRCON.3; SRCON_PULSR : bit absolute SRCON.2; - SRCON_FVREN : bit absolute SRCON.1; + SRCON_FVREN : bit absolute SRCON.0; BAUDCTL : byte absolute $0187; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; ANSEL : byte absolute $0188; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; @@ -421,70 +397,77 @@ interface ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-09F:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-10F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1, PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, SRCON, TRISB, BAUDCTL, ANSEL, ANSELH, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:FD'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:FD'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '09D:1F'} // PSTRCON - {$SET_UNIMP_BITS '09F:B0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '107:FB'} // CM1CON0 - {$SET_UNIMP_BITS '108:FB'} // CM2CON0 - {$SET_UNIMP_BITS '109:F3'} // CM2CON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '185:FD'} // SRCON - {$SET_UNIMP_BITS '187:DB'} // BAUDCTL - {$SET_UNIMP_BITS '189:3F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-009:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE + // Bank 2 : WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1 + // Bank 3 : SRCON, TRISB, BAUDCTL, ANSEL, ANSELH + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-09F:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '120-16F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B0'} // ADCON1 bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:FD'} // SRCON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // ANSELH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -542,67 +525,67 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3FFE} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRC_NOCLKOUT = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_CLKOUT = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_NOCLKOUT = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low Voltage Programming Enable bit - {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled - {$define _LVP_OFF = $3FFD} // RB3 pin has digital I/O, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $3FFB} // Fail-Safe Clock Monitor is disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // IESO : Internal External Switchover bit - {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $3FF7} // Internal/External Switchover mode is disabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - // BOREN : Brown Out Reset Selection bits - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_NSLEEP = $3FEF} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $3FDF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $3FCF} // BOR disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled // CPD : Data Code Protection bit {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled - {$define _CPD_ON = $3FBF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // BOREN : Brown Out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRC_NOCLKOUT = $37FF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_CLKOUT = $2FFF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_NOCLKOUT = $27FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1FFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $17FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0FFF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $07FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled + {$define _LVP_OFF = $2FFF} // RB3 pin has digital I/O, HV on MCLR must be used for programming - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_HALF = $0700} // 0000h to 07FFh write protected, 0800h to 0FFFh may be modified by EECON control - {$define _WRT_1FOURTH = $0701} // 0000h to 03FFh write protected, 0400h to 0FFFh may be modified by EECON control - {$define _WRT_256 = $0702} // 0000h to 00FFh write protected, 0100h to 0FFFh may be modified by EECON control - {$define _WRT_OFF = $0703} // Write protection off + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // BOR4V : Brown-out Reset Selection bit - {$define _BOR4V_BOR21V = $0700} // Brown-out Reset set to 2.1V - {$define _BOR4V_BOR40V = $0704} // Brown-out Reset set to 4.0V + {$define _BOR4V_BOR21V = $3EFF} // Brown-out Reset set to 2.1V + {$define _BOR4V_BOR40V = $3FFF} // Brown-out Reset set to 4.0V + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_HALF = $39FF} // 0000h to 07FFh write protected, 0800h to 0FFFh may be modified by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 03FFh write protected, 0400h to 0FFFh may be modified by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write protected, 0100h to 0FFFh may be modified by EECON control + {$define _WRT_OFF = $3FFF} // Write protection off implementation end. diff --git a/PIC16F886.pas b/devices16/PIC16F886.pas similarity index 65% rename from PIC16F886.pas rename to devices16/PIC16F886.pas index ee584173..83cd44b7 100644 --- a/PIC16F886.pas +++ b/devices16/PIC16F886.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -70,23 +75,23 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; PIR2_ULPWUIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GIV : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -96,7 +101,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -128,18 +134,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -149,7 +155,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -186,7 +192,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -194,20 +200,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; PIE2_ULPWUIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -232,15 +238,6 @@ interface SSPCON2_SEN : bit absolute SSPCON2.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -251,23 +248,7 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; VRCON : byte absolute $0097; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; @@ -287,24 +268,8 @@ interface TXSTA_TRMT : bit absolute TXSTA.1; TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - SPBRG_BRG7 : bit absolute SPBRG.7; - SPBRG_BRG6 : bit absolute SPBRG.6; - SPBRG_BRG5 : bit absolute SPBRG.5; - SPBRG_BRG4 : bit absolute SPBRG.4; - SPBRG_BRG3 : bit absolute SPBRG.3; - SPBRG_BRG2 : bit absolute SPBRG.2; - SPBRG_BRG1 : bit absolute SPBRG.1; - SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; - SPBRGH_BRG15 : bit absolute SPBRGH.7; - SPBRGH_BRG14 : bit absolute SPBRGH.6; - SPBRGH_BRG13 : bit absolute SPBRGH.5; - SPBRGH_BRG12 : bit absolute SPBRGH.4; - SPBRGH_BRG11 : bit absolute SPBRGH.3; - SPBRGH_BRG10 : bit absolute SPBRGH.2; - SPBRGH_BRG9 : bit absolute SPBRGH.1; - SPBRGH_BRG8 : bit absolute SPBRGH.0; - PWM1CON : byte absolute $009b; + SPBRGH : byte absolute $009A; + PWM1CON : byte absolute $009B; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -313,7 +278,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $009c; + ECCPAS : byte absolute $009C; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -322,15 +287,15 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - PSTRCON : byte absolute $009d; + PSTRCON : byte absolute $009D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; - ADCON1_ADFM : bit absolute ADCON1.6; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_VCFG1 : bit absolute ADCON1.5; ADCON1_VCFG0 : bit absolute ADCON1.4; WDTCON : byte absolute $0105; @@ -344,7 +309,7 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; CM2CON0 : byte absolute $0108; @@ -352,7 +317,7 @@ interface CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; CM2CON1 : byte absolute $0109; @@ -360,12 +325,23 @@ interface CM2CON1_MC2OUT : bit absolute CM2CON1.6; CM2CON1_C1RSEL : bit absolute CM2CON1.5; CM2CON1_C2RSEL : bit absolute CM2CON1.4; - CM2CON1_T1GSS : bit absolute CM2CON1.3; - CM2CON1_C2SYNC : bit absolute CM2CON1.2; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; SRCON : byte absolute $0185; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; @@ -373,14 +349,14 @@ interface SRCON_C2REN : bit absolute SRCON.4; SRCON_PULSS : bit absolute SRCON.3; SRCON_PULSR : bit absolute SRCON.2; - SRCON_FVREN : bit absolute SRCON.1; + SRCON_FVREN : bit absolute SRCON.0; BAUDCTL : byte absolute $0187; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; ANSEL : byte absolute $0188; ANSEL_ANS4 : bit absolute ANSEL.4; ANSEL_ANS3 : bit absolute ANSEL.3; @@ -394,73 +370,84 @@ interface ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01F:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-09F:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-10F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1, PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, SRCON, TRISB, BAUDCTL, ANSEL, ANSELH, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:FD'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:08'} // TRISE - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:FD'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '09D:1F'} // PSTRCON - {$SET_UNIMP_BITS '09F:B0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '107:FB'} // CM1CON0 - {$SET_UNIMP_BITS '108:FB'} // CM2CON0 - {$SET_UNIMP_BITS '109:F3'} // CM2CON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '185:FD'} // SRCON - {$SET_UNIMP_BITS '187:DB'} // BAUDCTL - {$SET_UNIMP_BITS '188:1F'} // ANSEL - {$SET_UNIMP_BITS '189:3F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-007:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC + // Bank 1 : TRISA, TRISB, TRISC + // Bank 2 : WDTCON, PORTB, CM1CON0 + // Bank 3 : SRCON, TRISB, BAUDCTL + {$SET_STATE_RAM '009-009:SFR:ALL'} // Bank 0 : PORTE + // Bank 1 : TRISE + // Bank 2 : CM2CON1 + // Bank 3 : ANSELH + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-09F:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '108-108:SFR'} // Bank 2 : CM2CON0 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '188-188:SFR'} // Bank 3 : ANSEL + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B0'} // ADCON1 bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:FD'} // SRCON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '188:1F'} // ANSEL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // ANSELH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -505,67 +492,67 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3FFE} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRC_NOCLKOUT = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_CLKOUT = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_NOCLKOUT = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low Voltage Programming Enable bit - {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled - {$define _LVP_OFF = $3FFD} // RB3 pin has digital I/O, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $3FFB} // Fail-Safe Clock Monitor is disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // IESO : Internal External Switchover bit - {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $3FF7} // Internal/External Switchover mode is disabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - // BOREN : Brown Out Reset Selection bits - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_NSLEEP = $3FEF} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $3FDF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $3FCF} // BOR disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled // CPD : Data Code Protection bit {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled - {$define _CPD_ON = $3FBF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // BOREN : Brown Out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRC_NOCLKOUT = $37FF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_CLKOUT = $2FFF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_NOCLKOUT = $27FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1FFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $17FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0FFF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $07FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled + {$define _LVP_OFF = $2FFF} // RB3 pin has digital I/O, HV on MCLR must be used for programming - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_HALF = $0700} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control - {$define _WRT_1FOURTH = $0701} // 0000h to 07FFh write protected, 0800h to 1FFFh may be modified by EECON control - {$define _WRT_256 = $0702} // 0000h to 00FFh write protected, 0100h to 1FFFh may be modified by EECON control - {$define _WRT_OFF = $0703} // Write protection off + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // BOR4V : Brown-out Reset Selection bit - {$define _BOR4V_BOR21V = $0700} // Brown-out Reset set to 2.1V - {$define _BOR4V_BOR40V = $0704} // Brown-out Reset set to 4.0V + {$define _BOR4V_BOR21V = $3EFF} // Brown-out Reset set to 2.1V + {$define _BOR4V_BOR40V = $3FFF} // Brown-out Reset set to 4.0V + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_HALF = $39FF} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write protected, 0800h to 1FFFh may be modified by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write protected, 0100h to 1FFFh may be modified by EECON control + {$define _WRT_OFF = $3FFF} // Write protection off implementation end. diff --git a/PIC16F887.pas b/devices16/PIC16F887.pas similarity index 68% rename from PIC16F887.pas rename to devices16/PIC16F887.pas index 2bdc576d..7afc034a 100644 --- a/PIC16F887.pas +++ b/devices16/PIC16F887.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_T0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_T0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; PIR1_TXIF : bit absolute PIR1.4; @@ -82,23 +87,23 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; + PIR2 : byte absolute $000D; PIR2_OSFIF : bit absolute PIR2.7; PIR2_C2IF : bit absolute PIR2.6; PIR2_C1IF : bit absolute PIR2.5; PIR2_EEIF : bit absolute PIR2.4; PIR2_BCLIF : bit absolute PIR2.3; PIR2_ULPWUIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GIV : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -108,7 +113,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -140,18 +146,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_DC2B1 : bit absolute CCP2CON.5; CCP2CON_DC2B0 : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADCS1 : bit absolute ADCON0.7; ADCON0_ADCS0 : bit absolute ADCON0.6; ADCON0_CHS3 : bit absolute ADCON0.5; @@ -161,7 +167,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -210,7 +216,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; PIE1_TXIE : bit absolute PIE1.4; @@ -218,20 +224,20 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; + PIE2 : byte absolute $008D; PIE2_OSFIE : bit absolute PIE2.7; PIE2_C2IE : bit absolute PIE2.6; PIE2_C1IE : bit absolute PIE2.5; PIE2_EEIE : bit absolute PIE2.4; PIE2_BCLIE : bit absolute PIE2.3; PIE2_ULPWUIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_ULPWUE : bit absolute PCON.5; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -256,15 +262,6 @@ interface SSPCON2_SEN : bit absolute SSPCON2.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; - SSPMSK : byte absolute $0093; - SSPMSK_MSK7 : bit absolute SSPMSK.7; - SSPMSK_MSK6 : bit absolute SSPMSK.6; - SSPMSK_MSK5 : bit absolute SSPMSK.5; - SSPMSK_MSK4 : bit absolute SSPMSK.4; - SSPMSK_MSK3 : bit absolute SSPMSK.3; - SSPMSK_MSK2 : bit absolute SSPMSK.2; - SSPMSK_MSK1 : bit absolute SSPMSK.1; - SSPMSK_MSK0 : bit absolute SSPMSK.0; SSPSTAT : byte absolute $0094; SSPSTAT_SMP : bit absolute SSPSTAT.7; SSPSTAT_CKE : bit absolute SSPSTAT.6; @@ -275,23 +272,7 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; - IOCB_IOCB3 : bit absolute IOCB.3; - IOCB_IOCB2 : bit absolute IOCB.2; - IOCB_IOCB1 : bit absolute IOCB.1; - IOCB_IOCB0 : bit absolute IOCB.0; VRCON : byte absolute $0097; VRCON_VREN : bit absolute VRCON.7; VRCON_VROE : bit absolute VRCON.6; @@ -311,24 +292,8 @@ interface TXSTA_TRMT : bit absolute TXSTA.1; TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - SPBRG_BRG7 : bit absolute SPBRG.7; - SPBRG_BRG6 : bit absolute SPBRG.6; - SPBRG_BRG5 : bit absolute SPBRG.5; - SPBRG_BRG4 : bit absolute SPBRG.4; - SPBRG_BRG3 : bit absolute SPBRG.3; - SPBRG_BRG2 : bit absolute SPBRG.2; - SPBRG_BRG1 : bit absolute SPBRG.1; - SPBRG_BRG0 : bit absolute SPBRG.0; - SPBRGH : byte absolute $009a; - SPBRGH_BRG15 : bit absolute SPBRGH.7; - SPBRGH_BRG14 : bit absolute SPBRGH.6; - SPBRGH_BRG13 : bit absolute SPBRGH.5; - SPBRGH_BRG12 : bit absolute SPBRGH.4; - SPBRGH_BRG11 : bit absolute SPBRGH.3; - SPBRGH_BRG10 : bit absolute SPBRGH.2; - SPBRGH_BRG9 : bit absolute SPBRGH.1; - SPBRGH_BRG8 : bit absolute SPBRGH.0; - PWM1CON : byte absolute $009b; + SPBRGH : byte absolute $009A; + PWM1CON : byte absolute $009B; PWM1CON_PRSEN : bit absolute PWM1CON.7; PWM1CON_PDC6 : bit absolute PWM1CON.6; PWM1CON_PDC5 : bit absolute PWM1CON.5; @@ -337,7 +302,7 @@ interface PWM1CON_PDC2 : bit absolute PWM1CON.2; PWM1CON_PDC1 : bit absolute PWM1CON.1; PWM1CON_PDC0 : bit absolute PWM1CON.0; - ECCPAS : byte absolute $009c; + ECCPAS : byte absolute $009C; ECCPAS_ECCPASE : bit absolute ECCPAS.7; ECCPAS_ECCPAS2 : bit absolute ECCPAS.6; ECCPAS_ECCPAS1 : bit absolute ECCPAS.5; @@ -346,15 +311,15 @@ interface ECCPAS_PSSAC0 : bit absolute ECCPAS.2; ECCPAS_PSSBD1 : bit absolute ECCPAS.1; ECCPAS_PSSBD0 : bit absolute ECCPAS.0; - PSTRCON : byte absolute $009d; + PSTRCON : byte absolute $009D; PSTRCON_STRSYNC : bit absolute PSTRCON.4; PSTRCON_STRD : bit absolute PSTRCON.3; PSTRCON_STRC : bit absolute PSTRCON.2; PSTRCON_STRB : bit absolute PSTRCON.1; PSTRCON_STRA : bit absolute PSTRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; - ADCON1_ADFM : bit absolute ADCON1.6; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; + ADCON1_ADFM : bit absolute ADCON1.7; ADCON1_VCFG1 : bit absolute ADCON1.5; ADCON1_VCFG0 : bit absolute ADCON1.4; WDTCON : byte absolute $0105; @@ -368,7 +333,7 @@ interface CM1CON0_C1OUT : bit absolute CM1CON0.6; CM1CON0_C1OE : bit absolute CM1CON0.5; CM1CON0_C1POL : bit absolute CM1CON0.4; - CM1CON0_C1R : bit absolute CM1CON0.3; + CM1CON0_C1R : bit absolute CM1CON0.2; CM1CON0_C1CH1 : bit absolute CM1CON0.1; CM1CON0_C1CH0 : bit absolute CM1CON0.0; CM2CON0 : byte absolute $0108; @@ -376,7 +341,7 @@ interface CM2CON0_C2OUT : bit absolute CM2CON0.6; CM2CON0_C2OE : bit absolute CM2CON0.5; CM2CON0_C2POL : bit absolute CM2CON0.4; - CM2CON0_C2R : bit absolute CM2CON0.3; + CM2CON0_C2R : bit absolute CM2CON0.2; CM2CON0_C2CH1 : bit absolute CM2CON0.1; CM2CON0_C2CH0 : bit absolute CM2CON0.0; CM2CON1 : byte absolute $0109; @@ -384,12 +349,23 @@ interface CM2CON1_MC2OUT : bit absolute CM2CON1.6; CM2CON1_C1RSEL : bit absolute CM2CON1.5; CM2CON1_C2RSEL : bit absolute CM2CON1.4; - CM2CON1_T1GSS : bit absolute CM2CON1.3; - CM2CON1_C2SYNC : bit absolute CM2CON1.2; - EEDATA : byte absolute $010c; - EEADR : byte absolute $010d; - EEDATH : byte absolute $010e; - EEADRH : byte absolute $010f; + CM2CON1_T1GSS : bit absolute CM2CON1.1; + CM2CON1_C2SYNC : bit absolute CM2CON1.0; + EEDATA : byte absolute $010C; + EEADR : byte absolute $010D; + EEDATH : byte absolute $010E; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EEADRH : byte absolute $010F; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; SRCON : byte absolute $0185; SRCON_SR1 : bit absolute SRCON.7; SRCON_SR0 : bit absolute SRCON.6; @@ -397,14 +373,14 @@ interface SRCON_C2REN : bit absolute SRCON.4; SRCON_PULSS : bit absolute SRCON.3; SRCON_PULSR : bit absolute SRCON.2; - SRCON_FVREN : bit absolute SRCON.1; + SRCON_FVREN : bit absolute SRCON.0; BAUDCTL : byte absolute $0187; - BAUDCTL_ABDOVF : bit absolute BAUDCTL.6; - BAUDCTL_RCIDL : bit absolute BAUDCTL.5; + BAUDCTL_ABDOVF : bit absolute BAUDCTL.7; + BAUDCTL_RCIDL : bit absolute BAUDCTL.6; BAUDCTL_SCKP : bit absolute BAUDCTL.4; BAUDCTL_BRG16 : bit absolute BAUDCTL.3; - BAUDCTL_WUE : bit absolute BAUDCTL.2; - BAUDCTL_ABDEN : bit absolute BAUDCTL.1; + BAUDCTL_WUE : bit absolute BAUDCTL.1; + BAUDCTL_ABDEN : bit absolute BAUDCTL.0; ANSEL : byte absolute $0188; ANSEL_ANS7 : bit absolute ANSEL.7; ANSEL_ANS6 : bit absolute ANSEL.6; @@ -421,70 +397,77 @@ interface ANSELH_ANS10 : bit absolute ANSELH.2; ANSELH_ANS9 : bit absolute ANSELH.1; ANSELH_ANS8 : bit absolute ANSELH.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-09F:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPMSK, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-10F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1, PCLATH, INTCON, EEDATA, EEADR, EEDATH, EEADRH - {$SET_STATE_RAM '110-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, SRCON, TRISB, BAUDCTL, ANSEL, ANSELH, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} - - - // -- Define mirrored registers -- - - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON - - - // -- Initial values -- - - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00C:7F'} // PIR1 - {$SET_UNIMP_BITS '00D:FD'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08C:7F'} // PIE1 - {$SET_UNIMP_BITS '08D:FD'} // PIE2 - {$SET_UNIMP_BITS '08E:33'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '093:00'} // SSPMSK - {$SET_UNIMP_BITS '09D:1F'} // PSTRCON - {$SET_UNIMP_BITS '09F:B0'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '107:FB'} // CM1CON0 - {$SET_UNIMP_BITS '108:FB'} // CM2CON0 - {$SET_UNIMP_BITS '109:F3'} // CM2CON1 - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '185:FD'} // SRCON - {$SET_UNIMP_BITS '187:DB'} // BAUDCTL - {$SET_UNIMP_BITS '189:3F'} // ANSELH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-009:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE + // Bank 2 : WDTCON, PORTB, CM1CON0, CM2CON0, CM2CON1 + // Bank 3 : SRCON, TRISB, BAUDCTL, ANSEL, ANSELH + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATA, EEADR + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-09F:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, SSPCON2, PR2, SSPADD, SSPSTAT, WPUB, IOCB, VRCON, TXSTA, SPBRG, SPBRGH, PWM1CON, ECCPAS, PSTRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '110-11F:GPR'} + {$SET_STATE_RAM '190-19F:GPR'} + + + // -- Define mapped RAM -- + + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:7F'} // PIR1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:7F'} // PIE1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:33'} // PCON bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:1F'} // PSTRCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B0'} // ADCON1 bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '107:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '108:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '185:FD'} // SRCON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:DB'} // BAUDCTL bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // ANSELH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -542,67 +525,67 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $3FFE} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_EXTRC_NOCLKOUT = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_CLKOUT = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_INTRC_NOCLKOUT = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - // LVP : Low Voltage Programming Enable bit - {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled - {$define _LVP_OFF = $3FFD} // RB3 pin has digital I/O, HV on MCLR must be used for programming + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $3FFB} // Fail-Safe Clock Monitor is disabled + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // IESO : Internal External Switchover bit - {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $3FF7} // Internal/External Switchover mode is disabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD - // BOREN : Brown Out Reset Selection bits - {$define _BOREN_ON = $3FFF} // BOR enabled - {$define _BOREN_NSLEEP = $3FEF} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $3FDF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $3FCF} // BOR disabled + // CP : Code Protection bit + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled // CPD : Data Code Protection bit {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled - {$define _CPD_ON = $3FBF} // Data memory code protection is enabled - - // CP : Code Protection bit - {$define _CP_OFF = $3FFF} // Program memory code protection is disabled - {$define _CP_ON = $3F7F} // Program memory code protection is enabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $3EFF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // BOREN : Brown Out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // PWRTE : Power-up Timer Enable bit - {$define _PWRTE_OFF = $3FFF} // PWRT disabled - {$define _PWRTE_ON = $3DFF} // PWRT enabled + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $3FFF} // WDT enabled - {$define _WDTE_OFF = $3BFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRC_CLKOUT = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_EXTRC_NOCLKOUT = $37FF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_CLKOUT = $2FFF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_INTRC_NOCLKOUT = $27FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN - {$define _FOSC_EC = $1FFF} // EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN - {$define _FOSC_HS = $17FF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_XT = $0FFF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN - {$define _FOSC_LP = $07FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // RB3/PGM pin has PGM function, low voltage programming enabled + {$define _LVP_OFF = $2FFF} // RB3 pin has digital I/O, HV on MCLR must be used for programming - // WRT : Flash Program Memory Self Write Enable bits - {$define _WRT_HALF = $0700} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control - {$define _WRT_1FOURTH = $0701} // 0000h to 07FFh write protected, 0800h to 1FFFh may be modified by EECON control - {$define _WRT_256 = $0702} // 0000h to 00FFh write protected, 0100h to 1FFFh may be modified by EECON control - {$define _WRT_OFF = $0703} // Write protection off + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $1FFF} // In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger // BOR4V : Brown-out Reset Selection bit - {$define _BOR4V_BOR21V = $0700} // Brown-out Reset set to 2.1V - {$define _BOR4V_BOR40V = $0704} // Brown-out Reset set to 4.0V + {$define _BOR4V_BOR21V = $3EFF} // Brown-out Reset set to 2.1V + {$define _BOR4V_BOR40V = $3FFF} // Brown-out Reset set to 4.0V + + // WRT : Flash Program Memory Self Write Enable bits + {$define _WRT_HALF = $39FF} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write protected, 0800h to 1FFFh may be modified by EECON control + {$define _WRT_256 = $3DFF} // 0000h to 00FFh write protected, 0100h to 1FFFh may be modified by EECON control + {$define _WRT_OFF = $3FFF} // Write protection off implementation end. diff --git a/PIC16F913.pas b/devices16/PIC16F913.pas similarity index 62% rename from PIC16F913.pas rename to devices16/PIC16F913.pas index f4d77452..064232ff 100644 --- a/PIC16F913.pas +++ b/devices16/PIC16F913.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,21 +76,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_C2IF : bit absolute PIR2.5; - PIR2_C1IF : bit absolute PIR2.4; - PIR2_LCDIF : bit absolute PIR2.3; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_LCDIF : bit absolute PIR2.4; PIR2_LVDIF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GE : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -95,7 +100,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -125,9 +131,9 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG1 : bit absolute ADCON0.6; ADCON0_VCFG0 : bit absolute ADCON0.5; @@ -137,7 +143,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -174,7 +180,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -183,17 +189,17 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_C2IE : bit absolute PIE2.5; - PIE2_C1IE : bit absolute PIE2.4; - PIE2_LCDIE : bit absolute PIE2.3; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_LCDIE : bit absolute PIE2.4; PIE2_LVDIE : bit absolute PIE2.2; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -208,11 +214,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; ANSEL : byte absolute $0091; - ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -225,19 +226,11 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; + IOCB_IOCB3 : bit absolute IOCB.7; + IOCB_IOCB2 : bit absolute IOCB.6; + IOCB_IOCB1 : bit absolute IOCB.5; + IOCB_IOCB0 : bit absolute IOCB.4; CMCON1 : byte absolute $0097; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; @@ -246,11 +239,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON0 : byte absolute $009c; + CMCON0 : byte absolute $009C; CMCON0_C2OUT : bit absolute CMCON0.7; CMCON0_C1OUT : bit absolute CMCON0.6; CMCON0_C2INV : bit absolute CMCON0.5; @@ -259,15 +252,15 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - VRCON : byte absolute $009d; - VRCON_VREN : bit absolute VRCON.6; + VRCON : byte absolute $009D; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -301,32 +294,16 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - EEDATL : byte absolute $010c; - EEDATL_EEDATL7 : bit absolute EEDATL.7; - EEDATL_EEDATL6 : bit absolute EEDATL.6; - EEDATL_EEDATL5 : bit absolute EEDATL.5; - EEDATL_EEDATL4 : bit absolute EEDATL.4; - EEDATL_EEDATL3 : bit absolute EEDATL.3; - EEDATL_EEDATL2 : bit absolute EEDATL.2; - EEDATL_EEDATL1 : bit absolute EEDATL.1; - EEDATL_EEDATL0 : bit absolute EEDATL.0; - EEADRL : byte absolute $010d; - EEADRL_EEADRL7 : bit absolute EEADRL.7; - EEADRL_EEADRL6 : bit absolute EEADRL.6; - EEADRL_EEADRL5 : bit absolute EEADRL.5; - EEADRL_EEADRL4 : bit absolute EEADRL.4; - EEADRL_EEADRL3 : bit absolute EEADRL.3; - EEADRL_EEADRL2 : bit absolute EEADRL.2; - EEADRL_EEADRL1 : bit absolute EEADRL.1; - EEADRL_EEADRL0 : bit absolute EEADRL.0; - EEDATH : byte absolute $010e; + EEDATL : byte absolute $010C; + EEADRL : byte absolute $010D; + EEDATH : byte absolute $010E; EEDATH_EEDATH5 : bit absolute EEDATH.5; EEDATH_EEDATH4 : bit absolute EEDATH.4; EEDATH_EEDATH3 : bit absolute EEDATH.3; EEDATH_EEDATH2 : bit absolute EEDATH.2; EEDATH_EEDATH1 : bit absolute EEDATH.1; EEDATH_EEDATH0 : bit absolute EEDATH.0; - EEADRH : byte absolute $010f; + EEADRH : byte absolute $010F; EEADRH_EEADRH4 : bit absolute EEADRH.4; EEADRH_EEADRH3 : bit absolute EEADRH.3; EEADRH_EEADRH2 : bit absolute EEADRH.2; @@ -355,79 +332,91 @@ interface LCDDATA6 : byte absolute $0116; LCDDATA7 : byte absolute $0117; LCDDATA9 : byte absolute $0119; - LCDDATA10 : byte absolute $011a; - LCDSE0 : byte absolute $011c; - LCDSE1 : byte absolute $011d; - EECON1 : byte absolute $018c; + LCDDATA10 : byte absolute $011A; + LCDSE0 : byte absolute $011C; + LCDSE1 : byte absolute $011D; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01A:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-099:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON0, VRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-111:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, LCDCON, LCDPS, LVDCON, PCLATH, INTCON, EEDATL, EEADRL, EEDATH, EEADRH, LCDDATA0, LCDDATA1 - {$SET_STATE_RAM '113-114:SFR'} // LCDDATA3, LCDDATA4 - {$SET_STATE_RAM '116-117:SFR'} // LCDDATA6, LCDDATA7 - {$SET_STATE_RAM '119-11A:SFR'} // LCDDATA9, LCDDATA10 - {$SET_STATE_RAM '11C-11D:SFR'} // LCDSE0, LCDSE1 - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATL, EEADRL + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08E-099:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON0, VRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '107-109:SFR'} // Bank 2 : LCDCON, LCDPS, LVDCON + {$SET_STATE_RAM '10E-111:SFR'} // Bank 2 : EEDATH, EEADRH, LCDDATA0, LCDDATA1 + {$SET_STATE_RAM '113-114:SFR'} // Bank 2 : LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : LCDDATA6, LCDDATA7 + {$SET_STATE_RAM '119-11A:SFR'} // Bank 2 : LCDDATA9, LCDDATA10 + {$SET_STATE_RAM '11C-11D:SFR'} // Bank 2 : LCDSE0, LCDSE1 + {$SET_STATE_RAM '120-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:F4'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '089:08'} // TRISE - {$SET_UNIMP_BITS '08D:F4'} // PIE2 - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '091:1F'} // ANSEL - {$SET_UNIMP_BITS '096:F0'} // IOCB - {$SET_UNIMP_BITS '097:03'} // CMCON1 - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:AF'} // VRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:37'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F4'} // PIR2 bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F4'} // PIE2 bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:1F'} // ANSEL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -472,53 +461,53 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - // IESO : Internal External Switchover bit - {$define _IESO_ON = $1FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $1FFB} // Internal/External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOR enabled - {$define _BOREN_NSLEEP = $1FF7} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $1FEF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $1FE7} // BOR disabled + // PWRTE : Power Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory code protection is disabled - {$define _CPD_ON = $1FDF} // Data memory code protection is enabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power Up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $2FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger implementation end. diff --git a/PIC16F914.pas b/devices16/PIC16F914.pas similarity index 66% rename from PIC16F914.pas rename to devices16/PIC16F914.pas index 2351702b..e9deab51 100644 --- a/PIC16F914.pas +++ b/devices16/PIC16F914.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,22 +88,22 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_C2IF : bit absolute PIR2.5; - PIR2_C1IF : bit absolute PIR2.4; - PIR2_LCDIF : bit absolute PIR2.3; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_LCDIF : bit absolute PIR2.4; PIR2_LVDIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GE : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -108,7 +113,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -138,18 +144,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG1 : bit absolute ADCON0.6; ADCON0_VCFG0 : bit absolute ADCON0.5; @@ -159,7 +165,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -208,7 +214,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -217,18 +223,18 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_C2IE : bit absolute PIE2.5; - PIE2_C1IE : bit absolute PIE2.4; - PIE2_LCDIE : bit absolute PIE2.3; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_LCDIE : bit absolute PIE2.4; PIE2_LVDIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -243,14 +249,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; ANSEL : byte absolute $0091; - ANSEL_ANS7 : bit absolute ANSEL.7; - ANSEL_ANS6 : bit absolute ANSEL.6; - ANSEL_ANS5 : bit absolute ANSEL.5; - ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -263,19 +261,11 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; + IOCB_IOCB3 : bit absolute IOCB.7; + IOCB_IOCB2 : bit absolute IOCB.6; + IOCB_IOCB1 : bit absolute IOCB.5; + IOCB_IOCB0 : bit absolute IOCB.4; CMCON1 : byte absolute $0097; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; @@ -284,11 +274,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON0 : byte absolute $009c; + CMCON0 : byte absolute $009C; CMCON0_C2OUT : bit absolute CMCON0.7; CMCON0_C1OUT : bit absolute CMCON0.6; CMCON0_C2INV : bit absolute CMCON0.5; @@ -297,15 +287,15 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - VRCON : byte absolute $009d; - VRCON_VREN : bit absolute VRCON.6; + VRCON : byte absolute $009D; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -339,32 +329,16 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - EEDATL : byte absolute $010c; - EEDATL_EEDATL7 : bit absolute EEDATL.7; - EEDATL_EEDATL6 : bit absolute EEDATL.6; - EEDATL_EEDATL5 : bit absolute EEDATL.5; - EEDATL_EEDATL4 : bit absolute EEDATL.4; - EEDATL_EEDATL3 : bit absolute EEDATL.3; - EEDATL_EEDATL2 : bit absolute EEDATL.2; - EEDATL_EEDATL1 : bit absolute EEDATL.1; - EEDATL_EEDATL0 : bit absolute EEDATL.0; - EEADRL : byte absolute $010d; - EEADRL_EEADRL7 : bit absolute EEADRL.7; - EEADRL_EEADRL6 : bit absolute EEADRL.6; - EEADRL_EEADRL5 : bit absolute EEADRL.5; - EEADRL_EEADRL4 : bit absolute EEADRL.4; - EEADRL_EEADRL3 : bit absolute EEADRL.3; - EEADRL_EEADRL2 : bit absolute EEADRL.2; - EEADRL_EEADRL1 : bit absolute EEADRL.1; - EEADRL_EEADRL0 : bit absolute EEADRL.0; - EEDATH : byte absolute $010e; + EEDATL : byte absolute $010C; + EEADRL : byte absolute $010D; + EEDATH : byte absolute $010E; EEDATH_EEDATH5 : bit absolute EEDATH.5; EEDATH_EEDATH4 : bit absolute EEDATH.4; EEDATH_EEDATH3 : bit absolute EEDATH.3; EEDATH_EEDATH2 : bit absolute EEDATH.2; EEDATH_EEDATH1 : bit absolute EEDATH.1; EEDATH_EEDATH0 : bit absolute EEDATH.0; - EEADRH : byte absolute $010f; + EEADRH : byte absolute $010F; EEADRH_EEADRH4 : bit absolute EEADRH.4; EEADRH_EEADRH3 : bit absolute EEADRH.3; EEADRH_EEADRH2 : bit absolute EEADRH.2; @@ -404,74 +378,86 @@ interface LCDDATA7 : byte absolute $0117; LCDDATA8 : byte absolute $0118; LCDDATA9 : byte absolute $0119; - LCDDATA10 : byte absolute $011a; - LCDDATA11 : byte absolute $011b; - LCDSE0 : byte absolute $011c; - LCDSE1 : byte absolute $011d; - LCDSE2 : byte absolute $011e; - EECON1 : byte absolute $018c; + LCDDATA10 : byte absolute $011A; + LCDDATA11 : byte absolute $011B; + LCDSE0 : byte absolute $011C; + LCDSE1 : byte absolute $011D; + LCDSE2 : byte absolute $011E; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-099:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON0, VRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-11E:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, LCDCON, LCDPS, LVDCON, PCLATH, INTCON, EEDATL, EEADRL, EEDATH, EEADRH, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDSE0, LCDSE1, LCDSE2 - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '1F0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATL, EEADRL + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-099:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON0, VRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '107-109:SFR'} // Bank 2 : LCDCON, LCDPS, LVDCON + {$SET_STATE_RAM '10E-11E:SFR'} // Bank 2 : EEDATH, EEADRH, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDSE0, LCDSE1, LCDSE2 + {$SET_STATE_RAM '120-16F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:F5'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:F5'} // PIE2 - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '096:F0'} // IOCB - {$SET_UNIMP_BITS '097:03'} // CMCON1 - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:AF'} // VRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:37'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F5'} // PIR2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F5'} // PIE2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -529,53 +515,53 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - // IESO : Internal External Switchover bit - {$define _IESO_ON = $1FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $1FFB} // Internal/External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOR enabled - {$define _BOREN_NSLEEP = $1FF7} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $1FEF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $1FE7} // BOR disabled + // PWRTE : Power Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory code protection is disabled - {$define _CPD_ON = $1FDF} // Data memory code protection is enabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power Up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $2FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger implementation end. diff --git a/PIC16F916.pas b/devices16/PIC16F916.pas similarity index 63% rename from PIC16F916.pas rename to devices16/PIC16F916.pas index 8e92d9c2..ceb1a5c3 100644 --- a/PIC16F916.pas +++ b/devices16/PIC16F916.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -52,8 +52,13 @@ interface PORTC_RC0 : bit absolute PORTC.0; PORTE : byte absolute $0009; PORTE_RE3 : bit absolute PORTE.3; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -62,7 +67,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -71,21 +76,21 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_C2IF : bit absolute PIR2.5; - PIR2_C1IF : bit absolute PIR2.4; - PIR2_LCDIF : bit absolute PIR2.3; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_LCDIF : bit absolute PIR2.4; PIR2_LVDIF : bit absolute PIR2.2; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GE : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -95,7 +100,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -125,9 +131,9 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + RCREG : byte absolute $001A; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG1 : bit absolute ADCON0.6; ADCON0_VCFG0 : bit absolute ADCON0.5; @@ -137,7 +143,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -174,7 +180,7 @@ interface TRISC_TRISC0 : bit absolute TRISC.0; TRISE : byte absolute $0089; TRISE_TRISE3 : bit absolute TRISE.3; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -183,17 +189,17 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_C2IE : bit absolute PIE2.5; - PIE2_C1IE : bit absolute PIE2.4; - PIE2_LCDIE : bit absolute PIE2.3; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_LCDIE : bit absolute PIE2.4; PIE2_LVDIE : bit absolute PIE2.2; - PCON : byte absolute $008e; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -208,11 +214,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; ANSEL : byte absolute $0091; - ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -225,19 +226,11 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; + IOCB_IOCB3 : bit absolute IOCB.7; + IOCB_IOCB2 : bit absolute IOCB.6; + IOCB_IOCB1 : bit absolute IOCB.5; + IOCB_IOCB0 : bit absolute IOCB.4; CMCON1 : byte absolute $0097; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; @@ -246,11 +239,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON0 : byte absolute $009c; + CMCON0 : byte absolute $009C; CMCON0_C2OUT : bit absolute CMCON0.7; CMCON0_C1OUT : bit absolute CMCON0.6; CMCON0_C2INV : bit absolute CMCON0.5; @@ -259,15 +252,15 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - VRCON : byte absolute $009d; - VRCON_VREN : bit absolute VRCON.6; + VRCON : byte absolute $009D; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -301,32 +294,16 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - EEDATL : byte absolute $010c; - EEDATL_EEDATL7 : bit absolute EEDATL.7; - EEDATL_EEDATL6 : bit absolute EEDATL.6; - EEDATL_EEDATL5 : bit absolute EEDATL.5; - EEDATL_EEDATL4 : bit absolute EEDATL.4; - EEDATL_EEDATL3 : bit absolute EEDATL.3; - EEDATL_EEDATL2 : bit absolute EEDATL.2; - EEDATL_EEDATL1 : bit absolute EEDATL.1; - EEDATL_EEDATL0 : bit absolute EEDATL.0; - EEADRL : byte absolute $010d; - EEADRL_EEADRL7 : bit absolute EEADRL.7; - EEADRL_EEADRL6 : bit absolute EEADRL.6; - EEADRL_EEADRL5 : bit absolute EEADRL.5; - EEADRL_EEADRL4 : bit absolute EEADRL.4; - EEADRL_EEADRL3 : bit absolute EEADRL.3; - EEADRL_EEADRL2 : bit absolute EEADRL.2; - EEADRL_EEADRL1 : bit absolute EEADRL.1; - EEADRL_EEADRL0 : bit absolute EEADRL.0; - EEDATH : byte absolute $010e; + EEDATL : byte absolute $010C; + EEADRL : byte absolute $010D; + EEDATH : byte absolute $010E; EEDATH_EEDATH5 : bit absolute EEDATH.5; EEDATH_EEDATH4 : bit absolute EEDATH.4; EEDATH_EEDATH3 : bit absolute EEDATH.3; EEDATH_EEDATH2 : bit absolute EEDATH.2; EEDATH_EEDATH1 : bit absolute EEDATH.1; EEDATH_EEDATH0 : bit absolute EEDATH.0; - EEADRH : byte absolute $010f; + EEADRH : byte absolute $010F; EEADRH_EEADRH4 : bit absolute EEADRH.4; EEADRH_EEADRH3 : bit absolute EEADRH.3; EEADRH_EEADRH2 : bit absolute EEADRH.2; @@ -355,79 +332,90 @@ interface LCDDATA6 : byte absolute $0116; LCDDATA7 : byte absolute $0117; LCDDATA9 : byte absolute $0119; - LCDDATA10 : byte absolute $011a; - LCDSE0 : byte absolute $011c; - LCDSE1 : byte absolute $011d; - EECON1 : byte absolute $018c; + LCDDATA10 : byte absolute $011A; + LCDSE0 : byte absolute $011C; + LCDSE1 : byte absolute $011D; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-007:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC - {$SET_STATE_RAM '009-01A:SFR'} // PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG - {$SET_STATE_RAM '01E-01F:SFR'} // ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-087:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC - {$SET_STATE_RAM '089-099:SFR'} // TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON0, VRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-111:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, LCDCON, LCDPS, LVDCON, PCLATH, INTCON, EEDATL, EEADRL, EEDATH, EEADRH, LCDDATA0, LCDDATA1 - {$SET_STATE_RAM '113-114:SFR'} // LCDDATA3, LCDDATA4 - {$SET_STATE_RAM '116-117:SFR'} // LCDDATA6, LCDDATA7 - {$SET_STATE_RAM '119-11A:SFR'} // LCDDATA9, LCDDATA10 - {$SET_STATE_RAM '11C-11D:SFR'} // LCDSE0, LCDSE1 - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-007:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '009-009:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATL, EEADRL + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01A:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-087:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '089-089:SFR'} // Bank 1 : TRISE + {$SET_STATE_RAM '08E-099:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON0, VRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '107-109:SFR'} // Bank 2 : LCDCON, LCDPS, LVDCON + {$SET_STATE_RAM '10E-111:SFR'} // Bank 2 : EEDATH, EEADRH, LCDDATA0, LCDDATA1 + {$SET_STATE_RAM '113-114:SFR'} // Bank 2 : LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : LCDDATA6, LCDDATA7 + {$SET_STATE_RAM '119-11A:SFR'} // Bank 2 : LCDDATA9, LCDDATA10 + {$SET_STATE_RAM '11C-11D:SFR'} // Bank 2 : LCDSE0, LCDSE1 + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:08'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:F4'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '089:08'} // TRISE - {$SET_UNIMP_BITS '08D:F4'} // PIE2 - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '091:1F'} // ANSEL - {$SET_UNIMP_BITS '096:F0'} // IOCB - {$SET_UNIMP_BITS '097:03'} // CMCON1 - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:AF'} // VRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:37'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F4'} // PIR2 bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F4'} // PIE2 bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:1F'} // ANSEL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -472,53 +460,53 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - // IESO : Internal External Switchover bit - {$define _IESO_ON = $1FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $1FFB} // Internal/External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOR enabled - {$define _BOREN_NSLEEP = $1FF7} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $1FEF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $1FE7} // BOR disabled + // PWRTE : Power Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory code protection is disabled - {$define _CPD_ON = $1FDF} // Data memory code protection is enabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power Up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $2FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger implementation end. diff --git a/PIC16F917.pas b/devices16/PIC16F917.pas similarity index 66% rename from PIC16F917.pas rename to devices16/PIC16F917.pas index 0deef4ab..9ac99aa7 100644 --- a/PIC16F917.pas +++ b/devices16/PIC16F917.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -64,8 +64,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -74,7 +79,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -83,22 +88,22 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_C2IF : bit absolute PIR2.5; - PIR2_C1IF : bit absolute PIR2.4; - PIR2_LCDIF : bit absolute PIR2.3; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_LCDIF : bit absolute PIR2.4; PIR2_LVDIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GE : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -108,7 +113,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -138,18 +144,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG1 : bit absolute ADCON0.6; ADCON0_VCFG0 : bit absolute ADCON0.5; @@ -159,7 +165,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -208,7 +214,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -217,18 +223,18 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_C2IE : bit absolute PIE2.5; - PIE2_C1IE : bit absolute PIE2.4; - PIE2_LCDIE : bit absolute PIE2.3; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_LCDIE : bit absolute PIE2.4; PIE2_LVDIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -243,14 +249,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; ANSEL : byte absolute $0091; - ANSEL_ANS7 : bit absolute ANSEL.7; - ANSEL_ANS6 : bit absolute ANSEL.6; - ANSEL_ANS5 : bit absolute ANSEL.5; - ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -263,19 +261,11 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; + IOCB_IOCB3 : bit absolute IOCB.7; + IOCB_IOCB2 : bit absolute IOCB.6; + IOCB_IOCB1 : bit absolute IOCB.5; + IOCB_IOCB0 : bit absolute IOCB.4; CMCON1 : byte absolute $0097; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; @@ -284,11 +274,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON0 : byte absolute $009c; + CMCON0 : byte absolute $009C; CMCON0_C2OUT : bit absolute CMCON0.7; CMCON0_C1OUT : bit absolute CMCON0.6; CMCON0_C2INV : bit absolute CMCON0.5; @@ -297,15 +287,15 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - VRCON : byte absolute $009d; - VRCON_VREN : bit absolute VRCON.6; + VRCON : byte absolute $009D; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -339,32 +329,16 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - EEDATL : byte absolute $010c; - EEDATL_EEDATL7 : bit absolute EEDATL.7; - EEDATL_EEDATL6 : bit absolute EEDATL.6; - EEDATL_EEDATL5 : bit absolute EEDATL.5; - EEDATL_EEDATL4 : bit absolute EEDATL.4; - EEDATL_EEDATL3 : bit absolute EEDATL.3; - EEDATL_EEDATL2 : bit absolute EEDATL.2; - EEDATL_EEDATL1 : bit absolute EEDATL.1; - EEDATL_EEDATL0 : bit absolute EEDATL.0; - EEADRL : byte absolute $010d; - EEADRL_EEADRL7 : bit absolute EEADRL.7; - EEADRL_EEADRL6 : bit absolute EEADRL.6; - EEADRL_EEADRL5 : bit absolute EEADRL.5; - EEADRL_EEADRL4 : bit absolute EEADRL.4; - EEADRL_EEADRL3 : bit absolute EEADRL.3; - EEADRL_EEADRL2 : bit absolute EEADRL.2; - EEADRL_EEADRL1 : bit absolute EEADRL.1; - EEADRL_EEADRL0 : bit absolute EEADRL.0; - EEDATH : byte absolute $010e; + EEDATL : byte absolute $010C; + EEADRL : byte absolute $010D; + EEDATH : byte absolute $010E; EEDATH_EEDATH5 : bit absolute EEDATH.5; EEDATH_EEDATH4 : bit absolute EEDATH.4; EEDATH_EEDATH3 : bit absolute EEDATH.3; EEDATH_EEDATH2 : bit absolute EEDATH.2; EEDATH_EEDATH1 : bit absolute EEDATH.1; EEDATH_EEDATH0 : bit absolute EEDATH.0; - EEADRH : byte absolute $010f; + EEADRH : byte absolute $010F; EEADRH_EEADRH4 : bit absolute EEADRH.4; EEADRH_EEADRH3 : bit absolute EEADRH.3; EEADRH_EEADRH2 : bit absolute EEADRH.2; @@ -404,74 +378,85 @@ interface LCDDATA7 : byte absolute $0117; LCDDATA8 : byte absolute $0118; LCDDATA9 : byte absolute $0119; - LCDDATA10 : byte absolute $011a; - LCDDATA11 : byte absolute $011b; - LCDSE0 : byte absolute $011c; - LCDSE1 : byte absolute $011d; - LCDSE2 : byte absolute $011e; - EECON1 : byte absolute $018c; + LCDDATA10 : byte absolute $011A; + LCDDATA11 : byte absolute $011B; + LCDSE0 : byte absolute $011C; + LCDSE1 : byte absolute $011D; + LCDSE2 : byte absolute $011E; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-099:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON0, VRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-11E:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, LCDCON, LCDPS, LVDCON, PCLATH, INTCON, EEDATL, EEADRL, EEDATH, EEADRH, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDSE0, LCDSE1, LCDSE2 - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-184:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR - {$SET_STATE_RAM '186-186:SFR'} // TRISB - {$SET_STATE_RAM '18A-18D:SFR'} // PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-005:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '006-006:SFR:ALL'} // Bank 0 : PORTB + // Bank 1 : TRISB + // Bank 2 : PORTB + // Bank 3 : TRISB + {$SET_STATE_RAM '007-009:SFR'} // Bank 0 : PORTC, PORTD, PORTE + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATL, EEADRL + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-01F:SFR'} // Bank 0 : TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '085-085:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '087-089:SFR'} // Bank 1 : TRISC, TRISD, TRISE + {$SET_STATE_RAM '08E-099:SFR'} // Bank 1 : PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG + {$SET_STATE_RAM '09C-09F:SFR'} // Bank 1 : CMCON0, VRCON, ADRESL, ADCON1 + {$SET_STATE_RAM '105-105:SFR'} // Bank 2 : WDTCON + {$SET_STATE_RAM '107-109:SFR'} // Bank 2 : LCDCON, LCDPS, LVDCON + {$SET_STATE_RAM '10E-11E:SFR'} // Bank 2 : EEDATH, EEADRH, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDSE0, LCDSE1, LCDSE2 + {$SET_STATE_RAM '190-19F:GPR'} - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '009:0F'} // PORTE - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:F5'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '089:0F'} // TRISE - {$SET_UNIMP_BITS '08D:F5'} // PIE2 - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '096:F0'} // IOCB - {$SET_UNIMP_BITS '097:03'} // CMCON1 - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:AF'} // VRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:37'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '18C:8F'} // EECON1 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '009:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F5'} // PIR2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '089:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F5'} // PIE2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) // -- PIN mapping -- @@ -529,53 +514,53 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - // IESO : Internal External Switchover bit - {$define _IESO_ON = $1FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $1FFB} // Internal/External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOR enabled - {$define _BOREN_NSLEEP = $1FF7} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $1FEF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $1FE7} // BOR disabled + // PWRTE : Power Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory code protection is disabled - {$define _CPD_ON = $1FDF} // Data memory code protection is enabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power Up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $2FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger implementation end. diff --git a/PIC16F946.pas b/devices16/PIC16F946.pas similarity index 68% rename from PIC16F946.pas rename to devices16/PIC16F946.pas index 937b662e..ed30ec2c 100644 --- a/PIC16F946.pas +++ b/devices16/PIC16F946.pas @@ -17,8 +17,8 @@ interface STATUS_IRP : bit absolute STATUS.7; STATUS_RP1 : bit absolute STATUS.6; STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; STATUS_Z : bit absolute STATUS.2; STATUS_DC : bit absolute STATUS.1; STATUS_C : bit absolute STATUS.0; @@ -68,8 +68,13 @@ interface PORTE_RE2 : bit absolute PORTE.2; PORTE_RE1 : bit absolute PORTE.1; PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000a; - INTCON : byte absolute $000b; + PCLATH : byte absolute $000A; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; INTCON_GIE : bit absolute INTCON.7; INTCON_PEIE : bit absolute INTCON.6; INTCON_TMR0IE : bit absolute INTCON.5; @@ -78,7 +83,7 @@ interface INTCON_TMR0IF : bit absolute INTCON.2; INTCON_INTF : bit absolute INTCON.1; INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000c; + PIR1 : byte absolute $000C; PIR1_EEIF : bit absolute PIR1.7; PIR1_ADIF : bit absolute PIR1.6; PIR1_RCIF : bit absolute PIR1.5; @@ -87,22 +92,22 @@ interface PIR1_CCP1IF : bit absolute PIR1.2; PIR1_TMR2IF : bit absolute PIR1.1; PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000d; - PIR2_OSFIF : bit absolute PIR2.6; - PIR2_C2IF : bit absolute PIR2.5; - PIR2_C1IF : bit absolute PIR2.4; - PIR2_LCDIF : bit absolute PIR2.3; + PIR2 : byte absolute $000D; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_LCDIF : bit absolute PIR2.4; PIR2_LVDIF : bit absolute PIR2.2; - PIR2_CCP2IF : bit absolute PIR2.1; - TMR1L : byte absolute $000e; - TMR1H : byte absolute $000f; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR1L : byte absolute $000E; + TMR1H : byte absolute $000F; T1CON : byte absolute $0010; T1CON_T1GINV : bit absolute T1CON.7; T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1GE : bit absolute T1CON.5; - T1CON_T1CKPS1 : bit absolute T1CON.4; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_nT1SYNC : bit absolute T1CON.2; T1CON_TMR1CS : bit absolute T1CON.1; T1CON_TMR1ON : bit absolute T1CON.0; TMR2 : byte absolute $0011; @@ -112,7 +117,8 @@ interface T2CON_TOUTPS1 : bit absolute T2CON.4; T2CON_TOUTPS0 : bit absolute T2CON.3; T2CON_TMR2ON : bit absolute T2CON.2; - T2CON_T2CKPS0 : bit absolute T2CON.1; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; SSPBUF : byte absolute $0013; SSPCON : byte absolute $0014; SSPCON_WCOL : bit absolute SSPCON.7; @@ -142,18 +148,18 @@ interface RCSTA_OERR : bit absolute RCSTA.1; RCSTA_RX9D : bit absolute RCSTA.0; TXREG : byte absolute $0019; - RCREG : byte absolute $001a; - CCPR2L : byte absolute $001b; - CCPR2H : byte absolute $001c; - CCP2CON : byte absolute $001d; + RCREG : byte absolute $001A; + CCPR2L : byte absolute $001B; + CCPR2H : byte absolute $001C; + CCP2CON : byte absolute $001D; CCP2CON_CCP2X : bit absolute CCP2CON.5; CCP2CON_CCP2Y : bit absolute CCP2CON.4; CCP2CON_CCP2M3 : bit absolute CCP2CON.3; CCP2CON_CCP2M2 : bit absolute CCP2CON.2; CCP2CON_CCP2M1 : bit absolute CCP2CON.1; CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001e; - ADCON0 : byte absolute $001f; + ADRESH : byte absolute $001E; + ADCON0 : byte absolute $001F; ADCON0_ADFM : bit absolute ADCON0.7; ADCON0_VCFG1 : bit absolute ADCON0.6; ADCON0_VCFG0 : bit absolute ADCON0.5; @@ -163,7 +169,7 @@ interface ADCON0_GO_nDONE : bit absolute ADCON0.1; ADCON0_ADON : bit absolute ADCON0.0; OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; + OPTION_REG_nRBPU : bit absolute OPTION_REG.7; OPTION_REG_INTEDG : bit absolute OPTION_REG.6; OPTION_REG_T0CS : bit absolute OPTION_REG.5; OPTION_REG_T0SE : bit absolute OPTION_REG.4; @@ -216,7 +222,7 @@ interface TRISE_TRISE2 : bit absolute TRISE.2; TRISE_TRISE1 : bit absolute TRISE.1; TRISE_TRISE0 : bit absolute TRISE.0; - PIE1 : byte absolute $008c; + PIE1 : byte absolute $008C; PIE1_EEIE : bit absolute PIE1.7; PIE1_ADIE : bit absolute PIE1.6; PIE1_RCIE : bit absolute PIE1.5; @@ -225,18 +231,18 @@ interface PIE1_CCP1IE : bit absolute PIE1.2; PIE1_TMR2IE : bit absolute PIE1.1; PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008d; - PIE2_OSFIE : bit absolute PIE2.6; - PIE2_C2IE : bit absolute PIE2.5; - PIE2_C1IE : bit absolute PIE2.4; - PIE2_LCDIE : bit absolute PIE2.3; + PIE2 : byte absolute $008D; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_LCDIE : bit absolute PIE2.4; PIE2_LVDIE : bit absolute PIE2.2; - PIE2_CCP2IE : bit absolute PIE2.1; - PCON : byte absolute $008e; + PIE2_CCP2IE : bit absolute PIE2.0; + PCON : byte absolute $008E; PCON_SBOREN : bit absolute PCON.4; - PCON_POR : bit absolute PCON.3; - PCON_BOR : bit absolute PCON.2; - OSCCON : byte absolute $008f; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCCON : byte absolute $008F; OSCCON_IRCF2 : bit absolute OSCCON.6; OSCCON_IRCF1 : bit absolute OSCCON.5; OSCCON_IRCF0 : bit absolute OSCCON.4; @@ -251,14 +257,6 @@ interface OSCTUNE_TUN1 : bit absolute OSCTUNE.1; OSCTUNE_TUN0 : bit absolute OSCTUNE.0; ANSEL : byte absolute $0091; - ANSEL_ANS7 : bit absolute ANSEL.7; - ANSEL_ANS6 : bit absolute ANSEL.6; - ANSEL_ANS5 : bit absolute ANSEL.5; - ANSEL_ANS4 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; PR2 : byte absolute $0092; SSPADD : byte absolute $0093; SSPSTAT : byte absolute $0094; @@ -271,19 +269,11 @@ interface SSPSTAT_UA : bit absolute SSPSTAT.1; SSPSTAT_BF : bit absolute SSPSTAT.0; WPUB : byte absolute $0095; - WPUB_WPUB7 : bit absolute WPUB.7; - WPUB_WPUB6 : bit absolute WPUB.6; - WPUB_WPUB5 : bit absolute WPUB.5; - WPUB_WPUB4 : bit absolute WPUB.4; - WPUB_WPUB3 : bit absolute WPUB.3; - WPUB_WPUB2 : bit absolute WPUB.2; - WPUB_WPUB1 : bit absolute WPUB.1; - WPUB_WPUB0 : bit absolute WPUB.0; IOCB : byte absolute $0096; - IOCB_IOCB7 : bit absolute IOCB.7; - IOCB_IOCB6 : bit absolute IOCB.6; - IOCB_IOCB5 : bit absolute IOCB.5; - IOCB_IOCB4 : bit absolute IOCB.4; + IOCB_IOCB3 : bit absolute IOCB.7; + IOCB_IOCB2 : bit absolute IOCB.6; + IOCB_IOCB1 : bit absolute IOCB.5; + IOCB_IOCB0 : bit absolute IOCB.4; CMCON1 : byte absolute $0097; CMCON1_T1GSS : bit absolute CMCON1.1; CMCON1_C2SYNC : bit absolute CMCON1.0; @@ -292,11 +282,11 @@ interface TXSTA_TX9 : bit absolute TXSTA.6; TXSTA_TXEN : bit absolute TXSTA.5; TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.3; - TXSTA_TRMT : bit absolute TXSTA.2; - TXSTA_TX9D : bit absolute TXSTA.1; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; SPBRG : byte absolute $0099; - CMCON0 : byte absolute $009c; + CMCON0 : byte absolute $009C; CMCON0_C2OUT : bit absolute CMCON0.7; CMCON0_C1OUT : bit absolute CMCON0.6; CMCON0_C2INV : bit absolute CMCON0.5; @@ -305,15 +295,15 @@ interface CMCON0_CM2 : bit absolute CMCON0.2; CMCON0_CM1 : bit absolute CMCON0.1; CMCON0_CM0 : bit absolute CMCON0.0; - VRCON : byte absolute $009d; - VRCON_VREN : bit absolute VRCON.6; + VRCON : byte absolute $009D; + VRCON_VREN : bit absolute VRCON.7; VRCON_VRR : bit absolute VRCON.5; VRCON_VR3 : bit absolute VRCON.3; VRCON_VR2 : bit absolute VRCON.2; VRCON_VR1 : bit absolute VRCON.1; VRCON_VR0 : bit absolute VRCON.0; - ADRESL : byte absolute $009e; - ADCON1 : byte absolute $009f; + ADRESL : byte absolute $009E; + ADCON1 : byte absolute $009F; ADCON1_ADCS2 : bit absolute ADCON1.6; ADCON1_ADCS1 : bit absolute ADCON1.5; ADCON1_ADCS0 : bit absolute ADCON1.4; @@ -347,32 +337,16 @@ interface LVDCON_LVDL2 : bit absolute LVDCON.2; LVDCON_LVDL1 : bit absolute LVDCON.1; LVDCON_LVDL0 : bit absolute LVDCON.0; - EEDATL : byte absolute $010c; - EEDATL_EEDATL7 : bit absolute EEDATL.7; - EEDATL_EEDATL6 : bit absolute EEDATL.6; - EEDATL_EEDATL5 : bit absolute EEDATL.5; - EEDATL_EEDATL4 : bit absolute EEDATL.4; - EEDATL_EEDATL3 : bit absolute EEDATL.3; - EEDATL_EEDATL2 : bit absolute EEDATL.2; - EEDATL_EEDATL1 : bit absolute EEDATL.1; - EEDATL_EEDATL0 : bit absolute EEDATL.0; - EEADRL : byte absolute $010d; - EEADRL_EEADRL7 : bit absolute EEADRL.7; - EEADRL_EEADRL6 : bit absolute EEADRL.6; - EEADRL_EEADRL5 : bit absolute EEADRL.5; - EEADRL_EEADRL4 : bit absolute EEADRL.4; - EEADRL_EEADRL3 : bit absolute EEADRL.3; - EEADRL_EEADRL2 : bit absolute EEADRL.2; - EEADRL_EEADRL1 : bit absolute EEADRL.1; - EEADRL_EEADRL0 : bit absolute EEADRL.0; - EEDATH : byte absolute $010e; + EEDATL : byte absolute $010C; + EEADRL : byte absolute $010D; + EEDATH : byte absolute $010E; EEDATH_EEDATH5 : bit absolute EEDATH.5; EEDATH_EEDATH4 : bit absolute EEDATH.4; EEDATH_EEDATH3 : bit absolute EEDATH.3; EEDATH_EEDATH2 : bit absolute EEDATH.2; EEDATH_EEDATH1 : bit absolute EEDATH.1; EEDATH_EEDATH0 : bit absolute EEDATH.0; - EEADRH : byte absolute $010f; + EEADRH : byte absolute $010F; EEADRH_EEADRH4 : bit absolute EEADRH.4; EEADRH_EEADRH3 : bit absolute EEADRH.3; EEADRH_EEADRH2 : bit absolute EEADRH.2; @@ -412,11 +386,11 @@ interface LCDDATA7 : byte absolute $0117; LCDDATA8 : byte absolute $0118; LCDDATA9 : byte absolute $0119; - LCDDATA10 : byte absolute $011a; - LCDDATA11 : byte absolute $011b; - LCDSE0 : byte absolute $011c; - LCDSE1 : byte absolute $011d; - LCDSE2 : byte absolute $011e; + LCDDATA10 : byte absolute $011A; + LCDDATA11 : byte absolute $011B; + LCDSE0 : byte absolute $011C; + LCDSE1 : byte absolute $011D; + LCDSE2 : byte absolute $011E; TRISF : byte absolute $0185; TRISF_TRISF7 : bit absolute TRISF.7; TRISF_TRISF6 : bit absolute TRISF.6; @@ -449,13 +423,13 @@ interface PORTG_RG2 : bit absolute PORTG.2; PORTG_RG1 : bit absolute PORTG.1; PORTG_RG0 : bit absolute PORTG.0; - EECON1 : byte absolute $018c; + EECON1 : byte absolute $018C; EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.6; - EECON1_WREN : bit absolute EECON1.5; - EECON1_WR : bit absolute EECON1.4; - EECON1_RD : bit absolute EECON1.3; - EECON2 : byte absolute $018d; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $018D; LCDDATA12 : byte absolute $0190; LCDDATA12_SEG31 : bit absolute LCDDATA12.7; LCDDATA12_SEG30 : bit absolute LCDDATA12.6; @@ -484,71 +458,84 @@ interface LCDDATA19 : byte absolute $0197; LCDDATA20 : byte absolute $0198; LCDDATA21 : byte absolute $0199; - LCDDATA22 : byte absolute $019a; - LCDDATA23 : byte absolute $019b; - LCDSE3 : byte absolute $019c; - LCDSE4 : byte absolute $019d; - LCDSE5 : byte absolute $019e; + LCDDATA22 : byte absolute $019A; + LCDDATA23 : byte absolute $019B; + LCDSE3 : byte absolute $019C; + LCDSE4 : byte absolute $019D; + LCDSE5 : byte absolute $019E; // -- Define RAM state values -- - {$SET_STATE_RAM '000-01F:SFR'} // INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, PORTC, PORTD, PORTE, PCLATH, INTCON, PIR1, PIR2, TMR1L, TMR1H, T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG, RCREG, CCPR2L, CCPR2H, CCP2CON, ADRESH, ADCON0 - {$SET_STATE_RAM '020-07F:GPR'} - {$SET_STATE_RAM '080-099:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISA, TRISB, TRISC, TRISD, TRISE, PCLATH, INTCON, PIE1, PIE2, PCON, OSCCON, OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG - {$SET_STATE_RAM '09C-09F:SFR'} // CMCON0, VRCON, ADRESL, ADCON1 - {$SET_STATE_RAM '0A0-0FF:GPR'} - {$SET_STATE_RAM '100-11E:SFR'} // INDF, TMR0, PCL, STATUS, FSR, WDTCON, PORTB, LCDCON, LCDPS, LVDCON, PCLATH, INTCON, EEDATL, EEADRL, EEDATH, EEADRH, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDSE0, LCDSE1, LCDSE2 - {$SET_STATE_RAM '120-17F:GPR'} - {$SET_STATE_RAM '180-18D:SFR'} // INDF, OPTION_REG, PCL, STATUS, FSR, TRISF, TRISB, TRISG, PORTF, PORTG, PCLATH, INTCON, EECON1, EECON2 - {$SET_STATE_RAM '190-19E:SFR'} // LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDSE3, LCDSE4, LCDSE5 - {$SET_STATE_RAM '1A0-1FF:GPR'} + {$CLEAR_STATE_RAM} + {$SET_STATE_RAM '000-000:SFR:ALLMAPPED'} // Banks 0-3 : INDF + {$SET_STATE_RAM '001-001:SFR:ALL'} // Bank 0 : TMR0 + // Bank 1 : OPTION_REG + // Bank 2 : TMR0 + // Bank 3 : OPTION_REG + {$SET_STATE_RAM '002-004:SFR:ALLMAPPED'} // Banks 0-3 : PCL, STATUS, FSR + {$SET_STATE_RAM '005-009:SFR:ALL'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE + // Bank 2 : WDTCON, PORTB, LCDCON, LCDPS, LVDCON + // Bank 3 : TRISF, TRISB, TRISG, PORTF, PORTG + {$SET_STATE_RAM '00A-00B:SFR:ALLMAPPED'} // Banks 0-3 : PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR:ALL'} // Bank 0 : PIR1, PIR2 + // Bank 1 : PIE1, PIE2 + // Bank 2 : EEDATL, EEADRL + // Bank 3 : EECON1, EECON2 + {$SET_STATE_RAM '00E-00F:SFR'} // Bank 0 : TMR1L, TMR1H + {$SET_STATE_RAM '010-019:SFR:ALL'} // Bank 0 : T1CON, TMR2, T2CON, SSPBUF, SSPCON, CCPR1L, CCPR1H, CCP1CON, RCSTA, TXREG + // Bank 1 : OSCTUNE, ANSEL, PR2, SSPADD, SSPSTAT, WPUB, IOCB, CMCON1, TXSTA, SPBRG + // Bank 2 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9 + // Bank 3 : LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21 + {$SET_STATE_RAM '01A-01B:SFR'} // Bank 0 : RCREG, CCPR2L + {$SET_STATE_RAM '01C-01E:SFR:ALL'} // Bank 0 : CCPR2H, CCP2CON, ADRESH + // Bank 1 : CMCON0, VRCON, ADRESL + // Bank 2 : LCDSE0, LCDSE1, LCDSE2 + // Bank 3 : LCDSE3, LCDSE4, LCDSE5 + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCON0 + {$SET_STATE_RAM '020-06F:GPR:ALL'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08E-08F:SFR'} // Bank 1 : PCON, OSCCON + {$SET_STATE_RAM '09F-09F:SFR'} // Bank 1 : ADCON1 + {$SET_STATE_RAM '10E-10F:SFR'} // Bank 2 : EEDATH, EEADRH + {$SET_STATE_RAM '11A-11B:SFR'} // Bank 2 : LCDDATA10, LCDDATA11 + {$SET_STATE_RAM '19A-19B:SFR'} // Bank 3 : LCDDATA22, LCDDATA23 - // -- Define mirrored registers -- - {$SET_MAPPED_RAM '080-080:bnk0'} // INDF - {$SET_MAPPED_RAM '082-084:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '08A-08B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '100-104:bnk0'} // INDF, TMR0, PCL, STATUS, FSR - {$SET_MAPPED_RAM '106-106:bnk0'} // PORTB - {$SET_MAPPED_RAM '10A-10B:bnk0'} // PCLATH, INTCON - {$SET_MAPPED_RAM '180-180:bnk0'} // INDF - {$SET_MAPPED_RAM '181-181:bnk1'} // OPTION_REG - {$SET_MAPPED_RAM '182-184:bnk0'} // PCL, STATUS, FSR - {$SET_MAPPED_RAM '186-186:bnk1'} // TRISB - {$SET_MAPPED_RAM '18A-18B:bnk0'} // PCLATH, INTCON + // -- Define mapped RAM -- + {$SET_MAPPED_RAM '101-101:bnk0'} // maps to TMR0 (bank 0) + {$SET_MAPPED_RAM '106-106:bnk0'} // maps to PORTB (bank 0) + {$SET_MAPPED_RAM '181-181:bnk1'} // maps to OPTION_REG (bank 1) + {$SET_MAPPED_RAM '186-186:bnk1'} // maps to TRISB (bank 1) - // -- Initial values -- - {$SET_UNIMP_BITS '000:00'} // INDF - {$SET_UNIMP_BITS '00A:1F'} // PCLATH - {$SET_UNIMP_BITS '00D:F5'} // PIR2 - {$SET_UNIMP_BITS '012:7F'} // T2CON - {$SET_UNIMP_BITS '017:3F'} // CCP1CON - {$SET_UNIMP_BITS '01D:3F'} // CCP2CON - {$SET_UNIMP_BITS '08D:F5'} // PIE2 - {$SET_UNIMP_BITS '08E:13'} // PCON - {$SET_UNIMP_BITS '08F:7F'} // OSCCON - {$SET_UNIMP_BITS '090:1F'} // OSCTUNE - {$SET_UNIMP_BITS '096:F0'} // IOCB - {$SET_UNIMP_BITS '097:03'} // CMCON1 - {$SET_UNIMP_BITS '098:F7'} // TXSTA - {$SET_UNIMP_BITS '09D:AF'} // VRCON - {$SET_UNIMP_BITS '09F:70'} // ADCON1 - {$SET_UNIMP_BITS '105:1F'} // WDTCON - {$SET_UNIMP_BITS '109:37'} // LVDCON - {$SET_UNIMP_BITS '10E:3F'} // EEDATH - {$SET_UNIMP_BITS '10F:1F'} // EEADRH - {$SET_UNIMP_BITS '187:3F'} // TRISG - {$SET_UNIMP_BITS '189:3F'} // PORTG - {$SET_UNIMP_BITS '18C:8F'} // EECON1 - {$SET_UNIMP_BITS '192:03'} // LCDDATA14 - {$SET_UNIMP_BITS '195:03'} // LCDDATA17 - {$SET_UNIMP_BITS '198:03'} // LCDDATA20 - {$SET_UNIMP_BITS '19B:03'} // LCDDATA23 - {$SET_UNIMP_BITS '19E:03'} // LCDSE5 + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '00A:1F'} // PCLATH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F5'} // PIR2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F5'} // PIE2 bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:13'} // PCON bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08F:7F'} // OSCCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:1F'} // OSCTUNE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:F0'} // IOCB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:03'} // CMCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:F7'} // TXSTA bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:AF'} // VRCON bits 6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON1 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '105:1F'} // WDTCON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '109:37'} // LVDCON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:1F'} // EEADRH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '187:3F'} // TRISG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '189:3F'} // PORTG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:8F'} // EECON1 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '19E:03'} // LCDSE5 bits 7,6,5,4,3,2 un-implemented (read as 0) // -- PIN mapping -- @@ -632,53 +619,53 @@ interface // -- Bits Configuration -- - // DEBUG : In-Circuit Debugger Mode bit - {$define _DEBUG_OFF = $1FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins - {$define _DEBUG_ON = $1FFE} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger - - // FCMEN : Fail-Safe Clock Monitor Enabled bit - {$define _FCMEN_ON = $1FFF} // Fail-Safe Clock Monitor is enabled - {$define _FCMEN_OFF = $1FFD} // Fail-Safe Clock Monitor is disabled + // FOSC : Oscillator Selection bits + {$define _FOSC_EXTRCCLK = $3FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EXTRCIO = $3FFE} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCCLK = $3FFD} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_INTOSCIO = $3FFC} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_EC = $3FFB} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_HS = $3FFA} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_XT = $3FF9} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + {$define _FOSC_LP = $3FF8} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - // IESO : Internal External Switchover bit - {$define _IESO_ON = $1FFF} // Internal/External Switchover mode is enabled - {$define _IESO_OFF = $1FFB} // Internal/External Switchover mode is disabled + // WDTE : Watchdog Timer Enable bit + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_OFF = $3FF7} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register - // BOREN : Brown-out Reset Selection bits - {$define _BOREN_ON = $1FFF} // BOR enabled - {$define _BOREN_NSLEEP = $1FF7} // BOR enabled during operation and disabled in Sleep - {$define _BOREN_SBODEN = $1FEF} // BOR controlled by SBOREN bit of the PCON register - {$define _BOREN_OFF = $1FE7} // BOR disabled + // PWRTE : Power Up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FEF} // PWRT enabled - // CPD : Data Code Protection bit - {$define _CPD_OFF = $1FFF} // Data memory code protection is disabled - {$define _CPD_ON = $1FDF} // Data memory code protection is enabled + // MCLRE : RE3/MCLR pin function select bit + {$define _MCLRE_ON = $3FFF} // RE3/MCLR pin function is MCLR + {$define _MCLRE_OFF = $3FDF} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD // CP : Code Protection bit - {$define _CP_OFF = $1FFF} // Program memory code protection is disabled - {$define _CP_ON = $1FBF} // Program memory code protection is enabled + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3FBF} // Program memory code protection is enabled - // MCLRE : RE3/MCLR pin function select bit - {$define _MCLRE_ON = $1FFF} // RE3/MCLR pin function is MCLR - {$define _MCLRE_OFF = $1F7F} // RE3/MCLR pin function is digital input, MCLR internally tied to VDD + // CPD : Data Code Protection bit + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3F7F} // Data memory code protection is enabled - // PWRTE : Power Up Timer Enable bit - {$define _PWRTE_OFF = $1FFF} // PWRT disabled - {$define _PWRTE_ON = $1EFF} // PWRT enabled + // BOREN : Brown-out Reset Selection bits + {$define _BOREN_ON = $3FFF} // BOR enabled + {$define _BOREN_NSLEEP = $3EFF} // BOR enabled during operation and disabled in Sleep + {$define _BOREN_SBODEN = $3DFF} // BOR controlled by SBOREN bit of the PCON register + {$define _BOREN_OFF = $3CFF} // BOR disabled - // WDTE : Watchdog Timer Enable bit - {$define _WDTE_ON = $1FFF} // WDT enabled - {$define _WDTE_OFF = $1DFF} // WDT disabled and can be enabled by SWDTEN bit of the WDTCON register + // IESO : Internal External Switchover bit + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $3BFF} // Internal/External Switchover mode is disabled - // FOSC : Oscillator Selection bits - {$define _FOSC_EXTRCCLK = $1FFF} // RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EXTRCIO = $1BFF} // RCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, RC on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCCLK = $17FF} // INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_INTOSCIO = $13FF} // INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, I/O function on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_EC = $0FFF} // EC: I/O function on RA6/OSC2/CLKOUT/T1OSO pin, CLKIN on RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_HS = $0BFF} // HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_XT = $07FF} // XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI - {$define _FOSC_LP = $03FF} // LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT/T1OSO and RA7/OSC1/CLKIN/T1OSI + // FCMEN : Fail-Safe Clock Monitor Enabled bit + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $37FF} // Fail-Safe Clock Monitor is disabled + + // DEBUG : In-Circuit Debugger Mode bit + {$define _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6/ISCPCLK and RB7/ICSPDAT are general purpose I/O pins + {$define _DEBUG_ON = $2FFF} // In-Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger implementation end. diff --git a/devices17/PIC12F1501.pas b/devices17/PIC12F1501.pas new file mode 100644 index 00000000..cebded7e --- /dev/null +++ b/devices17/PIC12F1501.pas @@ -0,0 +1,775 @@ +unit PIC12F1501; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1501'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NCO1IF : bit absolute PIR2.2; + PIR3 : byte absolute $0013; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NCO1IE : bit absolute PIE2.2; + PIE3 : byte absolute $0093; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_CWG1BSEL : bit absolute APFCON.7; + APFCON_CWG1ASEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CLC1SEL : bit absolute APFCON.1; + APFCON_NCO1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OE : bit absolute PWM3CON.6; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OE : bit absolute PWM4CON.6; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSCLC2 : bit absolute CWG1CON2.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OE : bit absolute CLC1CON.6; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; + CLC1GLS0 : byte absolute $0F14; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F15; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F16; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F17; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F18; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OE : bit absolute CLC2CON.6; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F19; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1A; + CLC2SEL0_LC2D2S2 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D2S1 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D2S0 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1B; + CLC2SEL1_LC2D4S2 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D4S1 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D4S0 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D3S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D3S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D3S0 : bit absolute CLC2SEL1.0; + CLC2GLS0 : byte absolute $0F1C; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F1D; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F1E; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F1F; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + BSR_ICDSHAD : byte absolute $0FE3; + BSR_ICDSHAD_BSR_ICDSHAD4 : bit absolute BSR_ICDSHAD.4; + BSR_ICDSHAD_BSR_ICDSHAD3 : bit absolute BSR_ICDSHAD.3; + BSR_ICDSHAD_BSR_ICDSHAD2 : bit absolute BSR_ICDSHAD.2; + BSR_ICDSHAD_BSR_ICDSHAD1 : bit absolute BSR_ICDSHAD.1; + BSR_ICDSHAD_BSR_ICDSHAD0 : bit absolute BSR_ICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-04F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09F:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-119:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '611-61C:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'F0F-F1F:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSR_ICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:24'} // PIR2 bits 7,6,4,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:03'} // PIR3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:24'} // PIE2 bits 7,6,4,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:03'} // PIE3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // OSCSTAT bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:B4'} // DACCON0 bits 6,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:CB'} // APFCON bits 5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:F0'} // PWM3CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM4CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON2 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:77'} // CLC2SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:77'} // CLC2SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSR_ICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/T1CKI/CWG1A/NCO1/NCO1CLK/CLC1IN1/CLC2/PWM4 + // Pin 3 : RA4/AN3/C1IN1-/CWG1B/CLC1/PWM3/CLKOUT/T1G + // Pin 4 : RA3/CLC1IN0/VPP/T1G/MCLR + // Pin 5 : RA2/AN2/C1OUT/DACOUT2/T0CKI/INT/PWM1/CLC1/CWG1A/CWG1FLT + // Pin 6 : RA1/AN1/VREF+/C1IN0-/NCO1/CLC2IN0/ICSPCLK + // Pin 7 : RA0/AN0/C1IN+/DACOUT1/CWG1B/CLC2IN1/PWM2/ICSPDAT + // Pin 8 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC12F1571.pas b/devices17/PIC12F1571.pas new file mode 100644 index 00000000..70fde62e --- /dev/null +++ b/devices17/PIC12F1571.pas @@ -0,0 +1,669 @@ +unit PIC12F1571; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1571'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 1024} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_CWGASEL : bit absolute APFCON.6; + APFCON_CWGBSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_P2SEL : bit absolute APFCON.1; + APFCON_P1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-119:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DC0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:20'} // PIR2 bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:70'} // PIR3 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:20'} // PIE2 bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:70'} // PIE3 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:6B'} // APFCON bits 7,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '192:7F'} // PMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C6'} // CWG1CON2 bits 5,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:07'} // PWMEN bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:07'} // PWMLD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:07'} // PWMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/T1CKI/PWM1/CWG1A/CLKIN + // Pin 3 : RA4/AN3/C1IN1-/PWM2/CWG1B/CLKOUT/T1G + // Pin 4 : RA3/T1G/MCLR/Vpp + // Pin 5 : RA2/AN2/T0CKI/PWM3/C1OUT/CWG1FLT/CWG1A/INT + // Pin 6 : RA1/AN1/VREF+/C1IN0-/PWM1/ICSPCLK/ICDCLK + // Pin 7 : RA0/AN0/C1IN+/PWM2/DAC1OUT/CWG1B/ICSPDAT/ICDDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 0FFh write protected, 100h to 3FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFh write protected, 200h to 3FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC12F1572.pas b/devices17/PIC12F1572.pas new file mode 100644 index 00000000..410bfc0c --- /dev/null +++ b/devices17/PIC12F1572.pas @@ -0,0 +1,707 @@ +unit PIC12F1572; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1572'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_RXDTSEL : bit absolute APFCON.7; + APFCON_CWGASEL : bit absolute APFCON.6; + APFCON_CWGBSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_TXCKSEL : bit absolute APFCON.2; + APFCON_P2SEL : bit absolute APFCON.1; + APFCON_P1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-119:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DC0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:F3'} // PIR1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:20'} // PIR2 bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:70'} // PIR3 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // PIE1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:20'} // PIE2 bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:70'} // PIE3 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EF'} // APFCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '192:7F'} // PMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C6'} // CWG1CON2 bits 5,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:07'} // PWMEN bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:07'} // PWMLD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:07'} // PWMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/T1CKI/CWG1A/PWM1/RX/DT/CLKIN + // Pin 3 : T1G/RA4/AN3/C1IN1-/PWM2/TX/CK/CWG1B/CLKOUT + // Pin 4 : RA3/T1G/MCLR/Vpp + // Pin 5 : RA2/AN2/T0CKI/PWM3/C1OUT/CWG1FLT/CWG1A/INT + // Pin 6 : RA1/AN1/VREF+/C1IN0-/PWM1/RX/DT/ICSPCLK/ICDCLK + // Pin 7 : RA0/AN0/C1IN+/PWM2/TX/CK/DAC1OUT/CWG1B/ICSPDAT/ICDDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC12F1612.pas b/devices17/PIC12F1612.pas new file mode 100644 index 00000000..bda48482 --- /dev/null +++ b/devices17/PIC12F1612.pas @@ -0,0 +1,863 @@ +unit PIC12F1612; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1612'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_T2CS2 : bit absolute T2CLKCON.2; + T2CLKCON_T2CS1 : bit absolute T2CLKCON.1; + T2CLKCON_T2CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OE : bit absolute ZCD1CON.6; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + APFCON : byte absolute $011D; + APFCON_CWGASEL : bit absolute APFCON.6; + APFCON_CWGBSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CCP1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4CLKCON_T4CS2 : bit absolute T4CLKCON.2; + T4CLKCON_T4CS1 : bit absolute T4CLKCON.1; + T4CLKCON_T4CS0 : bit absolute T4CLKCON.0; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6CLKCON_T6CS2 : bit absolute T6CLKCON.2; + T6CLKCON_T6CS1 : bit absolute T6CLKCON.1; + T6CLKCON_T6CS0 : bit absolute T6CLKCON.0; + T6RST : byte absolute $041F; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1OCON1 : byte absolute $0698; + CWG1OCON1_OED : bit absolute CWG1OCON1.3; + CWG1OCON1_OEC : bit absolute CWG1OCON1.2; + CWG1OCON1_OEB : bit absolute CWG1OCON1.1; + CWG1OCON1_OEA : bit absolute CWG1OCON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON0_SEN : bit absolute WDTCON0.0; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-119:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11D:SFR'} // Bank 2 : ZCD1CON, APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '691-69A:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1, CWG1OCON1, CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:C7'} // PIR1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:67'} // PIR2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:30'} // PIR3 bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:EF'} // T2HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:07'} // T2CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:C7'} // PIE1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:67'} // PIE2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:30'} // PIE3 bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:5F'} // OSCSTAT bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:F3'} // ZCD1CON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:69'} // APFCON bits 7,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:03'} // CCP1CAP bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:03'} // CCP2CAP bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:0F'} // CCPTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '416:EF'} // T4HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:07'} // T4CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41D:EF'} // T6HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:07'} // T6CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:0F'} // CWG1OCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:07'} // CWG1ISM bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:03'} // SCANTRIG bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:07'} // SMT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // SMT1WIN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:07'} // SMT2SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:0F'} // SMT2WIN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/SMT1WIN/CWG1A/T1CKI/T2IN/CCP1/IOCA5 + // Pin 3 : CLKOUT/SMT1SIG/AN3/C1IN1-/CWG1B/T1G/IOCA4/RA4 + // Pin 4 : RA3/SMT2WIN/T1G/T6IN/IOCA3/VPP/nMCLR/MCLR + // Pin 5 : RA2/SMT2SIG/ZCD1IN/AN2/CWG1A/CWG1IN/C1OUT/T0CKI/T4IN/CCP1/INT/IOCA2 + // Pin 6 : RA1/ZCD1OUT/VREF+DAC/VREF+ADC/AN1/C1IN0-/IOCA1 + // Pin 7 : RA0/DAC1OUT/AN0/C1IN+/CWG1B/CCP2/IOCA0 + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0 kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC12F1822.pas b/devices17/PIC12F1822.pas new file mode 100644 index 00000000..0a17f761 --- /dev/null +++ b/devices17/PIC12F1822.pas @@ -0,0 +1,685 @@ +unit PIC12F1822; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1822'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_RXDTSEL : bit absolute APFCON.7; + APFCON_SDOSEL : bit absolute APFCON.6; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_TXCKSEL : bit absolute APFCON.2; + APFCON_P1BSEL : bit absolute APFCON.1; + APFCON_CCP1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-11B:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:B8'} // PIR2 bits 6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:03'} // CPSCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:B8'} // PIE2 bits 6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F1'} // CM1CON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:DD'} // SRCON1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EF'} // APFCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/SRNQ/P1A/CCP1/DT/RX + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/C1IN1-/CLKR/SDO/CK/TX/P1B/T1G/MDCIN2 + // Pin 4 : RA3/SS/T1G/VPP/MCLR + // Pin 5 : RA2/AN2/CPS2/C1OUT/SRQ/T0CKI/CCP1/P1A/FLT0/SDA/SDI/INT/MDCIN1 + // Pin 6 : RA1/AN1/CPS1/VREF/C1IN0-/SRI/RX/DT/SCL/SCK/MDMIN/ICSPCLK + // Pin 7 : RA0/AN0/CPS0/C1IN+/DACOUT/TX/CK/SDO/SS/P1B/MDOUT/ICSPDAT + // Pin 8 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC12F1840.pas b/devices17/PIC12F1840.pas new file mode 100644 index 00000000..b8e598e6 --- /dev/null +++ b/devices17/PIC12F1840.pas @@ -0,0 +1,691 @@ +unit PIC12F1840; + +// Define hardware +{$SET PIC_MODEL = 'PIC12F1840'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_RXDTSEL : bit absolute APFCON.7; + APFCON_SDOSEL : bit absolute APFCON.6; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_TXCKSEL : bit absolute APFCON.2; + APFCON_P1BSEL : bit absolute APFCON.1; + APFCON_CCP1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-11B:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:B8'} // PIR2 bits 6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:03'} // CPSCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:B8'} // PIE2 bits 6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F1'} // CM1CON1 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:DD'} // SRCON1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EF'} // APFCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/SRNQ/P1A/CCP1/DT/RX + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/C1IN1-/CLKR/SDO/CK/TX/P1B/T1G/MDCIN2 + // Pin 4 : RA3/SS/T1G/MCLR/Vpp + // Pin 5 : RA2/AN2/CPS2/C1OUT/SRQ/T0CKI/CCP1/P1A/FLT0/SDA/SDI/INT/MDCIN1 + // Pin 6 : RA1/AN1/CPS1/Vref/C1IN0-/SRI/RX/DT/SCL/SCK/MDMIN/ICSPCLK/ICPCLK + // Pin 7 : RA0/AN0/CPS0/C1IN+/DACOUT/TX/CK/SDO/SS/P1B/MDOUT/ICSPDAT/ICDDAT + // Pin 8 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1454.pas b/devices17/PIC16F1454.pas new file mode 100644 index 00000000..a7bb641f --- /dev/null +++ b/devices17/PIC16F1454.pas @@ -0,0 +1,705 @@ +unit PIC16F1454; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1454'} +{$SET PIC_MAXFREQ = 48000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_USBIF : bit absolute PIR2.2; + PIR2_ACTIF : bit absolute PIR2.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_USBIE : bit absolute PIE2.2; + PIE2_ACTIE : bit absolute PIE2.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN6 : bit absolute OSCTUNE.6; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_SPLLMULT : bit absolute OSCCON.6; + OSCCON_IRCF3 : bit absolute OSCCON.5; + OSCCON_IRCF2 : bit absolute OSCCON.4; + OSCCON_IRCF1 : bit absolute OSCCON.3; + OSCCON_IRCF0 : bit absolute OSCCON.2; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLRDY : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + APFCON : byte absolute $011D; + APFCON_CLKRSEL : bit absolute APFCON.7; + APFCON_SDOSEL : bit absolute APFCON.6; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_P2SEL : bit absolute APFCON.2; + ANSELA : byte absolute $018C; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSP1M3 : bit absolute SSP1CON1.3; + SSP1CON1_SSP1M2 : bit absolute SSP1CON1.2; + SSP1CON1_SSP1M1 : bit absolute SSP1CON1.1; + SSP1CON1_SSP1M0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRCD1 : bit absolute CLKRCON.4; + CLKRCON_CLKRCD0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + ACTCON : byte absolute $039B; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTSRC : bit absolute ACTCON.4; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + UCON : byte absolute $0E8E; + UCON_PPBRST : bit absolute UCON.6; + UCON_SE0 : bit absolute UCON.5; + UCON_PKTDIS : bit absolute UCON.4; + UCON_USBEN : bit absolute UCON.3; + UCON_RESUME : bit absolute UCON.2; + UCON_SUSPND : bit absolute UCON.1; + USTAT : byte absolute $0E8F; + USTAT_ENDP3 : bit absolute USTAT.6; + USTAT_ENDP2 : bit absolute USTAT.5; + USTAT_ENDP1 : bit absolute USTAT.4; + USTAT_ENDP0 : bit absolute USTAT.3; + USTAT_DIR : bit absolute USTAT.2; + USTAT_PPBI : bit absolute USTAT.1; + UIR : byte absolute $0E90; + UIR_SOFIF : bit absolute UIR.6; + UIR_STALLIF : bit absolute UIR.5; + UIR_IDLEIF : bit absolute UIR.4; + UIR_TRNIF : bit absolute UIR.3; + UIR_ACTVIF : bit absolute UIR.2; + UIR_UERRIF : bit absolute UIR.1; + UIR_URSTIF : bit absolute UIR.0; + UCFG : byte absolute $0E91; + UCFG_UTEYE : bit absolute UCFG.7; + UCFG_UPUEN : bit absolute UCFG.4; + UCFG_FSEN : bit absolute UCFG.2; + UCFG_PPB1 : bit absolute UCFG.1; + UCFG_PPB0 : bit absolute UCFG.0; + UIE : byte absolute $0E92; + UIE_SOFIE : bit absolute UIE.6; + UIE_STALLIE : bit absolute UIE.5; + UIE_IDLEIE : bit absolute UIE.4; + UIE_TRNIE : bit absolute UIE.3; + UIE_ACTVIE : bit absolute UIE.2; + UIE_UERRIE : bit absolute UIE.1; + UIE_URSTIE : bit absolute UIE.0; + UEIR : byte absolute $0E93; + UEIR_BTSEF : bit absolute UEIR.7; + UEIR_BTOEF : bit absolute UEIR.4; + UEIR_DFN8EF : bit absolute UEIR.3; + UEIR_CRC16EF : bit absolute UEIR.2; + UEIR_CRC5EF : bit absolute UEIR.1; + UEIR_PIDEF : bit absolute UEIR.0; + UFRMH : byte absolute $0E94; + UFRMH_FRM10 : bit absolute UFRMH.2; + UFRMH_FRM9 : bit absolute UFRMH.1; + UFRMH_FRM8 : bit absolute UFRMH.0; + UFRML : byte absolute $0E95; + UFRML_FRM7 : bit absolute UFRML.7; + UFRML_FRM6 : bit absolute UFRML.6; + UFRML_FRM5 : bit absolute UFRML.5; + UFRML_FRM4 : bit absolute UFRML.4; + UFRML_FRM3 : bit absolute UFRML.3; + UFRML_FRM2 : bit absolute UFRML.2; + UFRML_FRM1 : bit absolute UFRML.1; + UFRML_FRM0 : bit absolute UFRML.0; + UADDR : byte absolute $0E96; + UADDR_ADDR6 : bit absolute UADDR.6; + UADDR_ADDR5 : bit absolute UADDR.5; + UADDR_ADDR4 : bit absolute UADDR.4; + UADDR_ADDR3 : bit absolute UADDR.3; + UADDR_ADDR2 : bit absolute UADDR.2; + UADDR_ADDR1 : bit absolute UADDR.1; + UADDR_ADDR0 : bit absolute UADDR.0; + UEIE : byte absolute $0E97; + UEIE_BTSEE : bit absolute UEIE.7; + UEIE_BTOEE : bit absolute UEIE.4; + UEIE_DFN8EE : bit absolute UEIE.3; + UEIE_CRC16EE : bit absolute UEIE.2; + UEIE_CRC5EE : bit absolute UEIE.1; + UEIE_PIDEE : bit absolute UEIE.0; + UEP0 : byte absolute $0E98; + UEP0_EPHSHK : bit absolute UEP0.4; + UEP0_EPCONDIS : bit absolute UEP0.3; + UEP0_EPOUTEN : bit absolute UEP0.2; + UEP0_EPINEN : bit absolute UEP0.1; + UEP0_EPSTALL : bit absolute UEP0.0; + UEP1 : byte absolute $0E99; + UEP2 : byte absolute $0E9A; + UEP3 : byte absolute $0E9B; + UEP4 : byte absolute $0E9C; + UEP5 : byte absolute $0E9D; + UEP6 : byte absolute $0E9E; + UEP7 : byte absolute $0E9F; + STATUS_SHAD : byte absolute $0FE4; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09A:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '330-36F:GPR'} + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39B:SFR'} // Bank 7 : CLKRCON, ACTCON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '611-616:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'E8E-E9F:SFR'} // Bank 29 : UCON, USTAT, UIR, UCFG, UIE, UEIR, UFRMH, UFRML, UADDR, UEIE, UEP0, UEP1, UEP2, UEP3, UEP4, UEP5, UEP6, UEP7 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3B'} // PORTA bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:BB'} // PIR1 bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:8E'} // PIR2 bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:30'} // TRISA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:BB'} // PIE1 bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:8E'} // PIE2 bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:7F'} // OSCTUNE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:F3'} // OSCSTAT bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:30'} // LATA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:C0'} // FVRCON bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EC'} // APFCON bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:00'} // ANSELA bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:38'} // WPUA bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3B'} // IOCAP bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3B'} // IOCAN bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3B'} // IOCAF bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:DA'} // ACTCON bits 5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8E:7E'} // UCON bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:7E'} // USTAT bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:7F'} // UIR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:97'} // UCFG bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:7F'} // UIE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:9F'} // UEIR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:07'} // UFRMH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:7F'} // UADDR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:9F'} // UEIE bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // UEP0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // UEP1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // UEP2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // UEP3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // UEP4 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // UEP5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // UEP6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // UEP7 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/SOSCI/T1CKI/PWM2/CLKIN/OSC1 + // Pin 3 : RA4/SOSCO/T1G/SDO/CLKOUT/OSC2/CLKR + // Pin 4 : RA3/T1G/SS/MCLR/VPP + // Pin 5 : RC5/RX_DT/T0CKI/PWM1 + // Pin 6 : RC4/TX_CK + // Pin 7 : RC3/SS/PWM2/CLKR + // Pin 8 : RC2/SDO + // Pin 9 : RC1/INT/SDI/SDA/ICSPCLK + // Pin 10 : RC0/SCK/SCL/ICSPDAT + // Pin 11 : VUSB3V3 + // Pin 12 : RA1/D-/ICSPCLK + // Pin 13 : RA0/D+/ICSPDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to 0FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // CPUDIV : CPU System Clock Selection Bit + {$define _CPUDIV_CLKDIV6 = $3FFF} // CPU system clock divided by 6 + {$define _CPUDIV_CLKDIV3 = $3FEF} // CPU system clock divided by 3 + {$define _CPUDIV_CLKDIV2 = $3FDF} // CPU system clock divided by 2 + {$define _CPUDIV_NOCLKDIV = $3FCF} // NO CPU system divide + + // USBLSCLK : USB Low SPeed Clock Selection bit + {$define _USBLSCLK_48MHz = $3FFF} // System clock expects 48 MHz, FS/LS USB CLKENs divide-by is set to 8. + {$define _USBLSCLK_24MHz = $3FBF} // System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4. + + // PLLMULT : PLL Multipler Selection Bit + {$define _PLLMULT_3x = $3FFF} // 3x Output Frequency Selected + {$define _PLLMULT_4x = $3F7F} // 4x Output Frequency Selected + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ENABLED = $3FFF} // 3x or 4x PLL Enabled + {$define _PLLEN_DISABLED = $3EFF} // 3x or 4x PLL Disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1455.pas b/devices17/PIC16F1455.pas new file mode 100644 index 00000000..36e6110a --- /dev/null +++ b/devices17/PIC16F1455.pas @@ -0,0 +1,835 @@ +unit PIC16F1455; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1455'} +{$SET PIC_MAXFREQ = 48000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_USBIF : bit absolute PIR2.2; + PIR2_ACTIF : bit absolute PIR2.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_USBIE : bit absolute PIE2.2; + PIE2_ACTIE : bit absolute PIE2.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN6 : bit absolute OSCTUNE.6; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_SPLLMULT : bit absolute OSCCON.6; + OSCCON_IRCF3 : bit absolute OSCCON.5; + OSCCON_IRCF2 : bit absolute OSCCON.4; + OSCCON_IRCF1 : bit absolute OSCCON.3; + OSCCON_IRCF0 : bit absolute OSCCON.2; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLRDY : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_D1PSS1 : bit absolute DACCON0.3; + DACCON0_D1PSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_CLKRSEL : bit absolute APFCON.7; + APFCON_SDOSEL : bit absolute APFCON.6; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_P2SEL : bit absolute APFCON.2; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSP1M3 : bit absolute SSP1CON1.3; + SSP1CON1_SSP1M2 : bit absolute SSP1CON1.2; + SSP1CON1_SSP1M1 : bit absolute SSP1CON1.1; + SSP1CON1_SSP1M0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRCD1 : bit absolute CLKRCON.4; + CLKRCON_CLKRCD0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + ACTCON : byte absolute $039B; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTSRC : bit absolute ACTCON.4; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + UCON : byte absolute $0E8E; + UCON_PPBRST : bit absolute UCON.6; + UCON_SE0 : bit absolute UCON.5; + UCON_PKTDIS : bit absolute UCON.4; + UCON_USBEN : bit absolute UCON.3; + UCON_RESUME : bit absolute UCON.2; + UCON_SUSPND : bit absolute UCON.1; + USTAT : byte absolute $0E8F; + USTAT_ENDP3 : bit absolute USTAT.6; + USTAT_ENDP2 : bit absolute USTAT.5; + USTAT_ENDP1 : bit absolute USTAT.4; + USTAT_ENDP0 : bit absolute USTAT.3; + USTAT_DIR : bit absolute USTAT.2; + USTAT_PPBI : bit absolute USTAT.1; + UIR : byte absolute $0E90; + UIR_SOFIF : bit absolute UIR.6; + UIR_STALLIF : bit absolute UIR.5; + UIR_IDLEIF : bit absolute UIR.4; + UIR_TRNIF : bit absolute UIR.3; + UIR_ACTVIF : bit absolute UIR.2; + UIR_UERRIF : bit absolute UIR.1; + UIR_URSTIF : bit absolute UIR.0; + UCFG : byte absolute $0E91; + UCFG_UTEYE : bit absolute UCFG.7; + UCFG_UPUEN : bit absolute UCFG.4; + UCFG_FSEN : bit absolute UCFG.2; + UCFG_PPB1 : bit absolute UCFG.1; + UCFG_PPB0 : bit absolute UCFG.0; + UIE : byte absolute $0E92; + UIE_SOFIE : bit absolute UIE.6; + UIE_STALLIE : bit absolute UIE.5; + UIE_IDLEIE : bit absolute UIE.4; + UIE_TRNIE : bit absolute UIE.3; + UIE_ACTVIE : bit absolute UIE.2; + UIE_UERRIE : bit absolute UIE.1; + UIE_URSTIE : bit absolute UIE.0; + UEIR : byte absolute $0E93; + UEIR_BTSEF : bit absolute UEIR.7; + UEIR_BTOEF : bit absolute UEIR.4; + UEIR_DFN8EF : bit absolute UEIR.3; + UEIR_CRC16EF : bit absolute UEIR.2; + UEIR_CRC5EF : bit absolute UEIR.1; + UEIR_PIDEF : bit absolute UEIR.0; + UFRMH : byte absolute $0E94; + UFRMH_FRM10 : bit absolute UFRMH.2; + UFRMH_FRM9 : bit absolute UFRMH.1; + UFRMH_FRM8 : bit absolute UFRMH.0; + UFRML : byte absolute $0E95; + UFRML_FRM7 : bit absolute UFRML.7; + UFRML_FRM6 : bit absolute UFRML.6; + UFRML_FRM5 : bit absolute UFRML.5; + UFRML_FRM4 : bit absolute UFRML.4; + UFRML_FRM3 : bit absolute UFRML.3; + UFRML_FRM2 : bit absolute UFRML.2; + UFRML_FRM1 : bit absolute UFRML.1; + UFRML_FRM0 : bit absolute UFRML.0; + UADDR : byte absolute $0E96; + UADDR_ADDR6 : bit absolute UADDR.6; + UADDR_ADDR5 : bit absolute UADDR.5; + UADDR_ADDR4 : bit absolute UADDR.4; + UADDR_ADDR3 : bit absolute UADDR.3; + UADDR_ADDR2 : bit absolute UADDR.2; + UADDR_ADDR1 : bit absolute UADDR.1; + UADDR_ADDR0 : bit absolute UADDR.0; + UEIE : byte absolute $0E97; + UEIE_BTSEE : bit absolute UEIE.7; + UEIE_BTOEE : bit absolute UEIE.4; + UEIE_DFN8EE : bit absolute UEIE.3; + UEIE_CRC16EE : bit absolute UEIE.2; + UEIE_CRC5EE : bit absolute UEIE.1; + UEIE_PIDEE : bit absolute UEIE.0; + UEP0 : byte absolute $0E98; + UEP0_EPHSHK : bit absolute UEP0.4; + UEP0_EPCONDIS : bit absolute UEP0.3; + UEP0_EPOUTEN : bit absolute UEP0.2; + UEP0_EPINEN : bit absolute UEP0.1; + UEP0_EPSTALL : bit absolute UEP0.0; + UEP1 : byte absolute $0E99; + UEP2 : byte absolute $0E9A; + UEP3 : byte absolute $0E9B; + UEP4 : byte absolute $0E9C; + UEP5 : byte absolute $0E9D; + UEP6 : byte absolute $0E9E; + UEP7 : byte absolute $0E9F; + STATUS_SHAD : byte absolute $0FE4; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '330-36F:GPR'} + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39B:SFR'} // Bank 7 : CLKRCON, ACTCON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '611-616:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'E8E-E9F:SFR'} // Bank 29 : UCON, USTAT, UIR, UCFG, UIE, UEIR, UFRMH, UFRML, UADDR, UEIE, UEP0, UEP1, UEP2, UEP3, UEP4, UEP5, UEP6, UEP7 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3B'} // PORTA bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FB'} // PIR1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EE'} // PIR2 bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:30'} // TRISA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:FB'} // PIE1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EE'} // PIE2 bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:7F'} // OSCTUNE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:F3'} // OSCSTAT bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON2 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:30'} // LATA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BC'} // DACCON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EC'} // APFCON bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:10'} // ANSELA bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:38'} // WPUA bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3B'} // IOCAP bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3B'} // IOCAN bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3B'} // IOCAF bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:DA'} // ACTCON bits 5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F3'} // CWG1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8E:7E'} // UCON bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:7E'} // USTAT bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:7F'} // UIR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:97'} // UCFG bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:7F'} // UIE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:9F'} // UEIR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:07'} // UFRMH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:7F'} // UADDR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:9F'} // UEIE bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // UEP0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // UEP1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // UEP2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // UEP3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // UEP4 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // UEP5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // UEP6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // UEP7 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/SOSCI/T1CKI/PWM2/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SDO/T1G/CLKR/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/SS/T1G/MCLR/VPP + // Pin 5 : RC5/RX_DT/T0CKI/PWM1/CWG1A + // Pin 6 : RC4/TX_CK/C2OUT/C1OUT/CWG1B + // Pin 7 : RC3/AN7/SS/PWM2/CLKR/C2IN3-/C1IN3-/DACOUT2 + // Pin 8 : RC2/AN6/SDO/C2IN2-/C1IN2-/DACOUT1 + // Pin 9 : RC1/AN5/INT/SDI/SDA/CWGFLT/C2IN1-/C1IN1-/ICSPCLK + // Pin 10 : RC0/AN4/SCK/SCL/C2IN+/C1IN+/VREF+/ICSPDAT + // Pin 11 : VUSB3V3 + // Pin 12 : RA1/D-/ICSPCLK + // Pin 13 : RA0/D+/ICSPDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to 0FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // CPUDIV : CPU System Clock Selection Bit + {$define _CPUDIV_CLKDIV6 = $3FFF} // CPU system clock divided by 6 + {$define _CPUDIV_CLKDIV3 = $3FEF} // CPU system clock divided by 3 + {$define _CPUDIV_CLKDIV2 = $3FDF} // CPU system clock divided by 2 + {$define _CPUDIV_NOCLKDIV = $3FCF} // NO CPU system divide + + // USBLSCLK : USB Low SPeed Clock Selection bit + {$define _USBLSCLK_48MHz = $3FFF} // System clock expects 48 MHz, FS/LS USB CLKENs divide-by is set to 8. + {$define _USBLSCLK_24MHz = $3FBF} // System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4. + + // PLLMULT : PLL Multipler Selection Bit + {$define _PLLMULT_3x = $3FFF} // 3x Output Frequency Selected + {$define _PLLMULT_4x = $3F7F} // 4x Output Frequency Selected + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ENABLED = $3FFF} // 3x or 4x PLL Enabled + {$define _PLLEN_DISABLED = $3EFF} // 3x or 4x PLL Disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1459.pas b/devices17/PIC16F1459.pas new file mode 100644 index 00000000..5b70fffb --- /dev/null +++ b/devices17/PIC16F1459.pas @@ -0,0 +1,887 @@ +unit PIC16F1459; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1459'} +{$SET PIC_MAXFREQ = 48000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_USBIF : bit absolute PIR2.2; + PIR2_ACTIF : bit absolute PIR2.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_USBIE : bit absolute PIE2.2; + PIE2_ACTIE : bit absolute PIE2.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN6 : bit absolute OSCTUNE.6; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_SPLLMULT : bit absolute OSCCON.6; + OSCCON_IRCF3 : bit absolute OSCCON.5; + OSCCON_IRCF2 : bit absolute OSCCON.4; + OSCCON_IRCF1 : bit absolute OSCCON.3; + OSCCON_IRCF0 : bit absolute OSCCON.2; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLRDY : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_D1PSS1 : bit absolute DACCON0.3; + DACCON0_D1PSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_CLKRSEL : bit absolute APFCON.7; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSP1M3 : bit absolute SSP1CON1.3; + SSP1CON1_SSP1M2 : bit absolute SSP1CON1.2; + SSP1CON1_SSP1M1 : bit absolute SSP1CON1.1; + SSP1CON1_SSP1M0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRCD1 : bit absolute CLKRCON.4; + CLKRCON_CLKRCD0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + ACTCON : byte absolute $039B; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTSRC : bit absolute ACTCON.4; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + UCON : byte absolute $0E8E; + UCON_PPBRST : bit absolute UCON.6; + UCON_SE0 : bit absolute UCON.5; + UCON_PKTDIS : bit absolute UCON.4; + UCON_USBEN : bit absolute UCON.3; + UCON_RESUME : bit absolute UCON.2; + UCON_SUSPND : bit absolute UCON.1; + USTAT : byte absolute $0E8F; + USTAT_ENDP3 : bit absolute USTAT.6; + USTAT_ENDP2 : bit absolute USTAT.5; + USTAT_ENDP1 : bit absolute USTAT.4; + USTAT_ENDP0 : bit absolute USTAT.3; + USTAT_DIR : bit absolute USTAT.2; + USTAT_PPBI : bit absolute USTAT.1; + UIR : byte absolute $0E90; + UIR_SOFIF : bit absolute UIR.6; + UIR_STALLIF : bit absolute UIR.5; + UIR_IDLEIF : bit absolute UIR.4; + UIR_TRNIF : bit absolute UIR.3; + UIR_ACTVIF : bit absolute UIR.2; + UIR_UERRIF : bit absolute UIR.1; + UIR_URSTIF : bit absolute UIR.0; + UCFG : byte absolute $0E91; + UCFG_UTEYE : bit absolute UCFG.7; + UCFG_UPUEN : bit absolute UCFG.4; + UCFG_FSEN : bit absolute UCFG.2; + UCFG_PPB1 : bit absolute UCFG.1; + UCFG_PPB0 : bit absolute UCFG.0; + UIE : byte absolute $0E92; + UIE_SOFIE : bit absolute UIE.6; + UIE_STALLIE : bit absolute UIE.5; + UIE_IDLEIE : bit absolute UIE.4; + UIE_TRNIE : bit absolute UIE.3; + UIE_ACTVIE : bit absolute UIE.2; + UIE_UERRIE : bit absolute UIE.1; + UIE_URSTIE : bit absolute UIE.0; + UEIR : byte absolute $0E93; + UEIR_BTSEF : bit absolute UEIR.7; + UEIR_BTOEF : bit absolute UEIR.4; + UEIR_DFN8EF : bit absolute UEIR.3; + UEIR_CRC16EF : bit absolute UEIR.2; + UEIR_CRC5EF : bit absolute UEIR.1; + UEIR_PIDEF : bit absolute UEIR.0; + UFRMH : byte absolute $0E94; + UFRMH_FRM10 : bit absolute UFRMH.2; + UFRMH_FRM9 : bit absolute UFRMH.1; + UFRMH_FRM8 : bit absolute UFRMH.0; + UFRML : byte absolute $0E95; + UFRML_FRM7 : bit absolute UFRML.7; + UFRML_FRM6 : bit absolute UFRML.6; + UFRML_FRM5 : bit absolute UFRML.5; + UFRML_FRM4 : bit absolute UFRML.4; + UFRML_FRM3 : bit absolute UFRML.3; + UFRML_FRM2 : bit absolute UFRML.2; + UFRML_FRM1 : bit absolute UFRML.1; + UFRML_FRM0 : bit absolute UFRML.0; + UADDR : byte absolute $0E96; + UADDR_ADDR6 : bit absolute UADDR.6; + UADDR_ADDR5 : bit absolute UADDR.5; + UADDR_ADDR4 : bit absolute UADDR.4; + UADDR_ADDR3 : bit absolute UADDR.3; + UADDR_ADDR2 : bit absolute UADDR.2; + UADDR_ADDR1 : bit absolute UADDR.1; + UADDR_ADDR0 : bit absolute UADDR.0; + UEIE : byte absolute $0E97; + UEIE_BTSEE : bit absolute UEIE.7; + UEIE_BTOEE : bit absolute UEIE.4; + UEIE_DFN8EE : bit absolute UEIE.3; + UEIE_CRC16EE : bit absolute UEIE.2; + UEIE_CRC5EE : bit absolute UEIE.1; + UEIE_PIDEE : bit absolute UEIE.0; + UEP0 : byte absolute $0E98; + UEP0_EPHSHK : bit absolute UEP0.4; + UEP0_EPCONDIS : bit absolute UEP0.3; + UEP0_EPOUTEN : bit absolute UEP0.2; + UEP0_EPINEN : bit absolute UEP0.1; + UEP0_EPSTALL : bit absolute UEP0.0; + UEP1 : byte absolute $0E99; + UEP2 : byte absolute $0E9A; + UEP3 : byte absolute $0E9B; + UEP4 : byte absolute $0E9C; + UEP5 : byte absolute $0E9D; + UEP6 : byte absolute $0E9E; + UEP7 : byte absolute $0E9F; + STATUS_SHAD : byte absolute $0FE4; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '330-36F:GPR'} + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39B:SFR'} // Bank 7 : CLKRCON, ACTCON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '611-616:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'E8E-E9F:SFR'} // Bank 29 : UCON, USTAT, UIR, UCFG, UIE, UEIR, UFRMH, UFRML, UADDR, UEIE, UEP0, UEP1, UEP2, UEP3, UEP4, UEP5, UEP6, UEP7 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3B'} // PORTA bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FB'} // PIR1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EE'} // PIR2 bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:30'} // TRISA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:FB'} // PIE1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EE'} // PIE2 bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:7F'} // OSCTUNE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:F3'} // OSCSTAT bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:70'} // ADCON2 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:30'} // LATA bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BC'} // DACCON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:A8'} // APFCON bits 6,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:10'} // ANSELA bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:38'} // WPUA bits 7,6,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3B'} // IOCAP bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3B'} // IOCAN bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3B'} // IOCAF bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:DA'} // ACTCON bits 5,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F3'} // CWG1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8E:7E'} // UCON bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:7E'} // USTAT bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:7F'} // UIR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:97'} // UCFG bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:7F'} // UIE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:9F'} // UEIR bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:07'} // UFRMH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:7F'} // UADDR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:9F'} // UEIE bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // UEP0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // UEP1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // UEP2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // UEP3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // UEP4 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // UEP5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // UEP6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // UEP7 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/SOSCI/T1CKI/OSC1/CLKIN + // Pin 3 : RA4/AN3/SOSCO/T1G/OSC2/CLKOUT/CLKR + // Pin 4 : RA3/SS/T1G/MCLR/VPP + // Pin 5 : RC5/T0CKI/PWM1/CWG1A + // Pin 6 : RC4/C2OUT/C1OUT/CWG1B + // Pin 7 : RC3/AN7/DACOUT2/C2IN3-/C1IN3-/CLKR + // Pin 8 : RC6/AN8/SS/PWM2 + // Pin 9 : RC7/AN9/SDO + // Pin 10 : RB7/TX_CK + // Pin 11 : RB6/SCK/SCL + // Pin 12 : RB5/AN11/RX_DT + // Pin 13 : RB4/AN10/SDI/SDA + // Pin 14 : RC2/AN6/C2IN2-/C1IN2-/DACOUT1 + // Pin 15 : RC1/INT/CWGFLT_n/C2IN1-/C1IN1-/AN5/ICDCLK/ICSPCLK + // Pin 16 : RC0/AN4/C2IN+/C1IN+/VREF+/ICSPDAT + // Pin 17 : VUSB3V3 + // Pin 18 : RA1/D-/ICSPCLK + // Pin 19 : RA0/D+/ICSPDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to 0FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // CPUDIV : CPU System Clock Selection Bit + {$define _CPUDIV_CLKDIV6 = $3FFF} // CPU system clock divided by 6 + {$define _CPUDIV_CLKDIV3 = $3FEF} // CPU system clock divided by 3 + {$define _CPUDIV_CLKDIV2 = $3FDF} // CPU system clock divided by 2 + {$define _CPUDIV_NOCLKDIV = $3FCF} // NO CPU system divide + + // USBLSCLK : USB Low SPeed Clock Selection bit + {$define _USBLSCLK_48MHz = $3FFF} // System clock expects 48 MHz, FS/LS USB CLKENs divide-by is set to 8. + {$define _USBLSCLK_24MHz = $3FBF} // System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4. + + // PLLMULT : PLL Multipler Selection Bit + {$define _PLLMULT_3x = $3FFF} // 3x Output Frequency Selected + {$define _PLLMULT_4x = $3F7F} // 4x Output Frequency Selected + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ENABLED = $3FFF} // 3x or 4x PLL Enabled + {$define _PLLEN_DISABLED = $3EFF} // 3x or 4x PLL Disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1503.pas b/devices17/PIC16F1503.pas new file mode 100644 index 00000000..ada61328 --- /dev/null +++ b/devices17/PIC16F1503.pas @@ -0,0 +1,882 @@ +unit PIC16F1503; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1503'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_NCO1IF : bit absolute PIR2.2; + PIR3 : byte absolute $0013; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_NCO1IE : bit absolute PIE2.2; + PIE3 : byte absolute $0093; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_SDOSEL : bit absolute APFCON.5; + APFCON_SSSEL : bit absolute APFCON.4; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CLC1SEL : bit absolute APFCON.1; + APFCON_NCO1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OE : bit absolute PWM3CON.6; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OE : bit absolute PWM4CON.6; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSCLC2 : bit absolute CWG1CON2.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OE : bit absolute CLC1CON.6; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; + CLC1GLS0 : byte absolute $0F14; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F15; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F16; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F17; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F18; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OE : bit absolute CLC2CON.6; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F19; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1A; + CLC2SEL0_LC2D2S2 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D2S1 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D2S0 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1B; + CLC2SEL1_LC2D4S2 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D4S1 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D4S0 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D3S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D3S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D3S0 : bit absolute CLC2SEL1.0; + CLC2GLS0 : byte absolute $0F1C; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F1D; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F1E; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F1F; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + BSR_ICDSHAD : byte absolute $0FE3; + BSR_ICDSHAD_BSR_ICDSHAD4 : bit absolute BSR_ICDSHAD.4; + BSR_ICDSHAD_BSR_ICDSHAD3 : bit absolute BSR_ICDSHAD.3; + BSR_ICDSHAD_BSR_ICDSHAD2 : bit absolute BSR_ICDSHAD.2; + BSR_ICDSHAD_BSR_ICDSHAD1 : bit absolute BSR_ICDSHAD.1; + BSR_ICDSHAD_BSR_ICDSHAD0 : bit absolute BSR_ICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09F:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '611-61C:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'F0F-F1F:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSR_ICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:CB'} // PIR1 bits 5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:6C'} // PIR2 bits 7,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:03'} // PIR3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:CB'} // PIE1 bits 5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:6C'} // PIE2 bits 7,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:03'} // PIE3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // OSCSTAT bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:B4'} // DACCON0 bits 6,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:3B'} // APFCON bits 7,6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:F0'} // PWM3CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM4CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CF'} // CWG1CON2 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:77'} // CLC2SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:77'} // CLC2SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSR_ICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/T1CKI/NCO1CLK/CLC1IN1 + // Pin 3 : RA4/AN3/NCO1/SDO/T1G/CLKOUT + // Pin 4 : RA3/CLC1IN0/VPP/T1G/SS/MCLR + // Pin 5 : RC5/PWM1/CLC1/CWG1A + // Pin 6 : RC4/C2OUT/CLC2IN1/CWG1B + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/SS/PWM2/CLC2IN0 + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/SDO + // Pin 9 : RC1/AN5/C1IN1-/C2IN1-/NCO1/SDA/SDI/PWM4 + // Pin 10 : RC0/AN4/C2IN+/CLC2/SCL/SCK + // Pin 11 : RA2/AN2/C1OUT/DACOUT2/T0CKI/INT/PWM3/CLC1/CWG1FLT + // Pin 12 : RA1/AN1/VREF+/C1IN0-/C2IN0-/ICSPCLK + // Pin 13 : RA0/AN0/C1IN+/DACOUT1/ICSPDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1507.pas b/devices17/PIC16F1507.pas new file mode 100644 index 00000000..77c27202 --- /dev/null +++ b/devices17/PIC16F1507.pas @@ -0,0 +1,834 @@ +unit PIC16F1507; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1507'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_NCO1IF : bit absolute PIR2.2; + PIR3 : byte absolute $0013; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_NCO1IE : bit absolute PIE2.2; + PIE3 : byte absolute $0093; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_CLC1SEL : bit absolute APFCON.1; + APFCON_NCO1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OE : bit absolute PWM3CON.6; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OE : bit absolute PWM4CON.6; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSCLC2 : bit absolute CWG1CON2.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OE : bit absolute CLC1CON.6; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; + CLC1GLS0 : byte absolute $0F14; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F15; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F16; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F17; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F18; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OE : bit absolute CLC2CON.6; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F19; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1A; + CLC2SEL0_LC2D2S2 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D2S1 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D2S0 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1B; + CLC2SEL1_LC2D4S2 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D4S1 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D4S0 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D3S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D3S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D3S0 : bit absolute CLC2SEL1.0; + CLC2GLS0 : byte absolute $0F1C; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F1D; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F1E; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F1F; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + BSR_ICDSHAD : byte absolute $0FE3; + BSR_ICDSHAD_BSR_ICDSHAD4 : bit absolute BSR_ICDSHAD.4; + BSR_ICDSHAD_BSR_ICDSHAD3 : bit absolute BSR_ICDSHAD.3; + BSR_ICDSHAD_BSR_ICDSHAD2 : bit absolute BSR_ICDSHAD.2; + BSR_ICDSHAD_BSR_ICDSHAD1 : bit absolute BSR_ICDSHAD.1; + BSR_ICDSHAD_BSR_ICDSHAD0 : bit absolute BSR_ICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09F:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '611-61C:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'F0F-F1F:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSR_ICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:04'} // PIR2 bits 7,6,5,4,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:03'} // PIR3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:04'} // PIE2 bits 7,6,5,4,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:03'} // PIE3 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:F0'} // PWM3CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM4CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C3'} // CWG1CON2 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:77'} // CLC2SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:77'} // CLC2SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSR_ICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/T1CKI/NCO1CLK + // Pin 3 : RA4/AN3/CLKOUT/T1G + // Pin 4 : RA3/CLC1IN0/VPP/MCLR + // Pin 5 : RC5/PWM1/CLC1/CWG1A + // Pin 6 : RC4/CLC2IN1/CWG1B + // Pin 7 : RC3/AN7/PWM2/CLC2IN0 + // Pin 8 : RC6/AN8/NCO1 + // Pin 9 : RC7/AN9/CLC1IN1 + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11 + // Pin 13 : RB4/AN10 + // Pin 14 : RC2/AN6 + // Pin 15 : RC1/AN5/PWM4/NCO1 + // Pin 16 : RC0/AN4/CLC2 + // Pin 17 : RA2/AN2/T0CKI/INT/PWM3/CLC1/CWG1FLT + // Pin 18 : RA1/AN1/VREF+/ICSPCLK + // Pin 19 : RA0/AN0/ICSPDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection bits + {$define _FOSC_ECH = $3FFF} // External Clock, High Power Mode + {$define _FOSC_ECM = $3FFE} // External Clock, Medium Power Mode + {$define _FOSC_ECL = $3FFD} // External Clock, Low Power Mode + {$define _FOSC_INTOSC = $3FFC} // Internal Oscillator, I/O Function on OSC1 + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1508.pas b/devices17/PIC16F1508.pas new file mode 100644 index 00000000..637e1c4e --- /dev/null +++ b/devices17/PIC16F1508.pas @@ -0,0 +1,1201 @@ +unit PIC16F1508; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1508'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_NCO1IF : bit absolute PIR2.2; + PIR3 : byte absolute $0013; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_NCO1IE : bit absolute PIE2.2; + PIE3 : byte absolute $0093; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.4; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CLC1SEL : bit absolute APFCON.1; + APFCON_NCO1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OE : bit absolute PWM3CON.6; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OE : bit absolute PWM4CON.6; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSCLC2 : bit absolute CWG1CON2.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OE : bit absolute CLC1CON.6; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; + CLC1GLS0 : byte absolute $0F14; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F15; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F16; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F17; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F18; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OE : bit absolute CLC2CON.6; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F19; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1A; + CLC2SEL0_LC2D2S2 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D2S1 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D2S0 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1B; + CLC2SEL1_LC2D4S2 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D4S1 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D4S0 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D3S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D3S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D3S0 : bit absolute CLC2SEL1.0; + CLC2GLS0 : byte absolute $0F1C; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F1D; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F1E; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F1F; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F20; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OE : bit absolute CLC3CON.6; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F21; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F22; + CLC3SEL0_LC3D2S2 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D2S1 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D2S0 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F23; + CLC3SEL1_LC3D4S2 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D4S1 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D4S0 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D3S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D3S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D3S0 : bit absolute CLC3SEL1.0; + CLC3GLS0 : byte absolute $0F24; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F25; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F26; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F27; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F28; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OE : bit absolute CLC4CON.6; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F29; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F2A; + CLC4SEL0_LC4D2S2 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D2S1 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D2S0 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F2B; + CLC4SEL1_LC4D4S2 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D4S1 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D4S0 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D3S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D3S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D3S0 : bit absolute CLC4SEL1.0; + CLC4GLS0 : byte absolute $0F2C; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F2D; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F2E; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F2F; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09F:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '611-61C:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'F0F-F2F:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FB'} // PIR1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EC'} // PIR2 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:0F'} // PIR3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:FB'} // PIE1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EC'} // PIE2 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:0F'} // PIE3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:B4'} // DACCON0 bits 6,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:1B'} // APFCON bits 7,6,5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:F0'} // PWM3CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM4CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CF'} // CWG1CON2 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:77'} // CLC2SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:77'} // CLC2SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:77'} // CLC3SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:77'} // CLC3SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2A:77'} // CLC4SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2B:77'} // CLC4SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/T1CKI/NCO1CLK/SOSCI + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/T1G + // Pin 4 : RA3/CLC1IN0/VPP/T1G/SS/MCLR + // Pin 5 : RC5/PWM1/CLC1/CWG1A + // Pin 6 : RC4/C2OUT/CLC2IN1/CLC4/CWG1B + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/PWM2/CLC2IN0 + // Pin 8 : RC6/AN8/NCO1/CLC3IN1/SS + // Pin 9 : RC7/AN9/CLC1IN1/SDO + // Pin 10 : RB7/CLC3/TX/CK + // Pin 11 : RB6/SCL/SCK + // Pin 12 : RB5/AN11/CLC4IN0/RX/DT + // Pin 13 : RB4/AN10/CLC3IN0/SDA/SDI + // Pin 14 : RC2/AN6/C1IN2-/C2IN2- + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/PWM4/NCO1 + // Pin 16 : RC0/AN4/CLC2/C2IN+ + // Pin 17 : RA2/AN2/C1OUT/DACOUT2/T0CKI/INT/PWM3/CLC1/CWG1FLT + // Pin 18 : RA1/AN1/CLC4IN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT1/ICSPDAT/ICDDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1509.pas b/devices17/PIC16F1509.pas new file mode 100644 index 00000000..daa6dee7 --- /dev/null +++ b/devices17/PIC16F1509.pas @@ -0,0 +1,1205 @@ +unit PIC16F1509; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1509'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_NCO1IF : bit absolute PIR2.2; + PIR3 : byte absolute $0013; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_NCO1IE : bit absolute PIE2.2; + PIE3 : byte absolute $0093; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.4; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CLC1SEL : bit absolute APFCON.1; + APFCON_NCO1SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OE : bit absolute NCO1CON.6; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM1DCL : byte absolute $0611; + PWM1DCL_PWM1DCL1 : bit absolute PWM1DCL.7; + PWM1DCL_PWM1DCL0 : bit absolute PWM1DCL.6; + PWM1DCH : byte absolute $0612; + PWM1CON : byte absolute $0613; + PWM1CON_PWM1EN : bit absolute PWM1CON.7; + PWM1CON_PWM1OE : bit absolute PWM1CON.6; + PWM1CON_PWM1OUT : bit absolute PWM1CON.5; + PWM1CON_PWM1POL : bit absolute PWM1CON.4; + PWM2DCL : byte absolute $0614; + PWM2DCL_PWM2DCL1 : bit absolute PWM2DCL.7; + PWM2DCL_PWM2DCL0 : bit absolute PWM2DCL.6; + PWM2DCH : byte absolute $0615; + PWM2CON : byte absolute $0616; + PWM2CON_PWM2EN : bit absolute PWM2CON.7; + PWM2CON_PWM2OE : bit absolute PWM2CON.6; + PWM2CON_PWM2OUT : bit absolute PWM2CON.5; + PWM2CON_PWM2POL : bit absolute PWM2CON.4; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OE : bit absolute PWM3CON.6; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OE : bit absolute PWM4CON.6; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSFLT : bit absolute CWG1CON2.1; + CWG1CON2_G1ASDSCLC2 : bit absolute CWG1CON2.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OE : bit absolute CLC1CON.6; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D2S2 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D2S1 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D2S0 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D4S2 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D4S1 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D4S0 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D3S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D3S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D3S0 : bit absolute CLC1SEL1.0; + CLC1GLS0 : byte absolute $0F14; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F15; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F16; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F17; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F18; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OE : bit absolute CLC2CON.6; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F19; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1A; + CLC2SEL0_LC2D2S2 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D2S1 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D2S0 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1B; + CLC2SEL1_LC2D4S2 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D4S1 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D4S0 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D3S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D3S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D3S0 : bit absolute CLC2SEL1.0; + CLC2GLS0 : byte absolute $0F1C; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F1D; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F1E; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F1F; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F20; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OE : bit absolute CLC3CON.6; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F21; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F22; + CLC3SEL0_LC3D2S2 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D2S1 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D2S0 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F23; + CLC3SEL1_LC3D4S2 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D4S1 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D4S0 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D3S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D3S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D3S0 : bit absolute CLC3SEL1.0; + CLC3GLS0 : byte absolute $0F24; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F25; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F26; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F27; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F28; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OE : bit absolute CLC4CON.6; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F29; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F2A; + CLC4SEL0_LC4D2S2 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D2S1 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D2S0 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F2B; + CLC4SEL1_LC4D4S2 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D4S1 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D4S0 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D3S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D3S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D3S0 : bit absolute CLC4SEL1.0; + CLC4GLS0 : byte absolute $0F2C; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F2D; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F2E; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F2F; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09F:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '611-61C:SFR'} // Bank 12 : PWM1DCL, PWM1DCH, PWM1CON, PWM2DCL, PWM2DCH, PWM2CON, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'F0F-F2F:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:FB'} // PIR1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EC'} // PIR2 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:0F'} // PIR3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:FB'} // PIE1 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EC'} // PIE2 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:0F'} // PIE3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:B4'} // DACCON0 bits 6,3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:1B'} // APFCON bits 7,6,5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:00'} // NCO1INCU bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:F1'} // NCO1CON bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:C0'} // PWM1DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:F0'} // PWM1CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM2DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:F0'} // PWM2CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:F0'} // PWM3CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM4CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CF'} // CWG1CON2 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:77'} // CLC1SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:77'} // CLC1SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:77'} // CLC2SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:77'} // CLC2SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:77'} // CLC3SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:77'} // CLC3SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2A:77'} // CLC4SEL0 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2B:77'} // CLC4SEL1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/T1CKI/NCO1CLK/SOSCI + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/T1G + // Pin 4 : RA3/CLC1IN0/VPP/T1G/SS/MCLR + // Pin 5 : RC5/PWM1/CLC1/CWG1A + // Pin 6 : RC4/C2OUT/CLC2IN1/CLC4/CWG1B + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/PWM2/CLC2IN0 + // Pin 8 : RC6/AN8/NCO1/CLC3IN1/SS + // Pin 9 : RC7/AN9/CLC1IN1/SDO + // Pin 10 : RB7/CLC3/TX/CK + // Pin 11 : RB6/SCL/SCK + // Pin 12 : RB5/AN11/CLC4IN0/RX/DT + // Pin 13 : RB4/AN10/CLC3IN0/SDA/SDI + // Pin 14 : RC2/AN6/C1IN2-/C2IN2- + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/PWM4/NCO1 + // Pin 16 : RC0/AN4/CLC2/C2IN+ + // Pin 17 : RA2/AN2/C1OUT/DACOUT2/T0CKI/INT/PWM3/CLC1/CWG1FLT + // Pin 18 : RA1/AN1/CLC4IN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT1/ICSPDAT/ICDDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1512.pas b/devices17/PIC16F1512.pas new file mode 100644 index 00000000..988e35ef --- /dev/null +++ b/devices17/PIC16F1512.pas @@ -0,0 +1,717 @@ +unit PIC16F1512; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1512'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRES0L : byte absolute $009B; + ADRES0H : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + AADCON0 : byte absolute $0711; + AADCON1 : byte absolute $0712; + AADCON2 : byte absolute $0713; + AADCON2_TRIGSEL2 : bit absolute AADCON2.6; + AADCON2_TRIGSEL1 : bit absolute AADCON2.5; + AADCON2_TRIGSEL0 : bit absolute AADCON2.4; + AADCON3 : byte absolute $0714; + AADCON3_ADEPPOL : bit absolute AADCON3.7; + AADCON3_ADIPPOL : bit absolute AADCON3.6; + AADCON3_ADOLEN : bit absolute AADCON3.5; + AADCON3_ADOEN : bit absolute AADCON3.4; + AADCON3_ADOOEN : bit absolute AADCON3.3; + AADCON3_ADIPEN : bit absolute AADCON3.1; + AADCON3_ADDSEN : bit absolute AADCON3.0; + AADSTAT : byte absolute $0715; + AADSTAT_ADCONV : bit absolute AADSTAT.2; + AADSTAT_ADSTG1 : bit absolute AADSTAT.1; + AADSTAT_ADSTG0 : bit absolute AADSTAT.0; + AADPRE : byte absolute $0716; + AADPRE_ADPRE6 : bit absolute AADPRE.6; + AADPRE_ADPRE5 : bit absolute AADPRE.5; + AADPRE_ADPRE4 : bit absolute AADPRE.4; + AADPRE_ADPRE3 : bit absolute AADPRE.3; + AADPRE_ADPRE2 : bit absolute AADPRE.2; + AADPRE_ADPRE1 : bit absolute AADPRE.1; + AADPRE_ADPRE0 : bit absolute AADPRE.0; + AADACQ : byte absolute $0717; + AADACQ_ADACQ6 : bit absolute AADACQ.6; + AADACQ_ADACQ5 : bit absolute AADACQ.5; + AADACQ_ADACQ4 : bit absolute AADACQ.4; + AADACQ_ADACQ3 : bit absolute AADACQ.3; + AADACQ_ADACQ2 : bit absolute AADACQ.2; + AADACQ_ADACQ1 : bit absolute AADACQ.1; + AADACQ_ADACQ0 : bit absolute AADACQ.0; + AADGRD : byte absolute $0718; + AADGRD_GRDBOE : bit absolute AADGRD.7; + AADGRD_GRDAOE : bit absolute AADGRD.6; + AADGRD_GRDPOL : bit absolute AADGRD.5; + AADCAP : byte absolute $0719; + AADCAP_ADDCAP2 : bit absolute AADCAP.2; + AADCAP_ADDCAP1 : bit absolute AADCAP.1; + AADCAP_ADDCAP0 : bit absolute AADCAP.0; + AADRES0L : byte absolute $071A; + AADRES0H : byte absolute $071B; + AADRES1L : byte absolute $071C; + AADRES1H : byte absolute $071D; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRES0L, ADRES0H, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '711-71D:SFR'} // Bank 14 : AADCON0, AADCON1, AADCON2, AADCON3, AADSTAT, AADPRE, AADACQ, AADGRD, AADCAP, AADRES0L, AADRES0H, AADRES1L, AADRES1H + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:7F'} // AADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:F3'} // AADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:70'} // AADCON2 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:FB'} // AADCON3 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:07'} // AADSTAT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:7F'} // AADPRE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:7F'} // AADACQ bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:E0'} // AADGRD bits 4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:07'} // AADCAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO/T1CKI + // Pin 12 : RC1/SOSCI/CCP2 + // Pin 13 : RC2/AN14/CCP1 + // Pin 14 : RC3/AN15/SCK/SCL + // Pin 15 : RC4/AN16/SDI/SDA + // Pin 16 : RC5/AN17/SDO + // Pin 17 : RC6/AN18/TX/CK + // Pin 18 : RC7/AN19/RX/DT + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/INT + // Pin 22 : RB1/AN10 + // Pin 23 : RB2/AN8 + // Pin 24 : RB3/AN9/CCP2 + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13/T1G + // Pin 27 : RB6/ICSPCLK/ICDCLK + // Pin 28 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1513.pas b/devices17/PIC16F1513.pas new file mode 100644 index 00000000..c02b35f2 --- /dev/null +++ b/devices17/PIC16F1513.pas @@ -0,0 +1,718 @@ +unit PIC16F1513; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1513'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRES0L : byte absolute $009B; + ADRES0H : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + AADCON0 : byte absolute $0711; + AADCON1 : byte absolute $0712; + AADCON2 : byte absolute $0713; + AADCON2_TRIGSEL2 : bit absolute AADCON2.6; + AADCON2_TRIGSEL1 : bit absolute AADCON2.5; + AADCON2_TRIGSEL0 : bit absolute AADCON2.4; + AADCON3 : byte absolute $0714; + AADCON3_ADEPPOL : bit absolute AADCON3.7; + AADCON3_ADIPPOL : bit absolute AADCON3.6; + AADCON3_ADOLEN : bit absolute AADCON3.5; + AADCON3_ADOEN : bit absolute AADCON3.4; + AADCON3_ADOOEN : bit absolute AADCON3.3; + AADCON3_ADIPEN : bit absolute AADCON3.1; + AADCON3_ADDSEN : bit absolute AADCON3.0; + AADSTAT : byte absolute $0715; + AADSTAT_ADCONV : bit absolute AADSTAT.2; + AADSTAT_ADSTG1 : bit absolute AADSTAT.1; + AADSTAT_ADSTG0 : bit absolute AADSTAT.0; + AADPRE : byte absolute $0716; + AADPRE_ADPRE6 : bit absolute AADPRE.6; + AADPRE_ADPRE5 : bit absolute AADPRE.5; + AADPRE_ADPRE4 : bit absolute AADPRE.4; + AADPRE_ADPRE3 : bit absolute AADPRE.3; + AADPRE_ADPRE2 : bit absolute AADPRE.2; + AADPRE_ADPRE1 : bit absolute AADPRE.1; + AADPRE_ADPRE0 : bit absolute AADPRE.0; + AADACQ : byte absolute $0717; + AADACQ_ADACQ6 : bit absolute AADACQ.6; + AADACQ_ADACQ5 : bit absolute AADACQ.5; + AADACQ_ADACQ4 : bit absolute AADACQ.4; + AADACQ_ADACQ3 : bit absolute AADACQ.3; + AADACQ_ADACQ2 : bit absolute AADACQ.2; + AADACQ_ADACQ1 : bit absolute AADACQ.1; + AADACQ_ADACQ0 : bit absolute AADACQ.0; + AADGRD : byte absolute $0718; + AADGRD_GRDBOE : bit absolute AADGRD.7; + AADGRD_GRDAOE : bit absolute AADGRD.6; + AADGRD_GRDPOL : bit absolute AADGRD.5; + AADCAP : byte absolute $0719; + AADCAP_ADDCAP2 : bit absolute AADCAP.2; + AADCAP_ADDCAP1 : bit absolute AADCAP.1; + AADCAP_ADDCAP0 : bit absolute AADCAP.0; + AADRES0L : byte absolute $071A; + AADRES0H : byte absolute $071B; + AADRES1L : byte absolute $071C; + AADRES1H : byte absolute $071D; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRES0L, ADRES0H, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '711-71D:SFR'} // Bank 14 : AADCON0, AADCON1, AADCON2, AADCON3, AADSTAT, AADPRE, AADACQ, AADGRD, AADCAP, AADRES0L, AADRES0H, AADRES1L, AADRES1H + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:7F'} // AADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:F3'} // AADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:70'} // AADCON2 bits 7,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:FB'} // AADCON3 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:07'} // AADSTAT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:7F'} // AADPRE bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:7F'} // AADACQ bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:E0'} // AADGRD bits 4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:07'} // AADCAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO/T1CKI + // Pin 12 : RC1/SOSCI/CCP2 + // Pin 13 : RC2/AN14/CCP1 + // Pin 14 : RC3/AN15/SCK/SCL + // Pin 15 : RC4/AN16/SDI/SDA + // Pin 16 : RC5/AN17/SDO + // Pin 17 : RC6/AN18/TX/CK + // Pin 18 : RC7/AN19/RX/DT + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/INT + // Pin 22 : RB1/AN10 + // Pin 23 : RB2/AN8 + // Pin 24 : RB3/AN9/CCP2 + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13/T1G + // Pin 27 : RB6/ICSPCLK/ICDCLK + // Pin 28 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1516.pas b/devices17/PIC16F1516.pas new file mode 100644 index 00000000..c4a8ee3b --- /dev/null +++ b/devices17/PIC16F1516.pas @@ -0,0 +1,666 @@ +unit PIC16F1516; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1516'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO/T1CKI + // Pin 12 : RC1/SOSCI/CCP2 + // Pin 13 : RC2/AN14/CCP1 + // Pin 14 : RC3/AN15/SCK/SCL + // Pin 15 : RC4/AN16/SDI/SDA + // Pin 16 : RC5/AN17/SDO + // Pin 17 : RC6/AN18/TX/CK + // Pin 18 : RC7/AN19/RX/DT + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/INT + // Pin 22 : RB1/AN10 + // Pin 23 : RB2/AN8 + // Pin 24 : RB3/AN9/CCP2 + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13/T1G + // Pin 27 : RB6/ICSPCLK/ICDCLK + // Pin 28 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1517.pas b/devices17/PIC16F1517.pas new file mode 100644 index 00000000..95974a63 --- /dev/null +++ b/devices17/PIC16F1517.pas @@ -0,0 +1,728 @@ +unit PIC16F1517; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1517'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-012:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-092:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-110:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : RE0/AN5 + // Pin 9 : RE1/AN6 + // Pin 10 : RE2/AN7 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN + // Pin 14 : RA6/OSC2/CLKOUT + // Pin 15 : RC0/SOSCO/T1CKI + // Pin 16 : RC1/SOSCI/CCP2 + // Pin 17 : RC2/AN14/CCP1 + // Pin 18 : RC3/AN15/SCK/SCL + // Pin 19 : RD0/AN20 + // Pin 20 : RD1/AN21 + // Pin 21 : RD2/AN22 + // Pin 22 : RD3/AN23 + // Pin 23 : RC4/AN16/SDI/SDA + // Pin 24 : RC5/AN17/SDO + // Pin 25 : RC6/AN18/TX/CK + // Pin 26 : RC7/AN19/RX/DT + // Pin 27 : RD4/AN24 + // Pin 28 : RD5/AN25 + // Pin 29 : RD6/AN26 + // Pin 30 : RD7/AN27 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/INT + // Pin 34 : RB1/AN10 + // Pin 35 : RB2/AN8 + // Pin 36 : RB3/AN9/CCP2 + // Pin 37 : RB4/AN11 + // Pin 38 : RB5/AN13/T1G + // Pin 39 : RB6/ICSPCLK/ICDCLK + // Pin 40 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1518.pas b/devices17/PIC16F1518.pas new file mode 100644 index 00000000..d46e5dd1 --- /dev/null +++ b/devices17/PIC16F1518.pas @@ -0,0 +1,672 @@ +unit PIC16F1518; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1518'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO/T1CKI + // Pin 12 : RC1/SOSCI/CCP2 + // Pin 13 : RC2/AN14/CCP1 + // Pin 14 : RC3/AN15/SCK/SCL + // Pin 15 : RC4/AN16/SDI/SDA + // Pin 16 : RC5/AN17/SDO + // Pin 17 : RC6/AN18/TX/CK + // Pin 18 : RC7/AN19/RX/DT + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/INT + // Pin 22 : RB1/AN10 + // Pin 23 : RB2/AN8 + // Pin 24 : RB3/AN9/CCP2 + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13/T1G + // Pin 27 : RB6/ICSPCLK/ICDCLK + // Pin 28 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFFh write protected, 2000h to 3FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1519.pas b/devices17/PIC16F1519.pas new file mode 100644 index 00000000..3ee1c235 --- /dev/null +++ b/devices17/PIC16F1519.pas @@ -0,0 +1,734 @@ +unit PIC16F1519; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1519'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-012:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-092:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2 + {$SET_STATE_RAM '095-097:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-110:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:89'} // PIR2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:89'} // PIE2 bits 6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/SS + // Pin 3 : RA1/AN1 + // Pin 4 : RA2/AN2 + // Pin 5 : RA3/AN3/Vref+ + // Pin 6 : RA4/T0CKI + // Pin 7 : RA5/AN4/SS/Vcap + // Pin 8 : RE0/AN5 + // Pin 9 : RE1/AN6 + // Pin 10 : RE2/AN7 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN + // Pin 14 : RA6/OSC2/CLKOUT + // Pin 15 : RC0/SOSCO/T1CKI + // Pin 16 : RC1/SOSCI/CCP2 + // Pin 17 : RC2/AN14/CCP1 + // Pin 18 : RC3/AN15/SCK/SCL + // Pin 19 : RD0/AN20 + // Pin 20 : RD1/AN21 + // Pin 21 : RD2/AN22 + // Pin 22 : RD3/AN23 + // Pin 23 : RC4/AN16/SDI/SDA + // Pin 24 : RC5/AN17/SDO + // Pin 25 : RC6/AN18/TX/CK + // Pin 26 : RC7/AN19/RX/DT + // Pin 27 : RD4/AN24 + // Pin 28 : RD5/AN25 + // Pin 29 : RD6/AN26 + // Pin 30 : RD7/AN27 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/INT + // Pin 34 : RB1/AN10 + // Pin 35 : RB2/AN8 + // Pin 36 : RB3/AN9/CCP2 + // Pin 37 : RB4/AN11 + // Pin 38 : RB5/AN13/T1G + // Pin 39 : RB6/ICSPCLK/ICDCLK + // Pin 40 : RB7/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFFh write protected, 2000h to 3FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1526.pas b/devices17/PIC16F1526.pas new file mode 100644 index 00000000..9839102c --- /dev/null +++ b/devices17/PIC16F1526.pas @@ -0,0 +1,1097 @@ +unit PIC16F1526; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1526'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RC1IF : bit absolute PIR1.5; + PIR1_TX1IF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_TMR5GIF : bit absolute PIR2.6; + PIR2_TMR3GIF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR10IF : bit absolute PIR2.2; + PIR2_TMR8IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP6IF : bit absolute PIR3.7; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR5IF : bit absolute PIR3.2; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR3_TMR3IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CCP10IF : bit absolute PIR4.7; + PIR4_CCP9IF : bit absolute PIR4.6; + PIR4_RC2IF : bit absolute PIR4.5; + PIR4_TX2IF : bit absolute PIR4.4; + PIR4_CCP8IF : bit absolute PIR4.3; + PIR4_CCP7IF : bit absolute PIR4.2; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_SOSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RC1IE : bit absolute PIE1.5; + PIE1_TX1IE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_TMR5GIE : bit absolute PIE2.6; + PIE2_TMR3GIE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR10IE : bit absolute PIE2.2; + PIE2_TMR8IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP6IE : bit absolute PIE3.7; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR5IE : bit absolute PIE3.2; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE3_TMR3IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CCP10IE : bit absolute PIE4.7; + PIE4_CCP9IE : bit absolute PIE4.6; + PIE4_RC2IE : bit absolute PIE4.5; + PIE4_TX2IE : bit absolute PIE4.4; + PIE4_CCP8IE : bit absolute PIE4.3; + PIE4_CCP7IE : bit absolute PIE4.2; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_T3CKISEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE7 : bit absolute WPUE.7; + WPUE_WPUE6 : bit absolute WPUE.6; + WPUE_WPUE5 : bit absolute WPUE.5; + WPUE_WPUE4 : bit absolute WPUE.4; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + PORTF : byte absolute $028C; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + PORTG : byte absolute $028D; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS0 : byte absolute $029D; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C8TSEL1 : bit absolute CCPTMRS1.7; + CCPTMRS1_C8TSEL0 : bit absolute CCPTMRS1.6; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_C10TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_C10TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_C9TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_C9TSEL0 : bit absolute CCPTMRS2.0; + TRISF : byte absolute $030C; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + TRISG : byte absolute $030D; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + LATF : byte absolute $038C; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + LATG : byte absolute $038D; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELF : byte absolute $040C; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + ANSELG : byte absolute $040D; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_nT3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_nT5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + WPUG : byte absolute $048D; + WPUG_WPUG5 : bit absolute WPUG.5; + RC2REG : byte absolute $0491; + TX2REG : byte absolute $0492; + SP2BRGL : byte absolute $0493; + SP2BRGH : byte absolute $0494; + RC2STA : byte absolute $0495; + TX2STA : byte absolute $0496; + BAUD2CON : byte absolute $0497; + TMR8 : byte absolute $0595; + PR8 : byte absolute $0596; + T8CON : byte absolute $0597; + T8CON_T8OUTPS3 : bit absolute T8CON.6; + T8CON_T8OUTPS2 : bit absolute T8CON.5; + T8CON_T8OUTPS1 : bit absolute T8CON.4; + T8CON_T8OUTPS0 : bit absolute T8CON.3; + T8CON_TMR8ON : bit absolute T8CON.2; + T8CON_T8CKPS1 : bit absolute T8CON.1; + T8CON_T8CKPS0 : bit absolute T8CON.0; + TMR10 : byte absolute $059C; + PR10 : byte absolute $059D; + T10CON : byte absolute $059E; + T10CON_T10OUTPS3 : bit absolute T10CON.6; + T10CON_T10OUTPS2 : bit absolute T10CON.5; + T10CON_T10OUTPS1 : bit absolute T10CON.4; + T10CON_T10OUTPS0 : bit absolute T10CON.3; + T10CON_TMR10ON : bit absolute T10CON.2; + T10CON_T10CKPS1 : bit absolute T10CON.1; + T10CON_T10CKPS0 : bit absolute T10CON.0; + CCPR6L : byte absolute $0611; + CCPR6H : byte absolute $0612; + CCP6CON : byte absolute $0613; + CCP6CON_DC6B1 : bit absolute CCP6CON.5; + CCP6CON_DC6B0 : bit absolute CCP6CON.4; + CCP6CON_CCP6M3 : bit absolute CCP6CON.3; + CCP6CON_CCP6M2 : bit absolute CCP6CON.2; + CCP6CON_CCP6M1 : bit absolute CCP6CON.1; + CCP6CON_CCP6M0 : bit absolute CCP6CON.0; + CCPR7L : byte absolute $0614; + CCPR7H : byte absolute $0615; + CCP7CON : byte absolute $0616; + CCP7CON_DC7B1 : bit absolute CCP7CON.5; + CCP7CON_DC7B0 : bit absolute CCP7CON.4; + CCP7CON_CCP7M3 : bit absolute CCP7CON.3; + CCP7CON_CCP7M2 : bit absolute CCP7CON.2; + CCP7CON_CCP7M1 : bit absolute CCP7CON.1; + CCP7CON_CCP7M0 : bit absolute CCP7CON.0; + CCPR8L : byte absolute $0617; + CCPR8H : byte absolute $0618; + CCP8CON : byte absolute $0619; + CCP8CON_DC8B1 : bit absolute CCP8CON.5; + CCP8CON_DC8B0 : bit absolute CCP8CON.4; + CCP8CON_CCP8M3 : bit absolute CCP8CON.3; + CCP8CON_CCP8M2 : bit absolute CCP8CON.2; + CCP8CON_CCP8M1 : bit absolute CCP8CON.1; + CCP8CON_CCP8M0 : bit absolute CCP8CON.0; + CCPR9L : byte absolute $061A; + CCPR9H : byte absolute $061B; + CCP9CON : byte absolute $061C; + CCP9CON_DC9B1 : bit absolute CCP9CON.5; + CCP9CON_DC9B0 : bit absolute CCP9CON.4; + CCP9CON_CCP9M3 : bit absolute CCP9CON.3; + CCP9CON_CCP9M2 : bit absolute CCP9CON.2; + CCP9CON_CCP9M1 : bit absolute CCP9CON.1; + CCP9CON_CCP9M0 : bit absolute CCP9CON.0; + CCPR10L : byte absolute $061D; + CCPR10H : byte absolute $061E; + CCP10CON : byte absolute $061F; + CCP10CON_DC10B1 : bit absolute CCP10CON.5; + CCP10CON_DC10B0 : bit absolute CCP10CON.4; + CCP10CON_CCP10M3 : bit absolute CCP10CON.3; + CCP10CON_CCP10M2 : bit absolute CCP10CON.2; + CCP10CON_CCP10M1 : bit absolute CCP10CON.1; + CCP10CON_CCP10M0 : bit absolute CCP10CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-097:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-110:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-197:SFR'} // Bank 3 : ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '20F-217:SFR'} // Bank 4 : WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28D:SFR'} // Bank 5 : PORTF, PORTG + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29D-29F:SFR'} // Bank 5 : CCPTMRS0, CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30D:SFR'} // Bank 6 : TRISF, TRISG + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38D:SFR'} // Bank 7 : LATF, LATG + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-40D:SFR'} // Bank 8 : ANSELF, ANSELG + {$SET_STATE_RAM '411-41E:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48D-48D:SFR'} // Bank 9 : WPUG + {$SET_STATE_RAM '491-497:SFR'} // Bank 9 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '4A0-4BF:GPR'} + {$SET_STATE_RAM '595-597:SFR'} // Bank 11 : TMR8, PR8, T8CON + {$SET_STATE_RAM '59C-59E:SFR'} // Bank 11 : TMR10, PR10, T10CON + {$SET_STATE_RAM '611-61F:SFR'} // Bank 12 : CCPR6L, CCPR6H, CCP6CON, CCPR7L, CCPR7H, CCP7CON, CCPR8L, CCPR8H, CCP8CON, CCPR9L, CCPR9H, CCP9CON, CCPR10L, CCPR10H, CCP10CON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:0F'} // ANSELD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:3F'} // PORTG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:0F'} // CCPTMRS2 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:3F'} // TRISG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:1F'} // LATG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:1E'} // ANSELG bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '48D:20'} // WPUG bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:7F'} // T8CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:7F'} // T10CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:3F'} // CCP6CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:3F'} // CCP7CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CCP8CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:3F'} // CCP9CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:3F'} // CCP10CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '30D:20'} // TRISG bit 5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE1/AN28 + // Pin 2 : RE0/AN27 + // Pin 3 : RG0/CCP3 + // Pin 4 : RG1/AN15/TX2/CK2 + // Pin 5 : RG2/AN14/RX2/DT2 + // Pin 6 : RG3/AN13/CCP4 + // Pin 7 : RG5/MCLR/Vpp + // Pin 8 : RG4/AN12/T5G/CCP5 + // Pin 9 : Vss + // Pin 10 : Vdd + // Pin 11 : RF7/AN5/SS1 + // Pin 12 : RF6/AN11 + // Pin 13 : RF5/AN10 + // Pin 14 : RF4/AN9 + // Pin 15 : RF3/AN8 + // Pin 16 : RF2/AN7 + // Pin 17 : RF1/AN6 + // Pin 18 : RF0/AN16/Vcap + // Pin 19 : AVdd + // Pin 20 : AVss + // Pin 21 : RA3/AN3/Vref+ + // Pin 22 : RA2/AN2 + // Pin 23 : RA1/AN1 + // Pin 24 : RA0/AN0 + // Pin 25 : Vss + // Pin 26 : Vdd + // Pin 27 : RA5/AN4/T3G + // Pin 28 : RA4/T0CKI + // Pin 29 : RC1/SOSCI/CCP2 + // Pin 30 : RC0/SOSCO/T1CKI + // Pin 31 : RC6/TX1/CK1 + // Pin 32 : RC7/RX1/DT1 + // Pin 33 : RC2/CCP1 + // Pin 34 : RC3/SCK1/SCL1 + // Pin 35 : RC4/SDI1/SDA1 + // Pin 36 : RC5/SDO1 + // Pin 37 : RB7/ICSPDAT/ICDDAT + // Pin 38 : Vdd + // Pin 39 : RA7/OSC1/CLKIN + // Pin 40 : RA6/OSC2/CLKOUT + // Pin 41 : Vss + // Pin 42 : RB6/ICSPCLK/ICDCLK + // Pin 43 : RB5/AN22/T1G/T3CKI + // Pin 44 : RB4/AN21/T3CKI + // Pin 45 : RB3/AN20 + // Pin 46 : RB2/AN19 + // Pin 47 : RB1/AN18 + // Pin 48 : RB0/AN17/INT + // Pin 49 : RD7/SS2 + // Pin 50 : RD6/SCK2/SCL2 + // Pin 51 : RD5/SDI2/SDA2 + // Pin 52 : RD4/SDO2 + // Pin 53 : RD3/AN26 + // Pin 54 : RD2/AN25 + // Pin 55 : RD1/AN24/T5CKI + // Pin 56 : Vss + // Pin 57 : Vdd + // Pin 58 : RD0/AN23 + // Pin 59 : RE7/CCP2 + // Pin 60 : RE6/CCP6 + // Pin 61 : RE5/CCP7 + // Pin 62 : RE4/CCP8 + // Pin 63 : RE3/CCP9 + // Pin 64 : RE2/AN29/CCP10 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,2-64,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '28C:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN '28D:0-3,1-4,2-5,3-6,4-8,5-7'} // PORTG + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 2000h to 3FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by PMCON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1527.pas b/devices17/PIC16F1527.pas new file mode 100644 index 00000000..dde015ba --- /dev/null +++ b/devices17/PIC16F1527.pas @@ -0,0 +1,1106 @@ +unit PIC16F1527; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1527'} +{$SET PIC_MAXFREQ = 20000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RC1IF : bit absolute PIR1.5; + PIR1_TX1IF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_TMR5GIF : bit absolute PIR2.6; + PIR2_TMR3GIF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR10IF : bit absolute PIR2.2; + PIR2_TMR8IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP6IF : bit absolute PIR3.7; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR5IF : bit absolute PIR3.2; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR3_TMR3IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CCP10IF : bit absolute PIR4.7; + PIR4_CCP9IF : bit absolute PIR4.6; + PIR4_RC2IF : bit absolute PIR4.5; + PIR4_TX2IF : bit absolute PIR4.4; + PIR4_CCP8IF : bit absolute PIR4.3; + PIR4_CCP7IF : bit absolute PIR4.2; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_SOSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RC1IE : bit absolute PIE1.5; + PIE1_TX1IE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_TMR5GIE : bit absolute PIE2.6; + PIE2_TMR3GIE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR10IE : bit absolute PIE2.2; + PIE2_TMR8IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP6IE : bit absolute PIE3.7; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR5IE : bit absolute PIE3.2; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE3_TMR3IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CCP10IE : bit absolute PIE4.7; + PIE4_CCP9IE : bit absolute PIE4.6; + PIE4_RC2IE : bit absolute PIE4.5; + PIE4_TX2IE : bit absolute PIE4.4; + PIE4_CCP8IE : bit absolute PIE4.3; + PIE4_CCP7IE : bit absolute PIE4.2; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCCON : byte absolute $0099; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + APFCON : byte absolute $011D; + APFCON_T3CKISEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE7 : bit absolute WPUE.7; + WPUE_WPUE6 : bit absolute WPUE.6; + WPUE_WPUE5 : bit absolute WPUE.5; + WPUE_WPUE4 : bit absolute WPUE.4; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + PORTF : byte absolute $028C; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + PORTG : byte absolute $028D; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS0 : byte absolute $029D; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C8TSEL1 : bit absolute CCPTMRS1.7; + CCPTMRS1_C8TSEL0 : bit absolute CCPTMRS1.6; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_C10TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_C10TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_C9TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_C9TSEL0 : bit absolute CCPTMRS2.0; + TRISF : byte absolute $030C; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + TRISG : byte absolute $030D; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + LATF : byte absolute $038C; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + LATG : byte absolute $038D; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELF : byte absolute $040C; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + ANSELG : byte absolute $040D; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_nT3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_nT5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + WPUG : byte absolute $048D; + WPUG_WPUG5 : bit absolute WPUG.5; + RC2REG : byte absolute $0491; + TX2REG : byte absolute $0492; + SP2BRGL : byte absolute $0493; + SP2BRGH : byte absolute $0494; + RC2STA : byte absolute $0495; + TX2STA : byte absolute $0496; + BAUD2CON : byte absolute $0497; + TMR8 : byte absolute $0595; + PR8 : byte absolute $0596; + T8CON : byte absolute $0597; + T8CON_T8OUTPS3 : bit absolute T8CON.6; + T8CON_T8OUTPS2 : bit absolute T8CON.5; + T8CON_T8OUTPS1 : bit absolute T8CON.4; + T8CON_T8OUTPS0 : bit absolute T8CON.3; + T8CON_TMR8ON : bit absolute T8CON.2; + T8CON_T8CKPS1 : bit absolute T8CON.1; + T8CON_T8CKPS0 : bit absolute T8CON.0; + TMR10 : byte absolute $059C; + PR10 : byte absolute $059D; + T10CON : byte absolute $059E; + T10CON_T10OUTPS3 : bit absolute T10CON.6; + T10CON_T10OUTPS2 : bit absolute T10CON.5; + T10CON_T10OUTPS1 : bit absolute T10CON.4; + T10CON_T10OUTPS0 : bit absolute T10CON.3; + T10CON_TMR10ON : bit absolute T10CON.2; + T10CON_T10CKPS1 : bit absolute T10CON.1; + T10CON_T10CKPS0 : bit absolute T10CON.0; + CCPR6L : byte absolute $0611; + CCPR6H : byte absolute $0612; + CCP6CON : byte absolute $0613; + CCP6CON_DC6B1 : bit absolute CCP6CON.5; + CCP6CON_DC6B0 : bit absolute CCP6CON.4; + CCP6CON_CCP6M3 : bit absolute CCP6CON.3; + CCP6CON_CCP6M2 : bit absolute CCP6CON.2; + CCP6CON_CCP6M1 : bit absolute CCP6CON.1; + CCP6CON_CCP6M0 : bit absolute CCP6CON.0; + CCPR7L : byte absolute $0614; + CCPR7H : byte absolute $0615; + CCP7CON : byte absolute $0616; + CCP7CON_DC7B1 : bit absolute CCP7CON.5; + CCP7CON_DC7B0 : bit absolute CCP7CON.4; + CCP7CON_CCP7M3 : bit absolute CCP7CON.3; + CCP7CON_CCP7M2 : bit absolute CCP7CON.2; + CCP7CON_CCP7M1 : bit absolute CCP7CON.1; + CCP7CON_CCP7M0 : bit absolute CCP7CON.0; + CCPR8L : byte absolute $0617; + CCPR8H : byte absolute $0618; + CCP8CON : byte absolute $0619; + CCP8CON_DC8B1 : bit absolute CCP8CON.5; + CCP8CON_DC8B0 : bit absolute CCP8CON.4; + CCP8CON_CCP8M3 : bit absolute CCP8CON.3; + CCP8CON_CCP8M2 : bit absolute CCP8CON.2; + CCP8CON_CCP8M1 : bit absolute CCP8CON.1; + CCP8CON_CCP8M0 : bit absolute CCP8CON.0; + CCPR9L : byte absolute $061A; + CCPR9H : byte absolute $061B; + CCP9CON : byte absolute $061C; + CCP9CON_DC9B1 : bit absolute CCP9CON.5; + CCP9CON_DC9B0 : bit absolute CCP9CON.4; + CCP9CON_CCP9M3 : bit absolute CCP9CON.3; + CCP9CON_CCP9M2 : bit absolute CCP9CON.2; + CCP9CON_CCP9M1 : bit absolute CCP9CON.1; + CCP9CON_CCP9M0 : bit absolute CCP9CON.0; + CCPR10L : byte absolute $061D; + CCPR10H : byte absolute $061E; + CCP10CON : byte absolute $061F; + CCP10CON_DC10B1 : bit absolute CCP10CON.5; + CCP10CON_DC10B0 : bit absolute CCP10CON.4; + CCP10CON_CCP10M3 : bit absolute CCP10CON.3; + CCP10CON_CCP10M2 : bit absolute CCP10CON.2; + CCP10CON_CCP10M1 : bit absolute CCP10CON.1; + CCP10CON_CCP10M0 : bit absolute CCP10CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-097:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON + {$SET_STATE_RAM '099-09E:SFR'} // Bank 1 : OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-110:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-197:SFR'} // Bank 3 : ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '20F-217:SFR'} // Bank 4 : WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28D:SFR'} // Bank 5 : PORTF, PORTG + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29D-29F:SFR'} // Bank 5 : CCPTMRS0, CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30D:SFR'} // Bank 6 : TRISF, TRISG + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38D:SFR'} // Bank 7 : LATF, LATG + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-40D:SFR'} // Bank 8 : ANSELF, ANSELG + {$SET_STATE_RAM '411-41E:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48D-48D:SFR'} // Bank 9 : WPUG + {$SET_STATE_RAM '491-497:SFR'} // Bank 9 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '595-597:SFR'} // Bank 11 : TMR8, PR8, T8CON + {$SET_STATE_RAM '59C-59E:SFR'} // Bank 11 : TMR10, PR10, T10CON + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '611-61F:SFR'} // Bank 12 : CCPR6L, CCPR6H, CCP6CON, CCPR7L, CCPR7H, CCP7CON, CCPR8L, CCPR8H, CCP8CON, CCPR9L, CCPR9H, CCP9CON, CCPR10L, CCPR10H, CCP10CON + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:7B'} // OSCCON bits 7,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:B3'} // OSCSTAT bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:F3'} // FVRCON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // APFCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:0F'} // ANSELD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:3F'} // PORTG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:0F'} // CCPTMRS2 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:3F'} // TRISG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:1F'} // LATG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:1E'} // ANSELG bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '48D:20'} // WPUG bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:7F'} // T8CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:7F'} // T10CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:3F'} // CCP6CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:3F'} // CCP7CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CCP8CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:3F'} // CCP9CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:3F'} // CCP10CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '30D:20'} // TRISG bit 5 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE1/AN28 + // Pin 2 : RE0/AN27 + // Pin 3 : RG0/CCP3 + // Pin 4 : RG1/AN15/TX2/CK2 + // Pin 5 : RG2/AN14/RX2/DT2 + // Pin 6 : RG3/AN13/CCP4 + // Pin 7 : RG5/MCLR/Vpp + // Pin 8 : RG4/AN12/T5G/CCP5 + // Pin 9 : Vss + // Pin 10 : Vdd + // Pin 11 : RF7/AN5/SS1 + // Pin 12 : RF6/AN11 + // Pin 13 : RF5/AN10 + // Pin 14 : RF4/AN9 + // Pin 15 : RF3/AN8 + // Pin 16 : RF2/AN7 + // Pin 17 : RF1/AN6 + // Pin 18 : RF0/AN16/Vcap + // Pin 19 : AVdd + // Pin 20 : AVss + // Pin 21 : RA3/AN3/Vref+ + // Pin 22 : RA2/AN2 + // Pin 23 : RA1/AN1 + // Pin 24 : RA0/AN0 + // Pin 25 : Vss + // Pin 26 : Vdd + // Pin 27 : RA5/AN4/T3G + // Pin 28 : RA4/T0CKI + // Pin 29 : RC1/SOSCI/CCP2 + // Pin 30 : RC0/SOSCO/T1CKI + // Pin 31 : RC6/TX1/CK1 + // Pin 32 : RC7/RX1/DT1 + // Pin 33 : RC2/CCP1 + // Pin 34 : RC3/SCK1/SCL1 + // Pin 35 : RC4/SDI1/SDA1 + // Pin 36 : RC5/SDO1 + // Pin 37 : RB7/ICSPDAT/ICDDAT + // Pin 38 : Vdd + // Pin 39 : RA7/OSC1/CLKIN + // Pin 40 : RA6/OSC2/CLKOUT + // Pin 41 : Vss + // Pin 42 : RB6/ICSPCLK/ICDCLK + // Pin 43 : RB5/AN22/T1G/T3CKI + // Pin 44 : RB4/AN21/T3CKI + // Pin 45 : RB3/AN20 + // Pin 46 : RB2/AN19 + // Pin 47 : RB1/AN18 + // Pin 48 : RB0/AN17/INT + // Pin 49 : RD7/SS2 + // Pin 50 : RD6/SCK2/SCL2 + // Pin 51 : RD5/SDI2/SDA2 + // Pin 52 : RD4/SDO2 + // Pin 53 : RD3/AN26 + // Pin 54 : RD2/AN25 + // Pin 55 : RD1/AN24/T5CKI + // Pin 56 : Vss + // Pin 57 : Vdd + // Pin 58 : RD0/AN23 + // Pin 59 : RE7/CCP2 + // Pin 60 : RE6/CCP6 + // Pin 61 : RE5/CCP7 + // Pin 62 : RE4/CCP8 + // Pin 63 : RE3/CCP9 + // Pin 64 : RE2/AN29/CCP10 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,2-64,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '28C:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN '28D:0-3,1-4,2-5,3-6,4-8,5-7'} // PORTG + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 2000h to 3FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by PMCON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // VCAP pin function disabled + {$define _VCAPEN_ON = $3FEF} // VCAP pin function enabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F15313.pas b/devices17/PIC16F15313.pas new file mode 100644 index 00000000..4e2eeef0 --- /dev/null +++ b/devices17/PIC16F15313.pas @@ -0,0 +1,1611 @@ +unit PIC16F15313; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15313'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-993:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECC:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:41'} // PIR2 bits 7,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:41'} // PIE2 bits 7,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:63'} // PMD2 bits 7,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:51'} // PMD4 bits 7,5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:98'} // OSCCON3 bits 6,5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:F5'} // OSCSTAT bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:F4'} // OSCEN bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ZCD1/ANA2/IOCA2/RA2 + // Pin 6 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/IOCA1/RA1 + // Pin 7 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 8 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_Reserved = $3FCF} // Reserved + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_Reserved = $17FF} // Reserved + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15323.pas b/devices17/PIC16F15323.pas new file mode 100644 index 00000000..fd6704b1 --- /dev/null +++ b/devices17/PIC16F15323.pas @@ -0,0 +1,1764 @@ +unit PIC16F15323; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15323'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECC:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:51'} // PMD4 bits 7,5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:98'} // OSCCON3 bits 6,5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:F5'} // OSCSTAT bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:F4'} // OSCEN bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C2IN2-/C1IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C2IN1-/C1IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : ZCD1/ANA2/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/C1IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_Reserved = $3FCF} // Reserved + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_Reserved = $17FF} // Reserved + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15324.pas b/devices17/PIC16F15324.pas new file mode 100644 index 00000000..87a41817 --- /dev/null +++ b/devices17/PIC16F15324.pas @@ -0,0 +1,1798 @@ +unit PIC16F15324; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15324'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F7'} // PIR3 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:98'} // OSCCON3 bits 6,5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:F5'} // OSCSTAT bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:F4'} // OSCEN bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C2IN2-/C1IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C2IN1-/C1IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : ZCD1/ANA2/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/C1IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_Reserved = $3FCF} // Reserved + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_Reserved = $17FF} // Reserved + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15325.pas b/devices17/PIC16F15325.pas new file mode 100644 index 00000000..40c086fc --- /dev/null +++ b/devices17/PIC16F15325.pas @@ -0,0 +1,1806 @@ +unit PIC16F15325; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15325'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F7'} // PIR3 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : ZCD1/DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/C1IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15344.pas b/devices17/PIC16F15344.pas new file mode 100644 index 00000000..d956de59 --- /dev/null +++ b/devices17/PIC16F15344.pas @@ -0,0 +1,1922 @@ +unit PIC16F15344; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15344'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F1C-1F27:SFR'} // Bank 62 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F7'} // PIR3 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:98'} // OSCCON3 bits 6,5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:F5'} // OSCSTAT bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:F4'} // OSCEN bits 3,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F43:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F44:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F45:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F46:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F47:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F48:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F49:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4A:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC6/IOCC6/RC6 + // Pin 9 : ANC7/IOCC7/RC7 + // Pin 10 : ANB7/IOCB7/RB7 + // Pin 11 : ANB6/SMB_I2C/IOCB6/RB6 + // Pin 12 : ANB5/IOCB5/RB5 + // Pin 13 : ANB4/SMB_I2C/IOCB4/RB4 + // Pin 14 : ANC2/C2IN2-/C1IN2-/IOCC2/RC2 + // Pin 15 : ANC1/C2IN1-/C1IN1-/SMB_I2C/IOCC1/RC1 + // Pin 16 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 17 : ZCD1/DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 18 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/C1IN0-/IOCA1/RA1 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_Reserved = $3FCF} // Reserved + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_Reserved = $17FF} // Reserved + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15345.pas b/devices17/PIC16F15345.pas new file mode 100644 index 00000000..b16bcd19 --- /dev/null +++ b/devices17/PIC16F15345.pas @@ -0,0 +1,1930 @@ +unit PIC16F15345; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15345'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_DDS1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_STATUS_SHAD2 : bit absolute STATUS_SHAD.2; + STATUS_SHAD_STATUS_SHAD1 : bit absolute STATUS_SHAD.1; + STATUS_SHAD_STATUS_SHAD0 : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F15:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS + {$SET_STATE_RAM '1F1C-1F27:SFR'} // Bank 62 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F7'} // PIR3 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C1'} // PIE1 bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F43:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F44:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F45:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F46:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F47:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F48:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F49:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4A:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC6/IOCC6/RC6 + // Pin 9 : ANC7/IOCC7/RC7 + // Pin 10 : ANB7/IOCB7/RB7 + // Pin 11 : ANB6/SMB_I2C/IOCB6/RB6 + // Pin 12 : ANB5/IOCB5/RB5 + // Pin 13 : ANB4/SMB_I2C/IOCB4/RB4 + // Pin 14 : ANC2/C2IN2-/C1IN2-/IOCC2/RC2 + // Pin 15 : ANC1/C2IN1-/C1IN1-/SMB_I2C/IOCC1/RC1 + // Pin 16 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 17 : ZCD1/DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 18 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/C1IN0-/IOCA1/RA1 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // * half of user program memory + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15354.pas b/devices17/PIC16F15354.pas new file mode 100644 index 00000000..03a8843c --- /dev/null +++ b/devices17/PIC16F15354.pas @@ -0,0 +1,2079 @@ +unit PIC16F15354; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15354'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCO1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-016:SFR'} // Bank 0 : TRISE + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 3 : DAC1OUT1/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : ANA4/IOCA4/RA4 + // Pin 6 : ANA5/IOCA5/RA5 + // Pin 7 : CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/ANA7/IOCA7/RA7 + // Pin 9 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 11 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 13 : ANB4/IOCB4/RB4 + // Pin 14 : ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/ANC0/IOCC0/RC0 + // Pin 18 : SOSCI/ANC1/IOCC1/RC1 + // Pin 19 : ANC2/IOCC2/RC2 + // Pin 20 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 21 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 22 : ANC5/IOCC5/RC5 + // Pin 23 : ANC6/IOCC6/RC6 + // Pin 24 : ANC7/IOCC7/RC7 + // Pin 25 : VPP/MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 26 : AVDD/VDD + // Pin 27 : AVSS/VSS + // Pin 28 : VSS/VSEL0 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,5-22,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15355.pas b/devices17/PIC16F15355.pas new file mode 100644 index 00000000..4a8b01fc --- /dev/null +++ b/devices17/PIC16F15355.pas @@ -0,0 +1,2085 @@ +unit PIC16F15355; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15355'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCO1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-016:SFR'} // Bank 0 : TRISE + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 3 : DAC1OUT1/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : ANA4/IOCA4/RA4 + // Pin 6 : ANA5/IOCA5/RA5 + // Pin 7 : CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/ANA7/IOCA7/RA7 + // Pin 9 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 11 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 13 : ANB4/IOCB4/RB4 + // Pin 14 : ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/ANC0/IOCC0/RC0 + // Pin 18 : SOSCI/ANC1/IOCC1/RC1 + // Pin 19 : ANC2/IOCC2/RC2 + // Pin 20 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 21 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 22 : ANC5/IOCC5/RC5 + // Pin 23 : ANC6/IOCC6/RC6 + // Pin 24 : ANC7/IOCC7/RC7 + // Pin 25 : VPP/MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 26 : AVDD/VDD + // Pin 27 : AVSS/VSS + // Pin 28 : VSS/VSEL0 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,5-22,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15356.pas b/devices17/PIC16F15356.pas new file mode 100644 index 00000000..8a247551 --- /dev/null +++ b/devices17/PIC16F15356.pas @@ -0,0 +1,2099 @@ +unit PIC16F15356; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15356'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCO1MD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-016:SFR'} // Bank 0 : TRISE + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 3 : DAC1OUT1/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : ANA4/IOCA4/RA4 + // Pin 6 : ANA5/IOCA5/RA5 + // Pin 7 : CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/ANA7/IOCA7/RA7 + // Pin 9 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 11 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 13 : ANB4/IOCB4/RB4 + // Pin 14 : ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/ANC0/IOCC0/RC0 + // Pin 18 : SOSCI/ANC1/IOCC1/RC1 + // Pin 19 : ANC2/IOCC2/RC2 + // Pin 20 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 21 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 22 : ANC5/IOCC5/RC5 + // Pin 23 : ANC6/IOCC6/RC6 + // Pin 24 : ANC7/IOCC7/RC7 + // Pin 25 : VPP/MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 26 : AVDD/VDD + // Pin 27 : AVSS/VSS + // Pin 28 : VSS/VSEL0 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,5-22,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15375.pas b/devices17/PIC16F15375.pas new file mode 100644 index 00000000..b50eba43 --- /dev/null +++ b/devices17/PIC16F15375.pas @@ -0,0 +1,2278 @@ +unit PIC16F15375; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15375'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-010:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + {$SET_STATE_RAM '012-016:SFR'} // Bank 0 : TRISA, TRISB, TRISC, TRISD, TRISE + {$SET_STATE_RAM '018-01C:SFR'} // Bank 0 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F32:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : ANE0/RE0 + // Pin 9 : ANE1/RE1 + // Pin 10 : ANE2/RE2 + // Pin 11 : VDD + // Pin 12 : AVSS/VSS + // Pin 13 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 15 : SOSCO/ANC0/IOCC0/RC0 + // Pin 16 : SOSCI/ANC1/IOCC1/RC1 + // Pin 17 : ANC2/IOCC2/RC2 + // Pin 18 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 19 : AND0/SMB_I2C/RD0 + // Pin 20 : AND1/SMB_I2C/RD1 + // Pin 21 : AND2/RD2 + // Pin 22 : AND3/RD3 + // Pin 23 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 24 : ANC5/IOCC5/RC5 + // Pin 25 : ANC6/IOCC6/RC6 + // Pin 26 : ANC7/IOCC7/RC7 + // Pin 27 : AND4/RD4 + // Pin 28 : AND5/RD5 + // Pin 29 : AND6/RD6 + // Pin 30 : AND7/RD7 + // Pin 31 : VSS + // Pin 32 : AVDD/VDD + // Pin 33 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 34 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 35 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 36 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 37 : ANB4/IOCB4/RB4 + // Pin 38 : ANB5/IOCB5/RB5 + // Pin 39 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 40 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // * half of user program memory + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15376.pas b/devices17/PIC16F15376.pas new file mode 100644 index 00000000..838bb871 --- /dev/null +++ b/devices17/PIC16F15376.pas @@ -0,0 +1,2291 @@ +unit PIC16F15376; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15376'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-010:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + {$SET_STATE_RAM '012-016:SFR'} // Bank 0 : TRISA, TRISB, TRISC, TRISD, TRISE + {$SET_STATE_RAM '018-01C:SFR'} // Bank 0 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F32:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : ANE0/RE0 + // Pin 9 : ANE1/RE1 + // Pin 10 : ANE2/RE2 + // Pin 11 : VDD + // Pin 12 : AVSS/VSS + // Pin 13 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 15 : SOSCO/ANC0/IOCC0/RC0 + // Pin 16 : SOSCI/ANC1/IOCC1/RC1 + // Pin 17 : ANC2/IOCC2/RC2 + // Pin 18 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 19 : AND0/SMB_I2C/RD0 + // Pin 20 : AND1/SMB_I2C/RD1 + // Pin 21 : AND2/RD2 + // Pin 22 : AND3/RD3 + // Pin 23 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 24 : ANC5/IOCC5/RC5 + // Pin 25 : ANC6/IOCC6/RC6 + // Pin 26 : ANC7/IOCC7/RC7 + // Pin 27 : AND4/RD4 + // Pin 28 : AND5/RD5 + // Pin 29 : AND6/RD6 + // Pin 30 : AND7/RD7 + // Pin 31 : VSS + // Pin 32 : AVDD/VDD + // Pin 33 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 34 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 35 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 36 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 37 : ANB4/IOCB4/RB4 + // Pin 38 : ANB5/IOCB5/RB5 + // Pin 39 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 40 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15385.pas b/devices17/PIC16F15385.pas new file mode 100644 index 00000000..66b4e3ba --- /dev/null +++ b/devices17/PIC16F15385.pas @@ -0,0 +1,2415 @@ +unit PIC16F15385; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15385'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 48} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_OE : bit absolute PWM6CON.6; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PSS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PSS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PSS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PSS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PSS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '1E0F-1E3F:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS + {$SET_STATE_RAM '1E50-1E54:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F32:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:1F'} // RF0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:1F'} // RF1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:1F'} // RF2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:1F'} // RF3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:1F'} // RF4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:1F'} // RF5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:1F'} // RF6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:1F'} // RF7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : ANC7/IOCC7/RC7 + // Pin 2 : AND4/RD4 + // Pin 3 : AND5/RD5 + // Pin 4 : AND6/RD6 + // Pin 5 : AND7/RD7 + // Pin 6 : VSS + // Pin 7 : VDD + // Pin 8 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 9 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 10 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 11 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 12 : ANF4/RF4 + // Pin 13 : ANF5/RF5 + // Pin 14 : ANF6/RF6 + // Pin 15 : ANF7/RF7 + // Pin 16 : ANB4/IOCB4/RB4 + // Pin 17 : ANB5/IOCB5/RB5 + // Pin 18 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 20 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 21 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 22 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 23 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 24 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 25 : ANA4/IOCA4/RA4 + // Pin 26 : ANA5/IOCA5/RA5 + // Pin 27 : ANE0/RE0 + // Pin 28 : ANE1/RE1 + // Pin 29 : ANE2/RE2 + // Pin 30 : VDD + // Pin 31 : AVSS/VSS + // Pin 32 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 33 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 34 : SOSCO/ANC0/IOCC0/RC0 + // Pin 35 : SOSCI/ANC1/IOCC1/RC1 + // Pin 36 : ANF0/RF0 + // Pin 37 : ANF1/RF1 + // Pin 38 : ANF2/RF2 + // Pin 39 : ANF3/RF3 + // Pin 40 : ANC2/IOCC2/RC2 + // Pin 41 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 42 : AND0/SMB_I2C/RD0 + // Pin 43 : AND1/SMB_I2C/RD1 + // Pin 44 : AND2/RD2 + // Pin 45 : AND3/RD3 + // Pin 46 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 47 : ANC5/IOCC5/RC5 + // Pin 48 : ANC6/IOCC6/RC6 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-21,1-22,2-23,3-24,4-25,5-26,6-33,7-32'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-8,1-9,2-10,3-11,4-16,5-17,6-18,7-19'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-34,1-35,2-40,3-41,4-46,5-47,6-48,7-1'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-42,1-43,2-44,3-45,4-2,5-3,6-4,7-5'} // PORTD + {$MAP_RAM_TO_PIN '010:0-27,1-28,2-29,3-20'} // PORTE + {$MAP_RAM_TO_PIN '011:0-36,1-37,2-38,3-39,4-12,5-13,6-14,7-15'} // PORTF + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F15386.pas b/devices17/PIC16F15386.pas new file mode 100644 index 00000000..7a61ded6 --- /dev/null +++ b/devices17/PIC16F15386.pas @@ -0,0 +1,2427 @@ +unit PIC16F15386; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F15386'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 48} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GOnDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + PWM5DCL : byte absolute $031C; + PWM5DCH : byte absolute $031D; + PWM5CON : byte absolute $031E; + PWM6DCL : byte absolute $038C; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $060D; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG1IF : bit absolute PIR7.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG1IE : bit absolute PIE7.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DAC1MD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_PWM4MD : bit absolute PMD3.3; + PMD3_PWM3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PSS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PSS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PSS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PSS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PSS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS5 : bit absolute SSP2CLKPPS.5; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS5 : bit absolute SSP2DATPPS.5; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS5 : bit absolute SSP2SSPPS.5; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS5 : bit absolute RX1DTPPS.5; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS5 : bit absolute TX1CKPPS.5; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS5 : bit absolute RX2DTPPS.5; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS5 : bit absolute TX2CKPPS.5; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-291:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : PWM5DCL, PWM5DCH, PWM5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-713:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7 + {$SET_STATE_RAM '716-71D:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-896:SFR'} // Bank 17 : CLKRCON, CLKRCLK + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E3F:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS + {$SET_STATE_RAM '1E50-1E54:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9C:SFR'} // Bank 61 : T2INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F32:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:03'} // PIR6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:31'} // PIR7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:03'} // PIE6 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:31'} // PIE7 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:3F'} // PMD3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:F1'} // PMD4 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:1E'} // PMD5 bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:1F'} // RF0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:1F'} // RF1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:1F'} // RF2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:1F'} // RF3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:1F'} // RF4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:1F'} // RF5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:1F'} // RF6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:1F'} // RF7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:3F'} // SSP2CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:3F'} // SSP2DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:3F'} // SSP2SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2DTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : ANC7/IOCC7/RC7 + // Pin 2 : AND4/RD4 + // Pin 3 : AND5/RD5 + // Pin 4 : AND6/RD6 + // Pin 5 : AND7/RD7 + // Pin 6 : VSS + // Pin 7 : VDD + // Pin 8 : ZCD1/ANB0/C2IN1+/IOCB0/RB0 + // Pin 9 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 10 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 11 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 12 : ANF4/RF4 + // Pin 13 : ANF5/RF5 + // Pin 14 : ANF6/RF6 + // Pin 15 : ANF7/RF7 + // Pin 16 : ANB4/IOCB4/RB4 + // Pin 17 : ANB5/IOCB5/RB5 + // Pin 18 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 20 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 21 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 22 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 23 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 24 : DAC1REF+/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 25 : ANA4/IOCA4/RA4 + // Pin 26 : ANA5/IOCA5/RA5 + // Pin 27 : ANE0/RE0 + // Pin 28 : ANE1/RE1 + // Pin 29 : ANE2/RE2 + // Pin 30 : VDD + // Pin 31 : AVSS/VSS + // Pin 32 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 33 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 34 : SOSCO/ANC0/IOCC0/RC0 + // Pin 35 : SOSCI/ANC1/IOCC1/RC1 + // Pin 36 : ANF0/RF0 + // Pin 37 : ANF1/RF1 + // Pin 38 : ANF2/RF2 + // Pin 39 : ANF3/RF3 + // Pin 40 : ANC2/IOCC2/RC2 + // Pin 41 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 42 : AND0/SMB_I2C/RD0 + // Pin 43 : AND1/SMB_I2C/RD1 + // Pin 44 : AND2/RD2 + // Pin 45 : AND3/RD3 + // Pin 46 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 47 : ANC5/IOCC5/RC5 + // Pin 48 : ANC6/IOCC6/RC6 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-21,1-22,2-23,3-24,4-25,5-26,6-33,7-32'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-8,1-9,2-10,3-11,4-16,5-17,6-18,7-19'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-34,1-35,2-40,3-41,4-46,5-47,6-48,7-1'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-42,1-43,2-44,3-45,4-2,5-3,6-4,7-5'} // PORTD + {$MAP_RAM_TO_PIN '010:0-27,1-28,2-29,3-20'} // PORTE + {$MAP_RAM_TO_PIN '011:0-36,1-37,2-38,3-39,4-12,5-13,6-14,7-15'} // PORTF + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F1574.pas b/devices17/PIC16F1574.pas new file mode 100644 index 00000000..1e5d87fd --- /dev/null +++ b/devices17/PIC16F1574.pas @@ -0,0 +1,1058 @@ +unit PIC16F1574; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1574'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM4IF : bit absolute PIR3.7; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM4IE : bit absolute PIE3.7; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSPPS : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM4EN_A : bit absolute PWMEN.3; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM4LDA_A : bit absolute PWMLD.3; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM4OUT_A : bit absolute PWMOUT.3; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + PWM4PHL : byte absolute $0DC1; + PWM4PHH : byte absolute $0DC2; + PWM4DCL : byte absolute $0DC3; + PWM4DCH : byte absolute $0DC4; + PWM4PRL : byte absolute $0DC5; + PWM4PRH : byte absolute $0DC6; + PWM4OFL : byte absolute $0DC7; + PWM4OFH : byte absolute $0DC8; + PWM4TMRL : byte absolute $0DC9; + PWM4TMRH : byte absolute $0DCA; + PWM4CON : byte absolute $0DCB; + PWM4INTE : byte absolute $0DCC; + PWM4INTF : byte absolute $0DCD; + PWM4CLKCON : byte absolute $0DCE; + PWM4LDCON : byte absolute $0DCF; + PWM4OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CWG1INPPS : byte absolute $0E14; + CWG1INPPS_CWG1INPPS4 : bit absolute CWG1INPPS.4; + CWG1INPPS_CWG1INPPS3 : bit absolute CWG1INPPS.3; + CWG1INPPS_CWG1INPPS2 : bit absolute CWG1INPPS.2; + CWG1INPPS_CWG1INPPS1 : bit absolute CWG1INPPS.1; + CWG1INPPS_CWG1INPPS0 : bit absolute CWG1INPPS.0; + RXPPS : byte absolute $0E15; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E16; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + ADCACTPPS : byte absolute $0E17; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDIO_ICD_SLRC : bit absolute ICDIO.0; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON, PWM4PHL, PWM4PHH, PWM4DCL, PWM4DCH, PWM4PRL, PWM4PRH, PWM4OFL, PWM4OFH, PWM4TMRL, PWM4TMRH, PWM4CON, PWM4INTE, PWM4INTF, PWM4CLKCON, PWM4LDCON, PWM4OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CWG1INPPS, RXPPS, CKPPS, ADCACTPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F96-F97:SFR'} // Bank 31 : ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:F3'} // PIR1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:60'} // PIR2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // PIR3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // PIE1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:60'} // PIE2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:F0'} // PIE3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:FC'} // PWM4CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM4INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM4INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM4CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM4LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM4OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CWG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // RA0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // RA1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:0F'} // RA2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:0F'} // RA4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:0F'} // RA5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:0F'} // RC0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:0F'} // RC1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:0F'} // RC2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:0F'} // RC3PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:0F'} // RC4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:0F'} // RC5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FD'} // ICDIO bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/IOCA5/CLKIN + // Pin 3 : RA4/AN3/IOC4/CLKOUT + // Pin 4 : RA3/IOCA3/MCLR_n/ICDMCLR_n/Vpp + // Pin 5 : RC5/IOCC5 + // Pin 6 : RC4/IOCC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/IOCC3 + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/IOCC2 + // Pin 9 : RC1/AN5/C1IN1-/C2IN1-/IOCC1 + // Pin 10 : AN4/C2IN+/IOCC0/RC0 + // Pin 11 : RA2/AN2/IOCA2 + // Pin 12 : RA1/AN1/VREF+DAC/VREF+ADC/C1IN0-/C2IN0-/IOCA1/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/DACOUT/C1IN+/IOCA0/ICSPDAT/ICDDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // PPSLOCKED Bit Can Be Cleared & Set Once + {$define _PPS1WAY_OFF = $3FFB} // PPSLOCKED Bit Can Be Cleared & Set Repeatedly + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1575.pas b/devices17/PIC16F1575.pas new file mode 100644 index 00000000..eac34305 --- /dev/null +++ b/devices17/PIC16F1575.pas @@ -0,0 +1,1064 @@ +unit PIC16F1575; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1575'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM4IF : bit absolute PIR3.7; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM4IE : bit absolute PIE3.7; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSPPS : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM4EN_A : bit absolute PWMEN.3; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM4LDA_A : bit absolute PWMLD.3; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM4OUT_A : bit absolute PWMOUT.3; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + PWM4PHL : byte absolute $0DC1; + PWM4PHH : byte absolute $0DC2; + PWM4DCL : byte absolute $0DC3; + PWM4DCH : byte absolute $0DC4; + PWM4PRL : byte absolute $0DC5; + PWM4PRH : byte absolute $0DC6; + PWM4OFL : byte absolute $0DC7; + PWM4OFH : byte absolute $0DC8; + PWM4TMRL : byte absolute $0DC9; + PWM4TMRH : byte absolute $0DCA; + PWM4CON : byte absolute $0DCB; + PWM4INTE : byte absolute $0DCC; + PWM4INTF : byte absolute $0DCD; + PWM4CLKCON : byte absolute $0DCE; + PWM4LDCON : byte absolute $0DCF; + PWM4OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CWG1INPPS : byte absolute $0E14; + CWG1INPPS_CWG1INPPS4 : bit absolute CWG1INPPS.4; + CWG1INPPS_CWG1INPPS3 : bit absolute CWG1INPPS.3; + CWG1INPPS_CWG1INPPS2 : bit absolute CWG1INPPS.2; + CWG1INPPS_CWG1INPPS1 : bit absolute CWG1INPPS.1; + CWG1INPPS_CWG1INPPS0 : bit absolute CWG1INPPS.0; + RXPPS : byte absolute $0E15; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E16; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + ADCACTPPS : byte absolute $0E17; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDIO_ICD_SLRC : bit absolute ICDIO.0; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-63F:GPR'} + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON, PWM4PHL, PWM4PHH, PWM4DCL, PWM4DCH, PWM4PRL, PWM4PRH, PWM4OFL, PWM4OFH, PWM4TMRL, PWM4TMRH, PWM4CON, PWM4INTE, PWM4INTF, PWM4CLKCON, PWM4LDCON, PWM4OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CWG1INPPS, RXPPS, CKPPS, ADCACTPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F96-F97:SFR'} // Bank 31 : ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:F3'} // PIR1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:60'} // PIR2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // PIR3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // PIE1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:60'} // PIE2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:F0'} // PIE3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:FC'} // PWM4CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM4INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM4INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM4CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM4LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM4OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CWG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // RA0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // RA1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:0F'} // RA2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:0F'} // RA4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:0F'} // RA5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:0F'} // RC0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:0F'} // RC1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:0F'} // RC2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:0F'} // RC3PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:0F'} // RC4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:0F'} // RC5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FD'} // ICDIO bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/IOCA5/CLKIN + // Pin 3 : RA4/AN3/IOC4/CLKOUT + // Pin 4 : RA3/IOCA3/MCLR_n/ICDMCLR_n/Vpp + // Pin 5 : RC5/IOCC5 + // Pin 6 : RC4/IOCC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/IOCC3 + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/IOCC2 + // Pin 9 : RC1/AN5/C1IN1-/C2IN1-/IOCC1 + // Pin 10 : AN4/C2IN+/IOCC0/RC0 + // Pin 11 : RA2/AN2/IOCA2 + // Pin 12 : RA1/AN1/VREF+DAC/VREF+ADC/C1IN0-/C2IN0-/IOCA1/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/DACOUT/C1IN+/IOCA0/ICSPDAT/ICDDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // PPSLOCKED Bit Can Be Cleared & Set Once + {$define _PPS1WAY_OFF = $3FFB} // PPSLOCKED Bit Can Be Cleared & Set Repeatedly + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1578.pas b/devices17/PIC16F1578.pas new file mode 100644 index 00000000..6b20122b --- /dev/null +++ b/devices17/PIC16F1578.pas @@ -0,0 +1,1168 @@ +unit PIC16F1578; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1578'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM4IF : bit absolute PIR3.7; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM4IE : bit absolute PIE3.7; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSPPS : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM4EN_A : bit absolute PWMEN.3; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM4LDA_A : bit absolute PWMLD.3; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM4OUT_A : bit absolute PWMOUT.3; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + PWM4PHL : byte absolute $0DC1; + PWM4PHH : byte absolute $0DC2; + PWM4DCL : byte absolute $0DC3; + PWM4DCH : byte absolute $0DC4; + PWM4PRL : byte absolute $0DC5; + PWM4PRH : byte absolute $0DC6; + PWM4OFL : byte absolute $0DC7; + PWM4OFH : byte absolute $0DC8; + PWM4TMRL : byte absolute $0DC9; + PWM4TMRH : byte absolute $0DCA; + PWM4CON : byte absolute $0DCB; + PWM4INTE : byte absolute $0DCC; + PWM4INTF : byte absolute $0DCD; + PWM4CLKCON : byte absolute $0DCE; + PWM4LDCON : byte absolute $0DCF; + PWM4OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CWG1INPPS : byte absolute $0E14; + CWG1INPPS_CWG1INPPS4 : bit absolute CWG1INPPS.4; + CWG1INPPS_CWG1INPPS3 : bit absolute CWG1INPPS.3; + CWG1INPPS_CWG1INPPS2 : bit absolute CWG1INPPS.2; + CWG1INPPS_CWG1INPPS1 : bit absolute CWG1INPPS.1; + CWG1INPPS_CWG1INPPS0 : bit absolute CWG1INPPS.0; + RXPPS : byte absolute $0E15; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E16; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + ADCACTPPS : byte absolute $0E17; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDIO_ICD_SLRC : bit absolute ICDIO.0; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON, PWM4PHL, PWM4PHH, PWM4DCL, PWM4DCH, PWM4PRL, PWM4PRH, PWM4OFL, PWM4OFH, PWM4TMRL, PWM4TMRH, PWM4CON, PWM4INTE, PWM4INTF, PWM4CLKCON, PWM4LDCON, PWM4OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CWG1INPPS, RXPPS, CKPPS, ADCACTPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F96-F97:SFR'} // Bank 31 : ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:F3'} // PIR1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:60'} // PIR2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // PIR3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // PIE1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:60'} // PIE2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:F0'} // PIE3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:FC'} // PWM4CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM4INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM4INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM4CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM4LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM4OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CWG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // RA0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // RA1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:0F'} // RA2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:0F'} // RA4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:0F'} // RA5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:0F'} // RB4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:0F'} // RB5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:0F'} // RB6PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:0F'} // RB7PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:0F'} // RC0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:0F'} // RC1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:0F'} // RC2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:0F'} // RC3PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:0F'} // RC4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:0F'} // RC5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:0F'} // RC6PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:0F'} // RC7PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FD'} // ICDIO bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/IOCA5/CLKIN + // Pin 3 : RA4/AN3/IOCA4/CLKOUT + // Pin 4 : RA3/IOCA3/MCLR_n/ICDMCLR_n/Vpp + // Pin 5 : RC5/IOCC5 + // Pin 6 : RC4/IOCC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/IOCC3 + // Pin 8 : RC6/AN8/IOCC6 + // Pin 9 : RC7/AN9/IOCC7 + // Pin 10 : RB7/IOCB7 + // Pin 11 : RB6/IOCB6 + // Pin 12 : RB5/AN11/IOCB5 + // Pin 13 : RB4/AN10/IOCB4 + // Pin 14 : RC2/AN6/C1IN2-/C2IN2-/IOCC2 + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/IOCC1 + // Pin 16 : RC0/AN4/C2IN+/IOCC0 + // Pin 17 : RA2/AN2/IOCA2 + // Pin 18 : RA1/AN1/VREF+ADC/VREF+DAC/C1IN0-/C2IN0-/IOCA1/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT/IOCA0/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // PPSLOCKED Bit Can Be Cleared & Set Once + {$define _PPS1WAY_OFF = $3FFB} // PPSLOCKED Bit Can Be Cleared & Set Repeatedly + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1579.pas b/devices17/PIC16F1579.pas new file mode 100644 index 00000000..91a48534 --- /dev/null +++ b/devices17/PIC16F1579.pas @@ -0,0 +1,1174 @@ +unit PIC16F1579; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1579'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR3 : byte absolute $0013; + PIR3_PWM4IF : bit absolute PIR3.7; + PIR3_PWM3IF : bit absolute PIR3.6; + PIR3_PWM2IF : bit absolute PIR3.5; + PIR3_PWM1IF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE3 : byte absolute $0093; + PIE3_PWM4IE : bit absolute PIE3.7; + PIE3_PWM3IE : bit absolute PIE3.6; + PIE3_PWM2IE : bit absolute PIE3.5; + PIE3_PWM1IE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CWG1DBR : byte absolute $0691; + CWG1DBR_CWG1DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_CWG1DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_CWG1DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_CWG1DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_CWG1DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_CWG1DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_CWG1DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_CWG1DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_CWG1DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_CWG1DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_CWG1DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_CWG1DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0693; + CWG1CON0_G1EN : bit absolute CWG1CON0.7; + CWG1CON0_G1OEB : bit absolute CWG1CON0.6; + CWG1CON0_G1OEA : bit absolute CWG1CON0.5; + CWG1CON0_G1POLB : bit absolute CWG1CON0.4; + CWG1CON0_G1POLA : bit absolute CWG1CON0.3; + CWG1CON0_G1CS0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0694; + CWG1CON1_G1ASDLB1 : bit absolute CWG1CON1.7; + CWG1CON1_G1ASDLB0 : bit absolute CWG1CON1.6; + CWG1CON1_G1ASDLA1 : bit absolute CWG1CON1.5; + CWG1CON1_G1ASDLA0 : bit absolute CWG1CON1.4; + CWG1CON1_G1IS2 : bit absolute CWG1CON1.2; + CWG1CON1_G1IS1 : bit absolute CWG1CON1.1; + CWG1CON1_G1IS0 : bit absolute CWG1CON1.0; + CWG1CON2 : byte absolute $0695; + CWG1CON2_G1ASE : bit absolute CWG1CON2.7; + CWG1CON2_G1ARSEN : bit absolute CWG1CON2.6; + CWG1CON2_G1ASDSC2 : bit absolute CWG1CON2.3; + CWG1CON2_G1ASDSC1 : bit absolute CWG1CON2.2; + CWG1CON2_G1ASDSPPS : bit absolute CWG1CON2.1; + PWMEN : byte absolute $0D8E; + PWMEN_PWM4EN_A : bit absolute PWMEN.3; + PWMEN_PWM3EN_A : bit absolute PWMEN.2; + PWMEN_PWM2EN_A : bit absolute PWMEN.1; + PWMEN_PWM1EN_A : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_PWM4LDA_A : bit absolute PWMLD.3; + PWMLD_PWM3LDA_A : bit absolute PWMLD.2; + PWMLD_PWM2LDA_A : bit absolute PWMLD.1; + PWMLD_PWM1LDA_A : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_PWM4OUT_A : bit absolute PWMOUT.3; + PWMOUT_PWM3OUT_A : bit absolute PWMOUT.2; + PWMOUT_PWM2OUT_A : bit absolute PWMOUT.1; + PWMOUT_PWM1OUT_A : bit absolute PWMOUT.0; + PWM1PHL : byte absolute $0D91; + PWM1PHH : byte absolute $0D92; + PWM1DCL : byte absolute $0D93; + PWM1DCH : byte absolute $0D94; + PWM1PRL : byte absolute $0D95; + PWM1PRH : byte absolute $0D96; + PWM1OFL : byte absolute $0D97; + PWM1OFH : byte absolute $0D98; + PWM1TMRL : byte absolute $0D99; + PWM1TMRH : byte absolute $0D9A; + PWM1CON : byte absolute $0D9B; + PWM1CON_EN : bit absolute PWM1CON.7; + PWM1CON_OE : bit absolute PWM1CON.6; + PWM1CON_OUT : bit absolute PWM1CON.5; + PWM1CON_POL : bit absolute PWM1CON.4; + PWM1CON_MODE1 : bit absolute PWM1CON.3; + PWM1CON_MODE0 : bit absolute PWM1CON.2; + PWM1INTE : byte absolute $0D9C; + PWM1INTE_OFIE : bit absolute PWM1INTE.3; + PWM1INTE_PHIE : bit absolute PWM1INTE.2; + PWM1INTE_DCIE : bit absolute PWM1INTE.1; + PWM1INTE_PRIE : bit absolute PWM1INTE.0; + PWM1INTF : byte absolute $0D9D; + PWM1INTF_OFIF : bit absolute PWM1INTF.3; + PWM1INTF_PHIF : bit absolute PWM1INTF.2; + PWM1INTF_DCIF : bit absolute PWM1INTF.1; + PWM1INTF_PRIF : bit absolute PWM1INTF.0; + PWM1CLKCON : byte absolute $0D9E; + PWM1CLKCON_CS1 : bit absolute PWM1CLKCON.1; + PWM1CLKCON_CS0 : bit absolute PWM1CLKCON.0; + PWM1LDCON : byte absolute $0D9F; + PWM1LDCON_LDA : bit absolute PWM1LDCON.7; + PWM1LDCON_LDT : bit absolute PWM1LDCON.6; + PWM1LDCON_LDS1 : bit absolute PWM1LDCON.1; + PWM1LDCON_LDS0 : bit absolute PWM1LDCON.0; + PWM1OFCON : byte absolute $0DA0; + PWM1OFCON_OFM1 : bit absolute PWM1OFCON.6; + PWM1OFCON_OFM0 : bit absolute PWM1OFCON.5; + PWM1OFCON_OFO : bit absolute PWM1OFCON.4; + PWM1OFCON_OFS1 : bit absolute PWM1OFCON.1; + PWM1OFCON_OFS0 : bit absolute PWM1OFCON.0; + PWM2PHL : byte absolute $0DA1; + PWM2PHH : byte absolute $0DA2; + PWM2DCL : byte absolute $0DA3; + PWM2DCH : byte absolute $0DA4; + PWM2PRL : byte absolute $0DA5; + PWM2PRH : byte absolute $0DA6; + PWM2OFL : byte absolute $0DA7; + PWM2OFH : byte absolute $0DA8; + PWM2TMRL : byte absolute $0DA9; + PWM2TMRH : byte absolute $0DAA; + PWM2CON : byte absolute $0DAB; + PWM2INTE : byte absolute $0DAC; + PWM2INTF : byte absolute $0DAD; + PWM2CLKCON : byte absolute $0DAE; + PWM2LDCON : byte absolute $0DAF; + PWM2OFCON : byte absolute $0DB0; + PWM3PHL : byte absolute $0DB1; + PWM3PHH : byte absolute $0DB2; + PWM3DCL : byte absolute $0DB3; + PWM3DCH : byte absolute $0DB4; + PWM3PRL : byte absolute $0DB5; + PWM3PRH : byte absolute $0DB6; + PWM3OFL : byte absolute $0DB7; + PWM3OFH : byte absolute $0DB8; + PWM3TMRL : byte absolute $0DB9; + PWM3TMRH : byte absolute $0DBA; + PWM3CON : byte absolute $0DBB; + PWM3INTE : byte absolute $0DBC; + PWM3INTF : byte absolute $0DBD; + PWM3CLKCON : byte absolute $0DBE; + PWM3LDCON : byte absolute $0DBF; + PWM3OFCON : byte absolute $0DC0; + PWM4PHL : byte absolute $0DC1; + PWM4PHH : byte absolute $0DC2; + PWM4DCL : byte absolute $0DC3; + PWM4DCH : byte absolute $0DC4; + PWM4PRL : byte absolute $0DC5; + PWM4PRH : byte absolute $0DC6; + PWM4OFL : byte absolute $0DC7; + PWM4OFH : byte absolute $0DC8; + PWM4TMRL : byte absolute $0DC9; + PWM4TMRH : byte absolute $0DCA; + PWM4CON : byte absolute $0DCB; + PWM4INTE : byte absolute $0DCC; + PWM4INTF : byte absolute $0DCD; + PWM4CLKCON : byte absolute $0DCE; + PWM4LDCON : byte absolute $0DCF; + PWM4OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CWG1INPPS : byte absolute $0E14; + CWG1INPPS_CWG1INPPS4 : bit absolute CWG1INPPS.4; + CWG1INPPS_CWG1INPPS3 : bit absolute CWG1INPPS.3; + CWG1INPPS_CWG1INPPS2 : bit absolute CWG1INPPS.2; + CWG1INPPS_CWG1INPPS1 : bit absolute CWG1INPPS.1; + CWG1INPPS_CWG1INPPS0 : bit absolute CWG1INPPS.0; + RXPPS : byte absolute $0E15; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E16; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + ADCACTPPS : byte absolute $0E17; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDIO_ICD_SLRC : bit absolute ICDIO.0; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-63F:GPR'} + {$SET_STATE_RAM '691-695:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1CON2 + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM1PHL, PWM1PHH, PWM1DCL, PWM1DCH, PWM1PRL, PWM1PRH, PWM1OFL, PWM1OFH, PWM1TMRL, PWM1TMRH, PWM1CON, PWM1INTE, PWM1INTF, PWM1CLKCON, PWM1LDCON, PWM1OFCON, PWM2PHL, PWM2PHH, PWM2DCL, PWM2DCH, PWM2PRL, PWM2PRH, PWM2OFL, PWM2OFH, PWM2TMRL, PWM2TMRH, PWM2CON, PWM2INTE, PWM2INTF, PWM2CLKCON, PWM2LDCON, PWM2OFCON, PWM3PHL, PWM3PHH, PWM3DCL, PWM3DCH, PWM3PRL, PWM3PRH, PWM3OFL, PWM3OFH, PWM3TMRL, PWM3TMRH, PWM3CON, PWM3INTE, PWM3INTF, PWM3CLKCON, PWM3LDCON, PWM3OFCON, PWM4PHL, PWM4PHH, PWM4DCL, PWM4DCH, PWM4PRL, PWM4PRH, PWM4OFL, PWM4OFH, PWM4TMRL, PWM4TMRH, PWM4CON, PWM4INTE, PWM4INTF, PWM4CLKCON, PWM4LDCON, PWM4OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CWG1INPPS, RXPPS, CKPPS, ADCACTPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F91:SFR'} // Bank 31 : ICDSTAT + {$SET_STATE_RAM 'F96-F97:SFR'} // Bank 31 : ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:F3'} // PIR1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:60'} // PIR2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // PIR3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:F3'} // PIE1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:60'} // PIE2 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:F0'} // PIE3 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:EC'} // DACCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:F9'} // CWG1CON0 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:F7'} // CWG1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:CE'} // CWG1CON2 bits 5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:FC'} // PWM1CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM1INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM1INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM1CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM1LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM1OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:FC'} // PWM2CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM2INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM2INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM2CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM2LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM2OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:FC'} // PWM3CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM3INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM3INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM3CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM3LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM3OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:FC'} // PWM4CON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM4INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM4INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM4CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM4LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM4OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CWG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // RA0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // RA1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:0F'} // RA2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:0F'} // RA4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:0F'} // RA5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:0F'} // RB4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:0F'} // RB5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:0F'} // RB6PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:0F'} // RB7PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:0F'} // RC0PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:0F'} // RC1PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:0F'} // RC2PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:0F'} // RC3PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:0F'} // RC4PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:0F'} // RC5PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:0F'} // RC6PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:0F'} // RC7PPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FD'} // ICDIO bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '195:80'} // PMCON1 bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/IOCA5/CLKIN + // Pin 3 : RA4/AN3/IOCA4/CLKOUT + // Pin 4 : RA3/IOCA3/MCLR_n/ICDMCLR_n/Vpp + // Pin 5 : RC5/IOCC5 + // Pin 6 : RC4/IOCC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/IOCC3 + // Pin 8 : RC6/AN8/IOCC6 + // Pin 9 : RC7/AN9/IOCC7 + // Pin 10 : RB7/IOCB7 + // Pin 11 : RB6/IOCB6 + // Pin 12 : RB5/AN11/IOCB5 + // Pin 13 : RB4/AN10/IOCB4 + // Pin 14 : RC2/AN6/C1IN2-/C2IN2-/IOCC2 + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/IOCC1 + // Pin 16 : RC0/AN4/C2IN+/IOCC0 + // Pin 17 : RA2/AN2/IOCA2 + // Pin 18 : RA1/AN1/VREF+ADC/VREF+DAC/C1IN0-/C2IN0-/IOCA1/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT/IOCA0/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz); device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz); device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator; I/O function on CLKIN pin + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // PPSLOCKED Bit Can Be Cleared & Set Once + {$define _PPS1WAY_OFF = $3FFB} // PPSLOCKED Bit Can Be Cleared & Set Repeatedly + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOREN : Low Power Brown-out Reset enable bit + {$define _LPBOREN_OFF = $3FFF} // LPBOR is disabled + {$define _LPBOREN_ON = $37FF} // LPBOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1613.pas b/devices17/PIC16F1613.pas new file mode 100644 index 00000000..1bc067ef --- /dev/null +++ b/devices17/PIC16F1613.pas @@ -0,0 +1,981 @@ +unit PIC16F1613; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1613'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_T2CS2 : bit absolute T2CLKCON.2; + T2CLKCON_T2CS1 : bit absolute T2CLKCON.1; + T2CLKCON_T2CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OE : bit absolute ZCD1CON.6; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + APFCON : byte absolute $011D; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_CCP2SEL : bit absolute APFCON.1; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4CLKCON_T4CS2 : bit absolute T4CLKCON.2; + T4CLKCON_T4CS1 : bit absolute T4CLKCON.1; + T4CLKCON_T4CS0 : bit absolute T4CLKCON.0; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6CLKCON_T6CS2 : bit absolute T6CLKCON.2; + T6CLKCON_T6CS1 : bit absolute T6CLKCON.1; + T6CLKCON_T6CS0 : bit absolute T6CLKCON.0; + T6RST : byte absolute $041F; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1OCON1 : byte absolute $0698; + CWG1OCON1_OED : bit absolute CWG1OCON1.3; + CWG1OCON1_OEC : bit absolute CWG1OCON1.2; + CWG1OCON1_OEB : bit absolute CWG1OCON1.1; + CWG1OCON1_OEA : bit absolute CWG1OCON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON0_SEN : bit absolute WDTCON0.0; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11D:SFR'} // Bank 2 : ZCD1CON, APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '691-69A:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1, CWG1OCON1, CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:C7'} // PIR1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:67'} // PIR2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:30'} // PIR3 bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01D:EF'} // T2HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:07'} // T2CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:37'} // TRISA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:C7'} // PIE1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:67'} // PIE2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:30'} // PIE3 bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:5F'} // OSCSTAT bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:F3'} // ZCD1CON bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0A'} // APFCON bits 7,6,5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:03'} // CCP1CAP bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:03'} // CCP2CAP bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:0F'} // CCPTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '416:EF'} // T4HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:07'} // T4CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41D:EF'} // T6HLT bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:07'} // T6CLKCON bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:0F'} // CWG1OCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:07'} // CWG1ISM bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:03'} // SCANTRIG bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:07'} // SMT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // SMT1WIN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:07'} // SMT2SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:0F'} // SMT2WIN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/SMT1WIN/T1CKI/T2AIN/CCP2/IOCA5 + // Pin 3 : RA4/CLKOUT/SMT1SIG/AN3/T1G/IOCA4 + // Pin 4 : RA3/SMT2WIN/T1G/T6AIN/IOCA3/VPP/nMCLR/MCLR + // Pin 5 : RC5/CWG1A/CCP1/IOCC5 + // Pin 6 : RC4/CWG1B/C2OUT/IOCC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/CWG1C/CCP2/IOCC3 + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/CWG1D/IOCC2 + // Pin 9 : RC1/SMT2SIG/AN5/C1IN1-/C2IN1-/T4AIN/IOCC1 + // Pin 10 : RC0/AN4/C2IN+/IOCC0 + // Pin 11 : RA2/ZCD1IN/AN2/CWG1IN/C1OUT/T0CKI/INT/IOCA2 + // Pin 12 : RA1/ZCD1OUT/VREF+DAC/VREF+ADC/AN1/C1IN0-/IOCA + // Pin 13 : RA0/DAC1OUT/AN0/C1IN+/IOCA0 + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC16F1614.pas b/devices17/PIC16F1614.pas new file mode 100644 index 00000000..d82892e2 --- /dev/null +++ b/devices17/PIC16F1614.pas @@ -0,0 +1,2066 @@ +unit PIC16F1614; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1614'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0010; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0011; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0012; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0013; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0014; + PIR5_TMR3GIF : bit absolute PIR5.7; + PIR5_TMR3IF : bit absolute PIR5.6; + PIR5_TMR5GIF : bit absolute PIR5.5; + PIR5_TMR5IF : bit absolute PIR5.4; + PIR5_AT1IF : bit absolute PIR5.2; + PIR5_PID1EIF : bit absolute PIR5.1; + PIR5_PID1DIF : bit absolute PIR5.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2CLKCON_CS1 : bit absolute T2CLKCON.1; + T2CLKCON_CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0090; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0091; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0092; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0093; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + PIE5 : byte absolute $0094; + PIE5_TMR3GIE : bit absolute PIE5.7; + PIE5_TMR3IE : bit absolute PIE5.6; + PIE5_TMR5GIE : bit absolute PIE5.5; + PIE5_TMR5IE : bit absolute PIE5.4; + PIE5_AT1IE : bit absolute PIE5.2; + PIE5_PID1EIE : bit absolute PIE5.1; + PIE5_PID1DIE : bit absolute PIE5.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0496; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $049D; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + PID1SETL : byte absolute $058C; + PID1SETL_PID1SET7 : bit absolute PID1SETL.7; + PID1SETL_PID1SET6 : bit absolute PID1SETL.6; + PID1SETL_PID1SET5 : bit absolute PID1SETL.5; + PID1SETL_PID1SET4 : bit absolute PID1SETL.4; + PID1SETL_PID1SET3 : bit absolute PID1SETL.3; + PID1SETL_PID1SET2 : bit absolute PID1SETL.2; + PID1SETL_PID1SET1 : bit absolute PID1SETL.1; + PID1SETL_PID1SET0 : bit absolute PID1SETL.0; + PID1SETH : byte absolute $058D; + PID1SETH_PID1SET15 : bit absolute PID1SETH.7; + PID1SETH_PID1SET14 : bit absolute PID1SETH.6; + PID1SETH_PID1SET13 : bit absolute PID1SETH.5; + PID1SETH_PID1SET12 : bit absolute PID1SETH.4; + PID1SETH_PID1SET11 : bit absolute PID1SETH.3; + PID1SETH_PID1SET10 : bit absolute PID1SETH.2; + PID1SETH_PID1SET9 : bit absolute PID1SETH.1; + PID1SETH_PID1SET8 : bit absolute PID1SETH.0; + PID1INL : byte absolute $058E; + PID1INL_PID1IN7 : bit absolute PID1INL.7; + PID1INL_PID1IN6 : bit absolute PID1INL.6; + PID1INL_PID1IN5 : bit absolute PID1INL.5; + PID1INL_PID1IN4 : bit absolute PID1INL.4; + PID1INL_PID1IN3 : bit absolute PID1INL.3; + PID1INL_PID1IN2 : bit absolute PID1INL.2; + PID1INL_PID1IN1 : bit absolute PID1INL.1; + PID1INL_PID1IN0 : bit absolute PID1INL.0; + PID1INH : byte absolute $058F; + PID1INH_PID1IN15 : bit absolute PID1INH.7; + PID1INH_PID1IN14 : bit absolute PID1INH.6; + PID1INH_PID1IN13 : bit absolute PID1INH.5; + PID1INH_PID1IN12 : bit absolute PID1INH.4; + PID1INH_PID1IN11 : bit absolute PID1INH.3; + PID1INH_PID1IN10 : bit absolute PID1INH.2; + PID1INH_PID1IN9 : bit absolute PID1INH.1; + PID1INH_PID1IN8 : bit absolute PID1INH.0; + PID1K1L : byte absolute $0590; + PID1K1L_PID1K17 : bit absolute PID1K1L.7; + PID1K1L_PID1K16 : bit absolute PID1K1L.6; + PID1K1L_PID1K15 : bit absolute PID1K1L.5; + PID1K1L_PID1K14 : bit absolute PID1K1L.4; + PID1K1L_PID1K13 : bit absolute PID1K1L.3; + PID1K1L_PID1K12 : bit absolute PID1K1L.2; + PID1K1L_PID1K11 : bit absolute PID1K1L.1; + PID1K1L_PID1K10 : bit absolute PID1K1L.0; + PID1K1H : byte absolute $0591; + PID1K1H_PID1K115 : bit absolute PID1K1H.7; + PID1K1H_PID1K114 : bit absolute PID1K1H.6; + PID1K1H_PID1K113 : bit absolute PID1K1H.5; + PID1K1H_PID1K112 : bit absolute PID1K1H.4; + PID1K1H_PID1K111 : bit absolute PID1K1H.3; + PID1K1H_PID1K110 : bit absolute PID1K1H.2; + PID1K1H_PID1K19 : bit absolute PID1K1H.1; + PID1K1H_PID1K18 : bit absolute PID1K1H.0; + PID1K2L : byte absolute $0592; + PID1K2L_PID1K27 : bit absolute PID1K2L.7; + PID1K2L_PID1K26 : bit absolute PID1K2L.6; + PID1K2L_PID1K25 : bit absolute PID1K2L.5; + PID1K2L_PID1K24 : bit absolute PID1K2L.4; + PID1K2L_PID1K23 : bit absolute PID1K2L.3; + PID1K2L_PID1K22 : bit absolute PID1K2L.2; + PID1K2L_PID1K21 : bit absolute PID1K2L.1; + PID1K2L_PID1K20 : bit absolute PID1K2L.0; + PID1K2H : byte absolute $0593; + PID1K2H_PID1K215 : bit absolute PID1K2H.7; + PID1K2H_PID1K214 : bit absolute PID1K2H.6; + PID1K2H_PID1K213 : bit absolute PID1K2H.5; + PID1K2H_PID1K212 : bit absolute PID1K2H.4; + PID1K2H_PID1K211 : bit absolute PID1K2H.3; + PID1K2H_PID1K210 : bit absolute PID1K2H.2; + PID1K2H_PID1K29 : bit absolute PID1K2H.1; + PID1K2H_PID1K28 : bit absolute PID1K2H.0; + PID1K3L : byte absolute $0594; + PID1K3L_PID1K37 : bit absolute PID1K3L.7; + PID1K3L_PID1K36 : bit absolute PID1K3L.6; + PID1K3L_PID1K35 : bit absolute PID1K3L.5; + PID1K3L_PID1K34 : bit absolute PID1K3L.4; + PID1K3L_PID1K33 : bit absolute PID1K3L.3; + PID1K3L_PID1K32 : bit absolute PID1K3L.2; + PID1K3L_PID1K31 : bit absolute PID1K3L.1; + PID1K3L_PID1K30 : bit absolute PID1K3L.0; + PID1K3H : byte absolute $0595; + PID1K3H_PID1K315 : bit absolute PID1K3H.7; + PID1K3H_PID1K314 : bit absolute PID1K3H.6; + PID1K3H_PID1K313 : bit absolute PID1K3H.5; + PID1K3H_PID1K312 : bit absolute PID1K3H.4; + PID1K3H_PID1K311 : bit absolute PID1K3H.3; + PID1K3H_PID1K310 : bit absolute PID1K3H.2; + PID1K3H_PID1K39 : bit absolute PID1K3H.1; + PID1K3H_PID1K38 : bit absolute PID1K3H.0; + PID1OUTLL : byte absolute $0596; + PID1OUTLL_PID1OUT7 : bit absolute PID1OUTLL.7; + PID1OUTLL_PID1OUT6 : bit absolute PID1OUTLL.6; + PID1OUTLL_PID1OUT5 : bit absolute PID1OUTLL.5; + PID1OUTLL_PID1OUT4 : bit absolute PID1OUTLL.4; + PID1OUTLL_PID1OUT3 : bit absolute PID1OUTLL.3; + PID1OUTLL_PID1OUT2 : bit absolute PID1OUTLL.2; + PID1OUTLL_PID1OUT1 : bit absolute PID1OUTLL.1; + PID1OUTLL_PID1OUT0 : bit absolute PID1OUTLL.0; + PID1OUTLH : byte absolute $0597; + PID1OUTLH_PID1OUT15 : bit absolute PID1OUTLH.7; + PID1OUTLH_PID1OUT14 : bit absolute PID1OUTLH.6; + PID1OUTLH_PID1OUT13 : bit absolute PID1OUTLH.5; + PID1OUTLH_PID1OUT12 : bit absolute PID1OUTLH.4; + PID1OUTLH_PID1OUT11 : bit absolute PID1OUTLH.3; + PID1OUTLH_PID1OUT10 : bit absolute PID1OUTLH.2; + PID1OUTLH_PID1OUT9 : bit absolute PID1OUTLH.1; + PID1OUTLH_PID1OUT8 : bit absolute PID1OUTLH.0; + PID1OUTHL : byte absolute $0598; + PID1OUTHL_PID1OUT23 : bit absolute PID1OUTHL.7; + PID1OUTHL_PID1OUT22 : bit absolute PID1OUTHL.6; + PID1OUTHL_PID1OUT21 : bit absolute PID1OUTHL.5; + PID1OUTHL_PID1OUT20 : bit absolute PID1OUTHL.4; + PID1OUTHL_PID1OUT19 : bit absolute PID1OUTHL.3; + PID1OUTHL_PID1OUT18 : bit absolute PID1OUTHL.2; + PID1OUTHL_PID1OUT17 : bit absolute PID1OUTHL.1; + PID1OUTHL_PID1OUT16 : bit absolute PID1OUTHL.0; + PID1OUTHH : byte absolute $0599; + PID1OUTHH_PID1OUT31 : bit absolute PID1OUTHH.7; + PID1OUTHH_PID1OUT30 : bit absolute PID1OUTHH.6; + PID1OUTHH_PID1OUT29 : bit absolute PID1OUTHH.5; + PID1OUTHH_PID1OUT28 : bit absolute PID1OUTHH.4; + PID1OUTHH_PID1OUT27 : bit absolute PID1OUTHH.3; + PID1OUTHH_PID1OUT26 : bit absolute PID1OUTHH.2; + PID1OUTHH_PID1OUT25 : bit absolute PID1OUTHH.1; + PID1OUTHH_PID1OUT24 : bit absolute PID1OUTHH.0; + PID1OUTU : byte absolute $059A; + PID1OUTU_PID1OUT35 : bit absolute PID1OUTU.3; + PID1OUTU_PID1OUT34 : bit absolute PID1OUTU.2; + PID1OUTU_PID1OUT33 : bit absolute PID1OUTU.1; + PID1OUTU_PID1OUT32 : bit absolute PID1OUTU.0; + PID1Z1L : byte absolute $059B; + PID1Z1L_PID1Z17 : bit absolute PID1Z1L.7; + PID1Z1L_PID1Z16 : bit absolute PID1Z1L.6; + PID1Z1L_PID1Z15 : bit absolute PID1Z1L.5; + PID1Z1L_PID1Z14 : bit absolute PID1Z1L.4; + PID1Z1L_PID1Z13 : bit absolute PID1Z1L.3; + PID1Z1L_PID1Z12 : bit absolute PID1Z1L.2; + PID1Z1L_PID1Z11 : bit absolute PID1Z1L.1; + PID1Z1L_PID1Z10 : bit absolute PID1Z1L.0; + PID1Z1H : byte absolute $059C; + PID1Z1H_PID1Z115 : bit absolute PID1Z1H.7; + PID1Z1H_PID1Z114 : bit absolute PID1Z1H.6; + PID1Z1H_PID1Z113 : bit absolute PID1Z1H.5; + PID1Z1H_PID1Z112 : bit absolute PID1Z1H.4; + PID1Z1H_PID1Z111 : bit absolute PID1Z1H.3; + PID1Z1H_PID1Z110 : bit absolute PID1Z1H.2; + PID1Z1H_PID1Z19 : bit absolute PID1Z1H.1; + PID1Z1H_PID1Z18 : bit absolute PID1Z1H.0; + PID1Z1U : byte absolute $059D; + PID1Z1U_PID1Z116 : bit absolute PID1Z1U.0; + PID1Z2L : byte absolute $060C; + PID1Z2L_PID1Z27 : bit absolute PID1Z2L.7; + PID1Z2L_PID1Z26 : bit absolute PID1Z2L.6; + PID1Z2L_PID1Z25 : bit absolute PID1Z2L.5; + PID1Z2L_PID1Z24 : bit absolute PID1Z2L.4; + PID1Z2L_PID1Z23 : bit absolute PID1Z2L.3; + PID1Z2L_PID1Z22 : bit absolute PID1Z2L.2; + PID1Z2L_PID1Z21 : bit absolute PID1Z2L.1; + PID1Z2L_PID1Z20 : bit absolute PID1Z2L.0; + PID1Z2H : byte absolute $060D; + PID1Z2H_PID1Z215 : bit absolute PID1Z2H.7; + PID1Z2H_PID1Z214 : bit absolute PID1Z2H.6; + PID1Z2H_PID1Z213 : bit absolute PID1Z2H.5; + PID1Z2H_PID1Z212 : bit absolute PID1Z2H.4; + PID1Z2H_PID1Z211 : bit absolute PID1Z2H.3; + PID1Z2H_PID1Z210 : bit absolute PID1Z2H.2; + PID1Z2H_PID1Z29 : bit absolute PID1Z2H.1; + PID1Z2H_PID1Z28 : bit absolute PID1Z2H.0; + PID1Z2U : byte absolute $060E; + PID1Z2U_PID1Z216 : bit absolute PID1Z2U.0; + PID1ACCLL : byte absolute $060F; + PID1ACCLL_PID1ACC7 : bit absolute PID1ACCLL.7; + PID1ACCLL_PID1ACC6 : bit absolute PID1ACCLL.6; + PID1ACCLL_PID1ACC5 : bit absolute PID1ACCLL.5; + PID1ACCLL_PID1ACC4 : bit absolute PID1ACCLL.4; + PID1ACCLL_PID1ACC3 : bit absolute PID1ACCLL.3; + PID1ACCLL_PID1ACC2 : bit absolute PID1ACCLL.2; + PID1ACCLL_PID1ACC1 : bit absolute PID1ACCLL.1; + PID1ACCLL_PID1ACC0 : bit absolute PID1ACCLL.0; + PID1ACCLH : byte absolute $0610; + PID1ACCLH_PID1ACC15 : bit absolute PID1ACCLH.7; + PID1ACCLH_PID1ACC14 : bit absolute PID1ACCLH.6; + PID1ACCLH_PID1ACC13 : bit absolute PID1ACCLH.5; + PID1ACCLH_PID1ACC12 : bit absolute PID1ACCLH.4; + PID1ACCLH_PID1ACC11 : bit absolute PID1ACCLH.3; + PID1ACCLH_PID1ACC10 : bit absolute PID1ACCLH.2; + PID1ACCLH_PID1ACC9 : bit absolute PID1ACCLH.1; + PID1ACCLH_PID1ACC8 : bit absolute PID1ACCLH.0; + PID1ACCHL : byte absolute $0611; + PID1ACCHL_PID1ACC23 : bit absolute PID1ACCHL.7; + PID1ACCHL_PID1ACC22 : bit absolute PID1ACCHL.6; + PID1ACCHL_PID1ACC21 : bit absolute PID1ACCHL.5; + PID1ACCHL_PID1ACC20 : bit absolute PID1ACCHL.4; + PID1ACCHL_PID1ACC19 : bit absolute PID1ACCHL.3; + PID1ACCHL_PID1ACC18 : bit absolute PID1ACCHL.2; + PID1ACCHL_PID1ACC17 : bit absolute PID1ACCHL.1; + PID1ACCHL_PID1ACC16 : bit absolute PID1ACCHL.0; + PID1ACCHH : byte absolute $0612; + PID1ACCHH_PID1ACC31 : bit absolute PID1ACCHH.7; + PID1ACCHH_PID1ACC30 : bit absolute PID1ACCHH.6; + PID1ACCHH_PID1ACC29 : bit absolute PID1ACCHH.5; + PID1ACCHH_PID1ACC28 : bit absolute PID1ACCHH.4; + PID1ACCHH_PID1ACC27 : bit absolute PID1ACCHH.3; + PID1ACCHH_PID1ACC26 : bit absolute PID1ACCHH.2; + PID1ACCHH_PID1ACC25 : bit absolute PID1ACCHH.1; + PID1ACCHH_PID1ACC24 : bit absolute PID1ACCHH.0; + PID1ACCU : byte absolute $0613; + PID1ACCU_PID1ACC34 : bit absolute PID1ACCU.2; + PID1ACCU_PID1ACC33 : bit absolute PID1ACCU.1; + PID1ACCU_PID1ACC32 : bit absolute PID1ACCU.0; + PID1CON : byte absolute $0614; + PID1CON_PID1EN : bit absolute PID1CON.7; + PID1CON_PID1BUSY : bit absolute PID1CON.6; + PID1CON_PID1MODE2 : bit absolute PID1CON.2; + PID1CON_PID1MODE1 : bit absolute PID1CON.1; + PID1CON_PID1MODE0 : bit absolute PID1CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + AT1RESL : byte absolute $080C; + AT1RESL_AT1RES7 : bit absolute AT1RESL.7; + AT1RESL_AT1RES6 : bit absolute AT1RESL.6; + AT1RESL_AT1RES5 : bit absolute AT1RESL.5; + AT1RESL_AT1RES4 : bit absolute AT1RESL.4; + AT1RESL_AT1RES3 : bit absolute AT1RESL.3; + AT1RESL_AT1RES2 : bit absolute AT1RESL.2; + AT1RESL_AT1RES1 : bit absolute AT1RESL.1; + AT1RESL_AT1RES0 : bit absolute AT1RESL.0; + AT1RESH : byte absolute $080D; + AT1RESH_AT1RES9 : bit absolute AT1RESH.1; + AT1RESH_AT1RES8 : bit absolute AT1RESH.0; + AT1MISSL : byte absolute $080E; + AT1MISSL_AT1MISS7 : bit absolute AT1MISSL.7; + AT1MISSL_AT1MISS6 : bit absolute AT1MISSL.6; + AT1MISSL_AT1MISS5 : bit absolute AT1MISSL.5; + AT1MISSL_AT1MISS4 : bit absolute AT1MISSL.4; + AT1MISSL_AT1MISS3 : bit absolute AT1MISSL.3; + AT1MISSL_AT1MISS2 : bit absolute AT1MISSL.2; + AT1MISSL_AT1MISS1 : bit absolute AT1MISSL.1; + AT1MISSL_AT1MISS0 : bit absolute AT1MISSL.0; + AT1MISSH : byte absolute $080F; + AT1MISSH_AT1MISS15 : bit absolute AT1MISSH.7; + AT1MISSH_AT1MISS14 : bit absolute AT1MISSH.6; + AT1MISSH_AT1MISS13 : bit absolute AT1MISSH.5; + AT1MISSH_AT1MISS12 : bit absolute AT1MISSH.4; + AT1MISSH_AT1MISS11 : bit absolute AT1MISSH.3; + AT1MISSH_AT1MISS10 : bit absolute AT1MISSH.2; + AT1MISSH_AT1MISS9 : bit absolute AT1MISSH.1; + AT1MISSH_AT1MISS8 : bit absolute AT1MISSH.0; + AT1PERL : byte absolute $0810; + AT1PERL_AT1PER7 : bit absolute AT1PERL.7; + AT1PERL_AT1PER6 : bit absolute AT1PERL.6; + AT1PERL_AT1PER5 : bit absolute AT1PERL.5; + AT1PERL_AT1PER4 : bit absolute AT1PERL.4; + AT1PERL_AT1PER3 : bit absolute AT1PERL.3; + AT1PERL_AT1PER2 : bit absolute AT1PERL.2; + AT1PERL_AT1PER1 : bit absolute AT1PERL.1; + AT1PERL_AT1PER0 : bit absolute AT1PERL.0; + AT1PERH : byte absolute $0811; + AT1PERH_AT1POV : bit absolute AT1PERH.7; + AT1PERH_AT1PER14 : bit absolute AT1PERH.6; + AT1PERH_AT1PER13 : bit absolute AT1PERH.5; + AT1PERH_AT1PER12 : bit absolute AT1PERH.4; + AT1PERH_AT1PER11 : bit absolute AT1PERH.3; + AT1PERH_AT1PER10 : bit absolute AT1PERH.2; + AT1PERH_AT1PER9 : bit absolute AT1PERH.1; + AT1PERH_AT1PER8 : bit absolute AT1PERH.0; + AT1PHSL : byte absolute $0812; + AT1PHSL_AT1PHS7 : bit absolute AT1PHSL.7; + AT1PHSL_AT1PHS6 : bit absolute AT1PHSL.6; + AT1PHSL_AT1PHS5 : bit absolute AT1PHSL.5; + AT1PHSL_AT1PHS4 : bit absolute AT1PHSL.4; + AT1PHSL_AT1PHS3 : bit absolute AT1PHSL.3; + AT1PHSL_AT1PHS2 : bit absolute AT1PHSL.2; + AT1PHSL_AT1PHS1 : bit absolute AT1PHSL.1; + AT1PHSL_AT1PHS0 : bit absolute AT1PHSL.0; + AT1PHSH : byte absolute $0813; + AT1PHSH_AT1PHS9 : bit absolute AT1PHSH.1; + AT1PHSH_AT1PHS8 : bit absolute AT1PHSH.0; + AT1CON0 : byte absolute $0814; + AT1CON0_PREC : bit absolute AT1CON0.6; + AT1CON0_APMOD : bit absolute AT1CON0.1; + AT1CON0_MODE : bit absolute AT1CON0.0; + AT1CON1 : byte absolute $0815; + AT1CON1_PHP : bit absolute AT1CON1.6; + AT1CON1_PRP : bit absolute AT1CON1.4; + AT1CON1_MPP : bit absolute AT1CON1.2; + AT1CON1_ACCS : bit absolute AT1CON1.1; + AT1CON1_VALID : bit absolute AT1CON1.0; + AT1IR0 : byte absolute $0816; + AT1IR0_AT1PHSIF : bit absolute AT1IR0.2; + AT1IR0_AT1MISSIF : bit absolute AT1IR0.1; + AT1IR0_AT1PERIF : bit absolute AT1IR0.0; + AT1IE0 : byte absolute $0817; + AT1IE0_AT1PHSIE : bit absolute AT1IE0.2; + AT1IE0_AT1MISSIE : bit absolute AT1IE0.1; + AT1IE0_AT1PERIE : bit absolute AT1IE0.0; + AT1IR1 : byte absolute $0818; + AT1IR1_AT1CC3IF : bit absolute AT1IR1.2; + AT1IR1_AT1CC2IF : bit absolute AT1IR1.1; + AT1IR1_AT1CC1IF : bit absolute AT1IR1.0; + AT1IE1 : byte absolute $0819; + AT1IE1_AT1CC3IE : bit absolute AT1IE1.2; + AT1IE1_AT1CC2IE : bit absolute AT1IE1.1; + AT1IE1_AT1CC1IE : bit absolute AT1IE1.0; + AT1STPTL : byte absolute $081A; + AT1STPTL_AT1STPT7 : bit absolute AT1STPTL.7; + AT1STPTL_AT1STPT6 : bit absolute AT1STPTL.6; + AT1STPTL_AT1STPT5 : bit absolute AT1STPTL.5; + AT1STPTL_AT1STPT4 : bit absolute AT1STPTL.4; + AT1STPTL_AT1STPT3 : bit absolute AT1STPTL.3; + AT1STPTL_AT1STPT2 : bit absolute AT1STPTL.2; + AT1STPTL_AT1STPT1 : bit absolute AT1STPTL.1; + AT1STPTL_AT1STPT0 : bit absolute AT1STPTL.0; + AT1STPTH : byte absolute $081B; + AT1STPTH_AT1STPT14 : bit absolute AT1STPTH.6; + AT1STPTH_AT1STPT13 : bit absolute AT1STPTH.5; + AT1STPTH_AT1STPT12 : bit absolute AT1STPTH.4; + AT1STPTH_AT1STPT11 : bit absolute AT1STPTH.3; + AT1STPTH_AT1STPT10 : bit absolute AT1STPTH.2; + AT1STPTH_AT1STPT9 : bit absolute AT1STPTH.1; + AT1STPTH_AT1STPT8 : bit absolute AT1STPTH.0; + AT1ERRL : byte absolute $081C; + AT1ERRL_AT1ERR7 : bit absolute AT1ERRL.7; + AT1ERRL_AT1ERR6 : bit absolute AT1ERRL.6; + AT1ERRL_AT1ERR5 : bit absolute AT1ERRL.5; + AT1ERRL_AT1ERR4 : bit absolute AT1ERRL.4; + AT1ERRL_AT1ERR3 : bit absolute AT1ERRL.3; + AT1ERRL_AT1ERR2 : bit absolute AT1ERRL.2; + AT1ERRL_AT1ERR1 : bit absolute AT1ERRL.1; + AT1ERRL_AT1ERR0 : bit absolute AT1ERRL.0; + AT1ERRH : byte absolute $081D; + AT1ERRH_AT1ERR15 : bit absolute AT1ERRH.7; + AT1ERRH_AT1ERR14 : bit absolute AT1ERRH.6; + AT1ERRH_AT1ERR13 : bit absolute AT1ERRH.5; + AT1ERRH_AT1ERR12 : bit absolute AT1ERRH.4; + AT1ERRH_AT1ERR11 : bit absolute AT1ERRH.3; + AT1ERRH_AT1ERR10 : bit absolute AT1ERRH.2; + AT1ERRH_AT1ERR9 : bit absolute AT1ERRH.1; + AT1ERRH_AT1ERR8 : bit absolute AT1ERRH.0; + AT1CLK : byte absolute $088C; + AT1SIG : byte absolute $088D; + AT1SIG_SSEL2 : bit absolute AT1SIG.2; + AT1SIG_SSEL1 : bit absolute AT1SIG.1; + AT1SIG_SSEL0 : bit absolute AT1SIG.0; + AT1CSEL1 : byte absolute $088E; + AT1CSEL1_CP1S2 : bit absolute AT1CSEL1.2; + AT1CSEL1_CP1S1 : bit absolute AT1CSEL1.1; + AT1CSEL1_CP1S0 : bit absolute AT1CSEL1.0; + AT1CC1L : byte absolute $088F; + AT1CC1L_AT1CC17 : bit absolute AT1CC1L.7; + AT1CC1L_AT1CC16 : bit absolute AT1CC1L.6; + AT1CC1L_AT1CC15 : bit absolute AT1CC1L.5; + AT1CC1L_AT1CC14 : bit absolute AT1CC1L.4; + AT1CC1L_AT1CC13 : bit absolute AT1CC1L.3; + AT1CC1L_AT1CC12 : bit absolute AT1CC1L.2; + AT1CC1L_AT1CC11 : bit absolute AT1CC1L.1; + AT1CC1L_AT1CC10 : bit absolute AT1CC1L.0; + AT1CC1H : byte absolute $0890; + AT1CC1H_AT1CC19 : bit absolute AT1CC1H.1; + AT1CC1H_AT1CC18 : bit absolute AT1CC1H.0; + AT1CCON1 : byte absolute $0891; + AT1CCON1_AT1CC1EN : bit absolute AT1CCON1.7; + AT1CCON1_AT1CC1POL : bit absolute AT1CCON1.4; + AT1CCON1_AT1CAP1P : bit absolute AT1CCON1.3; + AT1CCON1_AT1CC1MODE : bit absolute AT1CCON1.0; + AT1CSEL2 : byte absolute $0892; + AT1CSEL2_AT1CP2S2 : bit absolute AT1CSEL2.2; + AT1CSEL2_AT1CP2S1 : bit absolute AT1CSEL2.1; + AT1CSEL2_AT1CP2S0 : bit absolute AT1CSEL2.0; + AT1CC2L : byte absolute $0893; + AT1CC2L_AT1CC27 : bit absolute AT1CC2L.7; + AT1CC2L_AT1CC26 : bit absolute AT1CC2L.6; + AT1CC2L_AT1CC25 : bit absolute AT1CC2L.5; + AT1CC2L_AT1CC24 : bit absolute AT1CC2L.4; + AT1CC2L_AT1CC23 : bit absolute AT1CC2L.3; + AT1CC2L_AT1CC22 : bit absolute AT1CC2L.2; + AT1CC2L_AT1CC21 : bit absolute AT1CC2L.1; + AT1CC2L_AT1CC20 : bit absolute AT1CC2L.0; + AT1CC2H : byte absolute $0894; + AT1CC2H_AT1CC29 : bit absolute AT1CC2H.1; + AT1CC2H_AT1CC28 : bit absolute AT1CC2H.0; + AT1CCON2 : byte absolute $0895; + AT1CCON2_AT1CC2EN : bit absolute AT1CCON2.7; + AT1CCON2_AT1CC2POL : bit absolute AT1CCON2.4; + AT1CCON2_AT1CAP2P : bit absolute AT1CCON2.3; + AT1CCON2_AT1CC2MODE : bit absolute AT1CCON2.0; + AT1CSEL3 : byte absolute $0896; + AT1CSEL3_AT1CP3S2 : bit absolute AT1CSEL3.2; + AT1CSEL3_AT1CP3S1 : bit absolute AT1CSEL3.1; + AT1CSEL3_AT1CP3S0 : bit absolute AT1CSEL3.0; + AT1CC3L : byte absolute $0897; + AT1CC3L_AT1CC37 : bit absolute AT1CC3L.7; + AT1CC3L_AT1CC36 : bit absolute AT1CC3L.6; + AT1CC3L_AT1CC35 : bit absolute AT1CC3L.5; + AT1CC3L_AT1CC34 : bit absolute AT1CC3L.4; + AT1CC3L_AT1CC33 : bit absolute AT1CC3L.3; + AT1CC3L_AT1CC32 : bit absolute AT1CC3L.2; + AT1CC3L_AT1CC31 : bit absolute AT1CC3L.1; + AT1CC3L_AT1CC30 : bit absolute AT1CC3L.0; + AT1CC3H : byte absolute $0898; + AT1CC3H_AT1CC39 : bit absolute AT1CC3H.1; + AT1CC3H_AT1CC38 : bit absolute AT1CC3H.0; + AT1CCON3 : byte absolute $0899; + AT1CCON3_AT1CC3EN : bit absolute AT1CCON3.7; + AT1CCON3_AT1CC3POL : bit absolute AT1CCON3.4; + AT1CCON3_AT1CAP3P : bit absolute AT1CCON3.3; + AT1CCON3_AT1CC3MODE : bit absolute AT1CCON3.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + ATINPPS : byte absolute $0E16; + ATINPPS_ATINPPS4 : bit absolute ATINPPS.4; + ATINPPS_ATINPPS3 : bit absolute ATINPPS.3; + ATINPPS_ATINPPS2 : bit absolute ATINPPS.2; + ATINPPS_ATINPPS1 : bit absolute ATINPPS.1; + ATINPPS_ATINPPS0 : bit absolute ATINPPS.0; + CWGINPPS : byte absolute $0E17; + CWGINPPS_CWGINPPS4 : bit absolute CWGINPPS.4; + CWGINPPS_CWGINPPS3 : bit absolute CWGINPPS.3; + CWGINPPS_CWGINPPS2 : bit absolute CWGINPPS.2; + CWGINPPS_CWGINPPS1 : bit absolute CWGINPPS.1; + CWGINPPS_CWGINPPS0 : bit absolute CWGINPPS.0; + T2PPS : byte absolute $0E18; + T2PPS_T2PPS4 : bit absolute T2PPS.4; + T2PPS_T2PPS3 : bit absolute T2PPS.3; + T2PPS_T2PPS2 : bit absolute T2PPS.2; + T2PPS_T2PPS1 : bit absolute T2PPS.1; + T2PPS_T2PPS0 : bit absolute T2PPS.0; + T3CKIPPS : byte absolute $0E19; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1A; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4PPS : byte absolute $0E1B; + T4PPS_T4PPS4 : bit absolute T4PPS.4; + T4PPS_T4PPS3 : bit absolute T4PPS.3; + T4PPS_T4PPS2 : bit absolute T4PPS.2; + T4PPS_T4PPS1 : bit absolute T4PPS.1; + T4PPS_T4PPS0 : bit absolute T4PPS.0; + T5CKIPPS : byte absolute $0E1C; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1D; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6PPS : byte absolute $0E1E; + T6PPS_T6PPS4 : bit absolute T6PPS.4; + T6PPS_T6PPS3 : bit absolute T6PPS.3; + T6PPS_T6PPS2 : bit absolute T6PPS.2; + T6PPS_T6PPS1 : bit absolute T6PPS.1; + T6PPS_T6PPS0 : bit absolute T6PPS.0; + ATCC1PPS : byte absolute $0E1F; + ATCC1PPS_ATCC1PPS4 : bit absolute ATCC1PPS.4; + ATCC1PPS_ATCC1PPS3 : bit absolute ATCC1PPS.3; + ATCC1PPS_ATCC1PPS2 : bit absolute ATCC1PPS.2; + ATCC1PPS_ATCC1PPS1 : bit absolute ATCC1PPS.1; + ATCC1PPS_ATCC1PPS0 : bit absolute ATCC1PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + ATCC2PPS : byte absolute $0E23; + ATCC2PPS_ATCC2PPS4 : bit absolute ATCC2PPS.4; + ATCC2PPS_ATCC2PPS3 : bit absolute ATCC2PPS.3; + ATCC2PPS_ATCC2PPS2 : bit absolute ATCC2PPS.2; + ATCC2PPS_ATCC2PPS1 : bit absolute ATCC2PPS.1; + ATCC2PPS_ATCC2PPS0 : bit absolute ATCC2PPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + SMT1SIGPPS : byte absolute $0E26; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT1WINPPS : byte absolute $0E27; + SMT1WINPPS_SMTWINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMTWINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMTWINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMTWINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMTWINPPS0 : bit absolute SMT1WINPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + SMT2SIGPPS : byte absolute $0E2C; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + SMT2WINPPS : byte absolute $0E2D; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + ATCC3PPS : byte absolute $0E2E; + ATCC3PPS_ATCC3PPS4 : bit absolute ATCC3PPS.4; + ATCC3PPS_ATCC3PPS3 : bit absolute ATCC3PPS.3; + ATCC3PPS_ATCC3PPS2 : bit absolute ATCC3PPS.2; + ATCC3PPS_ATCC3PPS1 : bit absolute ATCC3PPS.1; + ATCC3PPS_ATCC3PPS0 : bit absolute ATCC3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, PIR5, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, PIE5, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '58C-59D:SFR'} // Bank 11 : PID1SETL, PID1SETH, PID1INL, PID1INH, PID1K1L, PID1K1H, PID1K2L, PID1K2H, PID1K3L, PID1K3H, PID1OUTLL, PID1OUTLH, PID1OUTHL, PID1OUTHH, PID1OUTU, PID1Z1L, PID1Z1H, PID1Z1U + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : PID1Z2L, PID1Z2H, PID1Z2U, PID1ACCLL, PID1ACCLH, PID1ACCHL, PID1ACCHH, PID1ACCU, PID1CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-697:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1 + {$SET_STATE_RAM '699-69A:SFR'} // Bank 13 : CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '80C-81D:SFR'} // Bank 16 : AT1RESL, AT1RESH, AT1MISSL, AT1MISSH, AT1PERL, AT1PERH, AT1PHSL, AT1PHSH, AT1CON0, AT1CON1, AT1IR0, AT1IE0, AT1IR1, AT1IE1, AT1STPTL, AT1STPTH, AT1ERRL, AT1ERRH + {$SET_STATE_RAM '88C-899:SFR'} // Bank 17 : AT1CLK, AT1SIG, AT1CSEL1, AT1CC1L, AT1CC1H, AT1CCON1, AT1CSEL2, AT1CC2L, AT1CC2H, AT1CCON2, AT1CSEL3, AT1CC3L, AT1CC3H, AT1CCON3 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'E0F-E2E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, ATINPPS, CWGINPPS, T2PPS, T3CKIPPS, T3GPPS, T4PPS, T5CKIPPS, T5GPPS, T6PPS, ATCC1PPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, ATCC2PPS, RXPPS, CKPPS, SMT1SIGPPS, SMT1WINPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, SMT2SIGPPS, SMT2WINPPS, ATCC3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F23:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:6F'} // PIR2 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:33'} // PIR3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:6F'} // PIE2 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:5F'} // OSCSTAT bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:0F'} // PID1OUTU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59D:01'} // PID1Z1U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:01'} // PID1Z2U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:07'} // PID1ACCU bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C7'} // PID1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:03'} // AT1RESH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // AT1PHSH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:FB'} // AT1CON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:57'} // AT1CON1 bits 7,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:07'} // AT1IR0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:07'} // AT1IE0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:07'} // AT1IR1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:07'} // AT1IE1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // AT1STPTH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:01'} // AT1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:07'} // AT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:07'} // AT1CSEL1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:03'} // AT1CC1H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:99'} // AT1CCON1 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:07'} // AT1CSEL2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:03'} // AT1CC2H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:99'} // AT1CCON2 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:07'} // AT1CSEL3 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:03'} // AT1CC3H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:99'} // AT1CCON3 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // ATINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CWGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // T2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // ATCC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:1F'} // ATCC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // ATCC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN + // Pin 3 : RA4/AN3/CLKOUT + // Pin 4 : RA3/VPP/nMCLR/MCLR + // Pin 5 : RC5/HIDC5 + // Pin 6 : RC4/HIDC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC2/AN6/C1IN2-/C2IN2- + // Pin 9 : RC1/AN5/C1IN1-/C2IN1- + // Pin 10 : RC0/AN4/C2IN+ + // Pin 11 : RA2/AN2 + // Pin 12 : RA1/AN1/VREF+/C1IN0-/C2IN0-/ICSPCLK + // Pin 13 : RA0/AN0/DACOUT/C1IN+/ICSPDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC16F1615.pas b/devices17/PIC16F1615.pas new file mode 100644 index 00000000..6354c9c8 --- /dev/null +++ b/devices17/PIC16F1615.pas @@ -0,0 +1,2261 @@ +unit PIC16F1615; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1615'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0010; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0011; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0012; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0013; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0014; + PIR5_TMR3GIF : bit absolute PIR5.7; + PIR5_TMR3IF : bit absolute PIR5.6; + PIR5_TMR5GIF : bit absolute PIR5.5; + PIR5_TMR5IF : bit absolute PIR5.4; + PIR5_AT1IF : bit absolute PIR5.2; + PIR5_PID1EIF : bit absolute PIR5.1; + PIR5_PID1DIF : bit absolute PIR5.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2CLKCON_CS1 : bit absolute T2CLKCON.1; + T2CLKCON_CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0090; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0091; + PIE2_OSCFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0092; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0093; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + PIE5 : byte absolute $0094; + PIE5_TMR3GIE : bit absolute PIE5.7; + PIE5_TMR3IE : bit absolute PIE5.6; + PIE5_TMR5GIE : bit absolute PIE5.5; + PIE5_TMR5IE : bit absolute PIE5.4; + PIE5_AT1IE : bit absolute PIE5.2; + PIE5_PID1EIE : bit absolute PIE5.1; + PIE5_PID1DIE : bit absolute PIE5.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0496; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $049D; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + PID1SETL : byte absolute $058C; + PID1SETL_PID1SET7 : bit absolute PID1SETL.7; + PID1SETL_PID1SET6 : bit absolute PID1SETL.6; + PID1SETL_PID1SET5 : bit absolute PID1SETL.5; + PID1SETL_PID1SET4 : bit absolute PID1SETL.4; + PID1SETL_PID1SET3 : bit absolute PID1SETL.3; + PID1SETL_PID1SET2 : bit absolute PID1SETL.2; + PID1SETL_PID1SET1 : bit absolute PID1SETL.1; + PID1SETL_PID1SET0 : bit absolute PID1SETL.0; + PID1SETH : byte absolute $058D; + PID1SETH_PID1SET15 : bit absolute PID1SETH.7; + PID1SETH_PID1SET14 : bit absolute PID1SETH.6; + PID1SETH_PID1SET13 : bit absolute PID1SETH.5; + PID1SETH_PID1SET12 : bit absolute PID1SETH.4; + PID1SETH_PID1SET11 : bit absolute PID1SETH.3; + PID1SETH_PID1SET10 : bit absolute PID1SETH.2; + PID1SETH_PID1SET9 : bit absolute PID1SETH.1; + PID1SETH_PID1SET8 : bit absolute PID1SETH.0; + PID1INL : byte absolute $058E; + PID1INL_PID1IN7 : bit absolute PID1INL.7; + PID1INL_PID1IN6 : bit absolute PID1INL.6; + PID1INL_PID1IN5 : bit absolute PID1INL.5; + PID1INL_PID1IN4 : bit absolute PID1INL.4; + PID1INL_PID1IN3 : bit absolute PID1INL.3; + PID1INL_PID1IN2 : bit absolute PID1INL.2; + PID1INL_PID1IN1 : bit absolute PID1INL.1; + PID1INL_PID1IN0 : bit absolute PID1INL.0; + PID1INH : byte absolute $058F; + PID1INH_PID1IN15 : bit absolute PID1INH.7; + PID1INH_PID1IN14 : bit absolute PID1INH.6; + PID1INH_PID1IN13 : bit absolute PID1INH.5; + PID1INH_PID1IN12 : bit absolute PID1INH.4; + PID1INH_PID1IN11 : bit absolute PID1INH.3; + PID1INH_PID1IN10 : bit absolute PID1INH.2; + PID1INH_PID1IN9 : bit absolute PID1INH.1; + PID1INH_PID1IN8 : bit absolute PID1INH.0; + PID1K1L : byte absolute $0590; + PID1K1L_PID1K17 : bit absolute PID1K1L.7; + PID1K1L_PID1K16 : bit absolute PID1K1L.6; + PID1K1L_PID1K15 : bit absolute PID1K1L.5; + PID1K1L_PID1K14 : bit absolute PID1K1L.4; + PID1K1L_PID1K13 : bit absolute PID1K1L.3; + PID1K1L_PID1K12 : bit absolute PID1K1L.2; + PID1K1L_PID1K11 : bit absolute PID1K1L.1; + PID1K1L_PID1K10 : bit absolute PID1K1L.0; + PID1K1H : byte absolute $0591; + PID1K1H_PID1K115 : bit absolute PID1K1H.7; + PID1K1H_PID1K114 : bit absolute PID1K1H.6; + PID1K1H_PID1K113 : bit absolute PID1K1H.5; + PID1K1H_PID1K112 : bit absolute PID1K1H.4; + PID1K1H_PID1K111 : bit absolute PID1K1H.3; + PID1K1H_PID1K110 : bit absolute PID1K1H.2; + PID1K1H_PID1K19 : bit absolute PID1K1H.1; + PID1K1H_PID1K18 : bit absolute PID1K1H.0; + PID1K2L : byte absolute $0592; + PID1K2L_PID1K27 : bit absolute PID1K2L.7; + PID1K2L_PID1K26 : bit absolute PID1K2L.6; + PID1K2L_PID1K25 : bit absolute PID1K2L.5; + PID1K2L_PID1K24 : bit absolute PID1K2L.4; + PID1K2L_PID1K23 : bit absolute PID1K2L.3; + PID1K2L_PID1K22 : bit absolute PID1K2L.2; + PID1K2L_PID1K21 : bit absolute PID1K2L.1; + PID1K2L_PID1K20 : bit absolute PID1K2L.0; + PID1K2H : byte absolute $0593; + PID1K2H_PID1K215 : bit absolute PID1K2H.7; + PID1K2H_PID1K214 : bit absolute PID1K2H.6; + PID1K2H_PID1K213 : bit absolute PID1K2H.5; + PID1K2H_PID1K212 : bit absolute PID1K2H.4; + PID1K2H_PID1K211 : bit absolute PID1K2H.3; + PID1K2H_PID1K210 : bit absolute PID1K2H.2; + PID1K2H_PID1K29 : bit absolute PID1K2H.1; + PID1K2H_PID1K28 : bit absolute PID1K2H.0; + PID1K3L : byte absolute $0594; + PID1K3L_PID1K37 : bit absolute PID1K3L.7; + PID1K3L_PID1K36 : bit absolute PID1K3L.6; + PID1K3L_PID1K35 : bit absolute PID1K3L.5; + PID1K3L_PID1K34 : bit absolute PID1K3L.4; + PID1K3L_PID1K33 : bit absolute PID1K3L.3; + PID1K3L_PID1K32 : bit absolute PID1K3L.2; + PID1K3L_PID1K31 : bit absolute PID1K3L.1; + PID1K3L_PID1K30 : bit absolute PID1K3L.0; + PID1K3H : byte absolute $0595; + PID1K3H_PID1K315 : bit absolute PID1K3H.7; + PID1K3H_PID1K314 : bit absolute PID1K3H.6; + PID1K3H_PID1K313 : bit absolute PID1K3H.5; + PID1K3H_PID1K312 : bit absolute PID1K3H.4; + PID1K3H_PID1K311 : bit absolute PID1K3H.3; + PID1K3H_PID1K310 : bit absolute PID1K3H.2; + PID1K3H_PID1K39 : bit absolute PID1K3H.1; + PID1K3H_PID1K38 : bit absolute PID1K3H.0; + PID1OUTLL : byte absolute $0596; + PID1OUTLL_PID1OUT7 : bit absolute PID1OUTLL.7; + PID1OUTLL_PID1OUT6 : bit absolute PID1OUTLL.6; + PID1OUTLL_PID1OUT5 : bit absolute PID1OUTLL.5; + PID1OUTLL_PID1OUT4 : bit absolute PID1OUTLL.4; + PID1OUTLL_PID1OUT3 : bit absolute PID1OUTLL.3; + PID1OUTLL_PID1OUT2 : bit absolute PID1OUTLL.2; + PID1OUTLL_PID1OUT1 : bit absolute PID1OUTLL.1; + PID1OUTLL_PID1OUT0 : bit absolute PID1OUTLL.0; + PID1OUTLH : byte absolute $0597; + PID1OUTLH_PID1OUT15 : bit absolute PID1OUTLH.7; + PID1OUTLH_PID1OUT14 : bit absolute PID1OUTLH.6; + PID1OUTLH_PID1OUT13 : bit absolute PID1OUTLH.5; + PID1OUTLH_PID1OUT12 : bit absolute PID1OUTLH.4; + PID1OUTLH_PID1OUT11 : bit absolute PID1OUTLH.3; + PID1OUTLH_PID1OUT10 : bit absolute PID1OUTLH.2; + PID1OUTLH_PID1OUT9 : bit absolute PID1OUTLH.1; + PID1OUTLH_PID1OUT8 : bit absolute PID1OUTLH.0; + PID1OUTHL : byte absolute $0598; + PID1OUTHL_PID1OUT23 : bit absolute PID1OUTHL.7; + PID1OUTHL_PID1OUT22 : bit absolute PID1OUTHL.6; + PID1OUTHL_PID1OUT21 : bit absolute PID1OUTHL.5; + PID1OUTHL_PID1OUT20 : bit absolute PID1OUTHL.4; + PID1OUTHL_PID1OUT19 : bit absolute PID1OUTHL.3; + PID1OUTHL_PID1OUT18 : bit absolute PID1OUTHL.2; + PID1OUTHL_PID1OUT17 : bit absolute PID1OUTHL.1; + PID1OUTHL_PID1OUT16 : bit absolute PID1OUTHL.0; + PID1OUTHH : byte absolute $0599; + PID1OUTHH_PID1OUT31 : bit absolute PID1OUTHH.7; + PID1OUTHH_PID1OUT30 : bit absolute PID1OUTHH.6; + PID1OUTHH_PID1OUT29 : bit absolute PID1OUTHH.5; + PID1OUTHH_PID1OUT28 : bit absolute PID1OUTHH.4; + PID1OUTHH_PID1OUT27 : bit absolute PID1OUTHH.3; + PID1OUTHH_PID1OUT26 : bit absolute PID1OUTHH.2; + PID1OUTHH_PID1OUT25 : bit absolute PID1OUTHH.1; + PID1OUTHH_PID1OUT24 : bit absolute PID1OUTHH.0; + PID1OUTU : byte absolute $059A; + PID1OUTU_PID1OUT35 : bit absolute PID1OUTU.3; + PID1OUTU_PID1OUT34 : bit absolute PID1OUTU.2; + PID1OUTU_PID1OUT33 : bit absolute PID1OUTU.1; + PID1OUTU_PID1OUT32 : bit absolute PID1OUTU.0; + PID1Z1L : byte absolute $059B; + PID1Z1L_PID1Z17 : bit absolute PID1Z1L.7; + PID1Z1L_PID1Z16 : bit absolute PID1Z1L.6; + PID1Z1L_PID1Z15 : bit absolute PID1Z1L.5; + PID1Z1L_PID1Z14 : bit absolute PID1Z1L.4; + PID1Z1L_PID1Z13 : bit absolute PID1Z1L.3; + PID1Z1L_PID1Z12 : bit absolute PID1Z1L.2; + PID1Z1L_PID1Z11 : bit absolute PID1Z1L.1; + PID1Z1L_PID1Z10 : bit absolute PID1Z1L.0; + PID1Z1H : byte absolute $059C; + PID1Z1H_PID1Z115 : bit absolute PID1Z1H.7; + PID1Z1H_PID1Z114 : bit absolute PID1Z1H.6; + PID1Z1H_PID1Z113 : bit absolute PID1Z1H.5; + PID1Z1H_PID1Z112 : bit absolute PID1Z1H.4; + PID1Z1H_PID1Z111 : bit absolute PID1Z1H.3; + PID1Z1H_PID1Z110 : bit absolute PID1Z1H.2; + PID1Z1H_PID1Z19 : bit absolute PID1Z1H.1; + PID1Z1H_PID1Z18 : bit absolute PID1Z1H.0; + PID1Z1U : byte absolute $059D; + PID1Z1U_PID1Z116 : bit absolute PID1Z1U.0; + PID1Z2L : byte absolute $060C; + PID1Z2L_PID1Z27 : bit absolute PID1Z2L.7; + PID1Z2L_PID1Z26 : bit absolute PID1Z2L.6; + PID1Z2L_PID1Z25 : bit absolute PID1Z2L.5; + PID1Z2L_PID1Z24 : bit absolute PID1Z2L.4; + PID1Z2L_PID1Z23 : bit absolute PID1Z2L.3; + PID1Z2L_PID1Z22 : bit absolute PID1Z2L.2; + PID1Z2L_PID1Z21 : bit absolute PID1Z2L.1; + PID1Z2L_PID1Z20 : bit absolute PID1Z2L.0; + PID1Z2H : byte absolute $060D; + PID1Z2H_PID1Z215 : bit absolute PID1Z2H.7; + PID1Z2H_PID1Z214 : bit absolute PID1Z2H.6; + PID1Z2H_PID1Z213 : bit absolute PID1Z2H.5; + PID1Z2H_PID1Z212 : bit absolute PID1Z2H.4; + PID1Z2H_PID1Z211 : bit absolute PID1Z2H.3; + PID1Z2H_PID1Z210 : bit absolute PID1Z2H.2; + PID1Z2H_PID1Z29 : bit absolute PID1Z2H.1; + PID1Z2H_PID1Z28 : bit absolute PID1Z2H.0; + PID1Z2U : byte absolute $060E; + PID1Z2U_PID1Z216 : bit absolute PID1Z2U.0; + PID1ACCLL : byte absolute $060F; + PID1ACCLL_PID1ACC7 : bit absolute PID1ACCLL.7; + PID1ACCLL_PID1ACC6 : bit absolute PID1ACCLL.6; + PID1ACCLL_PID1ACC5 : bit absolute PID1ACCLL.5; + PID1ACCLL_PID1ACC4 : bit absolute PID1ACCLL.4; + PID1ACCLL_PID1ACC3 : bit absolute PID1ACCLL.3; + PID1ACCLL_PID1ACC2 : bit absolute PID1ACCLL.2; + PID1ACCLL_PID1ACC1 : bit absolute PID1ACCLL.1; + PID1ACCLL_PID1ACC0 : bit absolute PID1ACCLL.0; + PID1ACCLH : byte absolute $0610; + PID1ACCLH_PID1ACC15 : bit absolute PID1ACCLH.7; + PID1ACCLH_PID1ACC14 : bit absolute PID1ACCLH.6; + PID1ACCLH_PID1ACC13 : bit absolute PID1ACCLH.5; + PID1ACCLH_PID1ACC12 : bit absolute PID1ACCLH.4; + PID1ACCLH_PID1ACC11 : bit absolute PID1ACCLH.3; + PID1ACCLH_PID1ACC10 : bit absolute PID1ACCLH.2; + PID1ACCLH_PID1ACC9 : bit absolute PID1ACCLH.1; + PID1ACCLH_PID1ACC8 : bit absolute PID1ACCLH.0; + PID1ACCHL : byte absolute $0611; + PID1ACCHL_PID1ACC23 : bit absolute PID1ACCHL.7; + PID1ACCHL_PID1ACC22 : bit absolute PID1ACCHL.6; + PID1ACCHL_PID1ACC21 : bit absolute PID1ACCHL.5; + PID1ACCHL_PID1ACC20 : bit absolute PID1ACCHL.4; + PID1ACCHL_PID1ACC19 : bit absolute PID1ACCHL.3; + PID1ACCHL_PID1ACC18 : bit absolute PID1ACCHL.2; + PID1ACCHL_PID1ACC17 : bit absolute PID1ACCHL.1; + PID1ACCHL_PID1ACC16 : bit absolute PID1ACCHL.0; + PID1ACCHH : byte absolute $0612; + PID1ACCHH_PID1ACC31 : bit absolute PID1ACCHH.7; + PID1ACCHH_PID1ACC30 : bit absolute PID1ACCHH.6; + PID1ACCHH_PID1ACC29 : bit absolute PID1ACCHH.5; + PID1ACCHH_PID1ACC28 : bit absolute PID1ACCHH.4; + PID1ACCHH_PID1ACC27 : bit absolute PID1ACCHH.3; + PID1ACCHH_PID1ACC26 : bit absolute PID1ACCHH.2; + PID1ACCHH_PID1ACC25 : bit absolute PID1ACCHH.1; + PID1ACCHH_PID1ACC24 : bit absolute PID1ACCHH.0; + PID1ACCU : byte absolute $0613; + PID1ACCU_PID1ACC34 : bit absolute PID1ACCU.2; + PID1ACCU_PID1ACC33 : bit absolute PID1ACCU.1; + PID1ACCU_PID1ACC32 : bit absolute PID1ACCU.0; + PID1CON : byte absolute $0614; + PID1CON_PID1EN : bit absolute PID1CON.7; + PID1CON_PID1BUSY : bit absolute PID1CON.6; + PID1CON_PID1MODE2 : bit absolute PID1CON.2; + PID1CON_PID1MODE1 : bit absolute PID1CON.1; + PID1CON_PID1MODE0 : bit absolute PID1CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + AT1RESL : byte absolute $080C; + AT1RESL_AT1RES7 : bit absolute AT1RESL.7; + AT1RESL_AT1RES6 : bit absolute AT1RESL.6; + AT1RESL_AT1RES5 : bit absolute AT1RESL.5; + AT1RESL_AT1RES4 : bit absolute AT1RESL.4; + AT1RESL_AT1RES3 : bit absolute AT1RESL.3; + AT1RESL_AT1RES2 : bit absolute AT1RESL.2; + AT1RESL_AT1RES1 : bit absolute AT1RESL.1; + AT1RESL_AT1RES0 : bit absolute AT1RESL.0; + AT1RESH : byte absolute $080D; + AT1RESH_AT1RES9 : bit absolute AT1RESH.1; + AT1RESH_AT1RES8 : bit absolute AT1RESH.0; + AT1MISSL : byte absolute $080E; + AT1MISSL_AT1MISS7 : bit absolute AT1MISSL.7; + AT1MISSL_AT1MISS6 : bit absolute AT1MISSL.6; + AT1MISSL_AT1MISS5 : bit absolute AT1MISSL.5; + AT1MISSL_AT1MISS4 : bit absolute AT1MISSL.4; + AT1MISSL_AT1MISS3 : bit absolute AT1MISSL.3; + AT1MISSL_AT1MISS2 : bit absolute AT1MISSL.2; + AT1MISSL_AT1MISS1 : bit absolute AT1MISSL.1; + AT1MISSL_AT1MISS0 : bit absolute AT1MISSL.0; + AT1MISSH : byte absolute $080F; + AT1MISSH_AT1MISS15 : bit absolute AT1MISSH.7; + AT1MISSH_AT1MISS14 : bit absolute AT1MISSH.6; + AT1MISSH_AT1MISS13 : bit absolute AT1MISSH.5; + AT1MISSH_AT1MISS12 : bit absolute AT1MISSH.4; + AT1MISSH_AT1MISS11 : bit absolute AT1MISSH.3; + AT1MISSH_AT1MISS10 : bit absolute AT1MISSH.2; + AT1MISSH_AT1MISS9 : bit absolute AT1MISSH.1; + AT1MISSH_AT1MISS8 : bit absolute AT1MISSH.0; + AT1PERL : byte absolute $0810; + AT1PERL_AT1PER7 : bit absolute AT1PERL.7; + AT1PERL_AT1PER6 : bit absolute AT1PERL.6; + AT1PERL_AT1PER5 : bit absolute AT1PERL.5; + AT1PERL_AT1PER4 : bit absolute AT1PERL.4; + AT1PERL_AT1PER3 : bit absolute AT1PERL.3; + AT1PERL_AT1PER2 : bit absolute AT1PERL.2; + AT1PERL_AT1PER1 : bit absolute AT1PERL.1; + AT1PERL_AT1PER0 : bit absolute AT1PERL.0; + AT1PERH : byte absolute $0811; + AT1PERH_AT1POV : bit absolute AT1PERH.7; + AT1PERH_AT1PER14 : bit absolute AT1PERH.6; + AT1PERH_AT1PER13 : bit absolute AT1PERH.5; + AT1PERH_AT1PER12 : bit absolute AT1PERH.4; + AT1PERH_AT1PER11 : bit absolute AT1PERH.3; + AT1PERH_AT1PER10 : bit absolute AT1PERH.2; + AT1PERH_AT1PER9 : bit absolute AT1PERH.1; + AT1PERH_AT1PER8 : bit absolute AT1PERH.0; + AT1PHSL : byte absolute $0812; + AT1PHSL_AT1PHS7 : bit absolute AT1PHSL.7; + AT1PHSL_AT1PHS6 : bit absolute AT1PHSL.6; + AT1PHSL_AT1PHS5 : bit absolute AT1PHSL.5; + AT1PHSL_AT1PHS4 : bit absolute AT1PHSL.4; + AT1PHSL_AT1PHS3 : bit absolute AT1PHSL.3; + AT1PHSL_AT1PHS2 : bit absolute AT1PHSL.2; + AT1PHSL_AT1PHS1 : bit absolute AT1PHSL.1; + AT1PHSL_AT1PHS0 : bit absolute AT1PHSL.0; + AT1PHSH : byte absolute $0813; + AT1PHSH_AT1PHS9 : bit absolute AT1PHSH.1; + AT1PHSH_AT1PHS8 : bit absolute AT1PHSH.0; + AT1CON0 : byte absolute $0814; + AT1CON0_PREC : bit absolute AT1CON0.6; + AT1CON0_APMOD : bit absolute AT1CON0.1; + AT1CON0_MODE : bit absolute AT1CON0.0; + AT1CON1 : byte absolute $0815; + AT1CON1_PHP : bit absolute AT1CON1.6; + AT1CON1_PRP : bit absolute AT1CON1.4; + AT1CON1_MPP : bit absolute AT1CON1.2; + AT1CON1_ACCS : bit absolute AT1CON1.1; + AT1CON1_VALID : bit absolute AT1CON1.0; + AT1IR0 : byte absolute $0816; + AT1IR0_AT1PHSIF : bit absolute AT1IR0.2; + AT1IR0_AT1MISSIF : bit absolute AT1IR0.1; + AT1IR0_AT1PERIF : bit absolute AT1IR0.0; + AT1IE0 : byte absolute $0817; + AT1IE0_AT1PHSIE : bit absolute AT1IE0.2; + AT1IE0_AT1MISSIE : bit absolute AT1IE0.1; + AT1IE0_AT1PERIE : bit absolute AT1IE0.0; + AT1IR1 : byte absolute $0818; + AT1IR1_AT1CC3IF : bit absolute AT1IR1.2; + AT1IR1_AT1CC2IF : bit absolute AT1IR1.1; + AT1IR1_AT1CC1IF : bit absolute AT1IR1.0; + AT1IE1 : byte absolute $0819; + AT1IE1_AT1CC3IE : bit absolute AT1IE1.2; + AT1IE1_AT1CC2IE : bit absolute AT1IE1.1; + AT1IE1_AT1CC1IE : bit absolute AT1IE1.0; + AT1STPTL : byte absolute $081A; + AT1STPTL_AT1STPT7 : bit absolute AT1STPTL.7; + AT1STPTL_AT1STPT6 : bit absolute AT1STPTL.6; + AT1STPTL_AT1STPT5 : bit absolute AT1STPTL.5; + AT1STPTL_AT1STPT4 : bit absolute AT1STPTL.4; + AT1STPTL_AT1STPT3 : bit absolute AT1STPTL.3; + AT1STPTL_AT1STPT2 : bit absolute AT1STPTL.2; + AT1STPTL_AT1STPT1 : bit absolute AT1STPTL.1; + AT1STPTL_AT1STPT0 : bit absolute AT1STPTL.0; + AT1STPTH : byte absolute $081B; + AT1STPTH_AT1STPT14 : bit absolute AT1STPTH.6; + AT1STPTH_AT1STPT13 : bit absolute AT1STPTH.5; + AT1STPTH_AT1STPT12 : bit absolute AT1STPTH.4; + AT1STPTH_AT1STPT11 : bit absolute AT1STPTH.3; + AT1STPTH_AT1STPT10 : bit absolute AT1STPTH.2; + AT1STPTH_AT1STPT9 : bit absolute AT1STPTH.1; + AT1STPTH_AT1STPT8 : bit absolute AT1STPTH.0; + AT1ERRL : byte absolute $081C; + AT1ERRL_AT1ERR7 : bit absolute AT1ERRL.7; + AT1ERRL_AT1ERR6 : bit absolute AT1ERRL.6; + AT1ERRL_AT1ERR5 : bit absolute AT1ERRL.5; + AT1ERRL_AT1ERR4 : bit absolute AT1ERRL.4; + AT1ERRL_AT1ERR3 : bit absolute AT1ERRL.3; + AT1ERRL_AT1ERR2 : bit absolute AT1ERRL.2; + AT1ERRL_AT1ERR1 : bit absolute AT1ERRL.1; + AT1ERRL_AT1ERR0 : bit absolute AT1ERRL.0; + AT1ERRH : byte absolute $081D; + AT1ERRH_AT1ERR15 : bit absolute AT1ERRH.7; + AT1ERRH_AT1ERR14 : bit absolute AT1ERRH.6; + AT1ERRH_AT1ERR13 : bit absolute AT1ERRH.5; + AT1ERRH_AT1ERR12 : bit absolute AT1ERRH.4; + AT1ERRH_AT1ERR11 : bit absolute AT1ERRH.3; + AT1ERRH_AT1ERR10 : bit absolute AT1ERRH.2; + AT1ERRH_AT1ERR9 : bit absolute AT1ERRH.1; + AT1ERRH_AT1ERR8 : bit absolute AT1ERRH.0; + AT1CLK : byte absolute $088C; + AT1SIG : byte absolute $088D; + AT1SIG_SSEL2 : bit absolute AT1SIG.2; + AT1SIG_SSEL1 : bit absolute AT1SIG.1; + AT1SIG_SSEL0 : bit absolute AT1SIG.0; + AT1CSEL1 : byte absolute $088E; + AT1CSEL1_CP1S2 : bit absolute AT1CSEL1.2; + AT1CSEL1_CP1S1 : bit absolute AT1CSEL1.1; + AT1CSEL1_CP1S0 : bit absolute AT1CSEL1.0; + AT1CC1L : byte absolute $088F; + AT1CC1L_AT1CC17 : bit absolute AT1CC1L.7; + AT1CC1L_AT1CC16 : bit absolute AT1CC1L.6; + AT1CC1L_AT1CC15 : bit absolute AT1CC1L.5; + AT1CC1L_AT1CC14 : bit absolute AT1CC1L.4; + AT1CC1L_AT1CC13 : bit absolute AT1CC1L.3; + AT1CC1L_AT1CC12 : bit absolute AT1CC1L.2; + AT1CC1L_AT1CC11 : bit absolute AT1CC1L.1; + AT1CC1L_AT1CC10 : bit absolute AT1CC1L.0; + AT1CC1H : byte absolute $0890; + AT1CC1H_AT1CC19 : bit absolute AT1CC1H.1; + AT1CC1H_AT1CC18 : bit absolute AT1CC1H.0; + AT1CCON1 : byte absolute $0891; + AT1CCON1_AT1CC1EN : bit absolute AT1CCON1.7; + AT1CCON1_AT1CC1POL : bit absolute AT1CCON1.4; + AT1CCON1_AT1CAP1P : bit absolute AT1CCON1.3; + AT1CCON1_AT1CC1MODE : bit absolute AT1CCON1.0; + AT1CSEL2 : byte absolute $0892; + AT1CSEL2_AT1CP2S2 : bit absolute AT1CSEL2.2; + AT1CSEL2_AT1CP2S1 : bit absolute AT1CSEL2.1; + AT1CSEL2_AT1CP2S0 : bit absolute AT1CSEL2.0; + AT1CC2L : byte absolute $0893; + AT1CC2L_AT1CC27 : bit absolute AT1CC2L.7; + AT1CC2L_AT1CC26 : bit absolute AT1CC2L.6; + AT1CC2L_AT1CC25 : bit absolute AT1CC2L.5; + AT1CC2L_AT1CC24 : bit absolute AT1CC2L.4; + AT1CC2L_AT1CC23 : bit absolute AT1CC2L.3; + AT1CC2L_AT1CC22 : bit absolute AT1CC2L.2; + AT1CC2L_AT1CC21 : bit absolute AT1CC2L.1; + AT1CC2L_AT1CC20 : bit absolute AT1CC2L.0; + AT1CC2H : byte absolute $0894; + AT1CC2H_AT1CC29 : bit absolute AT1CC2H.1; + AT1CC2H_AT1CC28 : bit absolute AT1CC2H.0; + AT1CCON2 : byte absolute $0895; + AT1CCON2_AT1CC2EN : bit absolute AT1CCON2.7; + AT1CCON2_AT1CC2POL : bit absolute AT1CCON2.4; + AT1CCON2_AT1CAP2P : bit absolute AT1CCON2.3; + AT1CCON2_AT1CC2MODE : bit absolute AT1CCON2.0; + AT1CSEL3 : byte absolute $0896; + AT1CSEL3_AT1CP3S2 : bit absolute AT1CSEL3.2; + AT1CSEL3_AT1CP3S1 : bit absolute AT1CSEL3.1; + AT1CSEL3_AT1CP3S0 : bit absolute AT1CSEL3.0; + AT1CC3L : byte absolute $0897; + AT1CC3L_AT1CC37 : bit absolute AT1CC3L.7; + AT1CC3L_AT1CC36 : bit absolute AT1CC3L.6; + AT1CC3L_AT1CC35 : bit absolute AT1CC3L.5; + AT1CC3L_AT1CC34 : bit absolute AT1CC3L.4; + AT1CC3L_AT1CC33 : bit absolute AT1CC3L.3; + AT1CC3L_AT1CC32 : bit absolute AT1CC3L.2; + AT1CC3L_AT1CC31 : bit absolute AT1CC3L.1; + AT1CC3L_AT1CC30 : bit absolute AT1CC3L.0; + AT1CC3H : byte absolute $0898; + AT1CC3H_AT1CC39 : bit absolute AT1CC3H.1; + AT1CC3H_AT1CC38 : bit absolute AT1CC3H.0; + AT1CCON3 : byte absolute $0899; + AT1CCON3_AT1CC3EN : bit absolute AT1CCON3.7; + AT1CCON3_AT1CC3POL : bit absolute AT1CCON3.4; + AT1CCON3_AT1CAP3P : bit absolute AT1CCON3.3; + AT1CCON3_AT1CC3MODE : bit absolute AT1CCON3.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + ATINPPS : byte absolute $0E16; + ATINPPS_ATINPPS4 : bit absolute ATINPPS.4; + ATINPPS_ATINPPS3 : bit absolute ATINPPS.3; + ATINPPS_ATINPPS2 : bit absolute ATINPPS.2; + ATINPPS_ATINPPS1 : bit absolute ATINPPS.1; + ATINPPS_ATINPPS0 : bit absolute ATINPPS.0; + CWGINPPS : byte absolute $0E17; + CWGINPPS_CWGINPPS4 : bit absolute CWGINPPS.4; + CWGINPPS_CWGINPPS3 : bit absolute CWGINPPS.3; + CWGINPPS_CWGINPPS2 : bit absolute CWGINPPS.2; + CWGINPPS_CWGINPPS1 : bit absolute CWGINPPS.1; + CWGINPPS_CWGINPPS0 : bit absolute CWGINPPS.0; + T2PPS : byte absolute $0E18; + T2PPS_T2PPS4 : bit absolute T2PPS.4; + T2PPS_T2PPS3 : bit absolute T2PPS.3; + T2PPS_T2PPS2 : bit absolute T2PPS.2; + T2PPS_T2PPS1 : bit absolute T2PPS.1; + T2PPS_T2PPS0 : bit absolute T2PPS.0; + T3CKIPPS : byte absolute $0E19; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1A; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4PPS : byte absolute $0E1B; + T4PPS_T4PPS4 : bit absolute T4PPS.4; + T4PPS_T4PPS3 : bit absolute T4PPS.3; + T4PPS_T4PPS2 : bit absolute T4PPS.2; + T4PPS_T4PPS1 : bit absolute T4PPS.1; + T4PPS_T4PPS0 : bit absolute T4PPS.0; + T5CKIPPS : byte absolute $0E1C; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1D; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6PPS : byte absolute $0E1E; + T6PPS_T6PPS4 : bit absolute T6PPS.4; + T6PPS_T6PPS3 : bit absolute T6PPS.3; + T6PPS_T6PPS2 : bit absolute T6PPS.2; + T6PPS_T6PPS1 : bit absolute T6PPS.1; + T6PPS_T6PPS0 : bit absolute T6PPS.0; + ATCC1PPS : byte absolute $0E1F; + ATCC1PPS_ATCC1PPS4 : bit absolute ATCC1PPS.4; + ATCC1PPS_ATCC1PPS3 : bit absolute ATCC1PPS.3; + ATCC1PPS_ATCC1PPS2 : bit absolute ATCC1PPS.2; + ATCC1PPS_ATCC1PPS1 : bit absolute ATCC1PPS.1; + ATCC1PPS_ATCC1PPS0 : bit absolute ATCC1PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + ATCC2PPS : byte absolute $0E23; + ATCC2PPS_ATCC2PPS4 : bit absolute ATCC2PPS.4; + ATCC2PPS_ATCC2PPS3 : bit absolute ATCC2PPS.3; + ATCC2PPS_ATCC2PPS2 : bit absolute ATCC2PPS.2; + ATCC2PPS_ATCC2PPS1 : bit absolute ATCC2PPS.1; + ATCC2PPS_ATCC2PPS0 : bit absolute ATCC2PPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + SMT1SIGPPS : byte absolute $0E26; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT1WINPPS : byte absolute $0E27; + SMT1WINPPS_SMTWINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMTWINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMTWINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMTWINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMTWINPPS0 : bit absolute SMT1WINPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + SMT2SIGPPS : byte absolute $0E2C; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + SMT2WINPPS : byte absolute $0E2D; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + ATCC3PPS : byte absolute $0E2E; + ATCC3PPS_ATCC3PPS4 : bit absolute ATCC3PPS.4; + ATCC3PPS_ATCC3PPS3 : bit absolute ATCC3PPS.3; + ATCC3PPS_ATCC3PPS2 : bit absolute ATCC3PPS.2; + ATCC3PPS_ATCC3PPS1 : bit absolute ATCC3PPS.1; + ATCC3PPS_ATCC3PPS0 : bit absolute ATCC3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, PIR5, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, PIE5, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-59D:SFR'} // Bank 11 : PID1SETL, PID1SETH, PID1INL, PID1INH, PID1K1L, PID1K1H, PID1K2L, PID1K2H, PID1K3L, PID1K3H, PID1OUTLL, PID1OUTLH, PID1OUTHL, PID1OUTHH, PID1OUTU, PID1Z1L, PID1Z1H, PID1Z1U + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : PID1Z2L, PID1Z2H, PID1Z2U, PID1ACCLL, PID1ACCLH, PID1ACCHL, PID1ACCHH, PID1ACCU, PID1CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-697:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1 + {$SET_STATE_RAM '699-69A:SFR'} // Bank 13 : CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '80C-81D:SFR'} // Bank 16 : AT1RESL, AT1RESH, AT1MISSL, AT1MISSH, AT1PERL, AT1PERH, AT1PHSL, AT1PHSH, AT1CON0, AT1CON1, AT1IR0, AT1IE0, AT1IR1, AT1IE1, AT1STPTL, AT1STPTH, AT1ERRL, AT1ERRH + {$SET_STATE_RAM '88C-899:SFR'} // Bank 17 : AT1CLK, AT1SIG, AT1CSEL1, AT1CC1L, AT1CC1H, AT1CCON1, AT1CSEL2, AT1CC2L, AT1CC2H, AT1CCON2, AT1CSEL3, AT1CC3L, AT1CC3H, AT1CCON3 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'E0F-E2E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, ATINPPS, CWGINPPS, T2PPS, T3CKIPPS, T3GPPS, T4PPS, T5CKIPPS, T5GPPS, T6PPS, ATCC1PPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, ATCC2PPS, RXPPS, CKPPS, SMT1SIGPPS, SMT1WINPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, SMT2SIGPPS, SMT2WINPPS, ATCC3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:0F'} // PID1OUTU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59D:01'} // PID1Z1U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:01'} // PID1Z2U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:07'} // PID1ACCU bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C7'} // PID1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:03'} // AT1RESH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // AT1PHSH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:FB'} // AT1CON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:57'} // AT1CON1 bits 7,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:07'} // AT1IR0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:07'} // AT1IE0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:07'} // AT1IR1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:07'} // AT1IE1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // AT1STPTH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:01'} // AT1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:07'} // AT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:07'} // AT1CSEL1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:03'} // AT1CC1H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:99'} // AT1CCON1 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:07'} // AT1CSEL2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:03'} // AT1CC2H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:99'} // AT1CCON2 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:07'} // AT1CSEL3 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:03'} // AT1CC3H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:99'} // AT1CCON3 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // ATINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CWGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // T2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // ATCC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:1F'} // ATCC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // ATCC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN + // Pin 3 : RA4/AN3/CLKOUT + // Pin 4 : RA3/VPP/nMCLR/MCLR + // Pin 5 : RC5/HIDC5 + // Pin 6 : RC4/HIDC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC2/AN6/C1IN2-/C2IN2- + // Pin 9 : RC1/AN5/C1IN1-/C2IN1- + // Pin 10 : RC0/AN4/C2IN+ + // Pin 11 : RA2/AN2 + // Pin 12 : RA1/AN1/VREF+/C1IN0-/C2IN0-/ICSPCLK + // Pin 13 : RA0/AN0/DACOUT/C1IN+/ICSPDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switch Over + {$define _IESO_ON = $3FFF} // Internal External Switch Over mode is enabled + {$define _IESO_OFF = $2FFF} // Internal External Switch Over mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC16F1618.pas b/devices17/PIC16F1618.pas new file mode 100644 index 00000000..752fcf62 --- /dev/null +++ b/devices17/PIC16F1618.pas @@ -0,0 +1,2184 @@ +unit PIC16F1618; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1618'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0010; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0011; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0012; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0013; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0014; + PIR5_TMR3GIF : bit absolute PIR5.7; + PIR5_TMR3IF : bit absolute PIR5.6; + PIR5_TMR5GIF : bit absolute PIR5.5; + PIR5_TMR5IF : bit absolute PIR5.4; + PIR5_AT1IF : bit absolute PIR5.2; + PIR5_PID1EIF : bit absolute PIR5.1; + PIR5_PID1DIF : bit absolute PIR5.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2CLKCON_CS1 : bit absolute T2CLKCON.1; + T2CLKCON_CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0090; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0091; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0092; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0093; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + PIE5 : byte absolute $0094; + PIE5_TMR3GIE : bit absolute PIE5.7; + PIE5_TMR3IE : bit absolute PIE5.6; + PIE5_TMR5GIE : bit absolute PIE5.5; + PIE5_TMR5IE : bit absolute PIE5.4; + PIE5_AT1IE : bit absolute PIE5.2; + PIE5_PID1EIE : bit absolute PIE5.1; + PIE5_PID1DIE : bit absolute PIE5.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0496; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $049D; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + PID1SETL : byte absolute $058C; + PID1SETL_PID1SET7 : bit absolute PID1SETL.7; + PID1SETL_PID1SET6 : bit absolute PID1SETL.6; + PID1SETL_PID1SET5 : bit absolute PID1SETL.5; + PID1SETL_PID1SET4 : bit absolute PID1SETL.4; + PID1SETL_PID1SET3 : bit absolute PID1SETL.3; + PID1SETL_PID1SET2 : bit absolute PID1SETL.2; + PID1SETL_PID1SET1 : bit absolute PID1SETL.1; + PID1SETL_PID1SET0 : bit absolute PID1SETL.0; + PID1SETH : byte absolute $058D; + PID1SETH_PID1SET15 : bit absolute PID1SETH.7; + PID1SETH_PID1SET14 : bit absolute PID1SETH.6; + PID1SETH_PID1SET13 : bit absolute PID1SETH.5; + PID1SETH_PID1SET12 : bit absolute PID1SETH.4; + PID1SETH_PID1SET11 : bit absolute PID1SETH.3; + PID1SETH_PID1SET10 : bit absolute PID1SETH.2; + PID1SETH_PID1SET9 : bit absolute PID1SETH.1; + PID1SETH_PID1SET8 : bit absolute PID1SETH.0; + PID1INL : byte absolute $058E; + PID1INL_PID1IN7 : bit absolute PID1INL.7; + PID1INL_PID1IN6 : bit absolute PID1INL.6; + PID1INL_PID1IN5 : bit absolute PID1INL.5; + PID1INL_PID1IN4 : bit absolute PID1INL.4; + PID1INL_PID1IN3 : bit absolute PID1INL.3; + PID1INL_PID1IN2 : bit absolute PID1INL.2; + PID1INL_PID1IN1 : bit absolute PID1INL.1; + PID1INL_PID1IN0 : bit absolute PID1INL.0; + PID1INH : byte absolute $058F; + PID1INH_PID1IN15 : bit absolute PID1INH.7; + PID1INH_PID1IN14 : bit absolute PID1INH.6; + PID1INH_PID1IN13 : bit absolute PID1INH.5; + PID1INH_PID1IN12 : bit absolute PID1INH.4; + PID1INH_PID1IN11 : bit absolute PID1INH.3; + PID1INH_PID1IN10 : bit absolute PID1INH.2; + PID1INH_PID1IN9 : bit absolute PID1INH.1; + PID1INH_PID1IN8 : bit absolute PID1INH.0; + PID1K1L : byte absolute $0590; + PID1K1L_PID1K17 : bit absolute PID1K1L.7; + PID1K1L_PID1K16 : bit absolute PID1K1L.6; + PID1K1L_PID1K15 : bit absolute PID1K1L.5; + PID1K1L_PID1K14 : bit absolute PID1K1L.4; + PID1K1L_PID1K13 : bit absolute PID1K1L.3; + PID1K1L_PID1K12 : bit absolute PID1K1L.2; + PID1K1L_PID1K11 : bit absolute PID1K1L.1; + PID1K1L_PID1K10 : bit absolute PID1K1L.0; + PID1K1H : byte absolute $0591; + PID1K1H_PID1K115 : bit absolute PID1K1H.7; + PID1K1H_PID1K114 : bit absolute PID1K1H.6; + PID1K1H_PID1K113 : bit absolute PID1K1H.5; + PID1K1H_PID1K112 : bit absolute PID1K1H.4; + PID1K1H_PID1K111 : bit absolute PID1K1H.3; + PID1K1H_PID1K110 : bit absolute PID1K1H.2; + PID1K1H_PID1K19 : bit absolute PID1K1H.1; + PID1K1H_PID1K18 : bit absolute PID1K1H.0; + PID1K2L : byte absolute $0592; + PID1K2L_PID1K27 : bit absolute PID1K2L.7; + PID1K2L_PID1K26 : bit absolute PID1K2L.6; + PID1K2L_PID1K25 : bit absolute PID1K2L.5; + PID1K2L_PID1K24 : bit absolute PID1K2L.4; + PID1K2L_PID1K23 : bit absolute PID1K2L.3; + PID1K2L_PID1K22 : bit absolute PID1K2L.2; + PID1K2L_PID1K21 : bit absolute PID1K2L.1; + PID1K2L_PID1K20 : bit absolute PID1K2L.0; + PID1K2H : byte absolute $0593; + PID1K2H_PID1K215 : bit absolute PID1K2H.7; + PID1K2H_PID1K214 : bit absolute PID1K2H.6; + PID1K2H_PID1K213 : bit absolute PID1K2H.5; + PID1K2H_PID1K212 : bit absolute PID1K2H.4; + PID1K2H_PID1K211 : bit absolute PID1K2H.3; + PID1K2H_PID1K210 : bit absolute PID1K2H.2; + PID1K2H_PID1K29 : bit absolute PID1K2H.1; + PID1K2H_PID1K28 : bit absolute PID1K2H.0; + PID1K3L : byte absolute $0594; + PID1K3L_PID1K37 : bit absolute PID1K3L.7; + PID1K3L_PID1K36 : bit absolute PID1K3L.6; + PID1K3L_PID1K35 : bit absolute PID1K3L.5; + PID1K3L_PID1K34 : bit absolute PID1K3L.4; + PID1K3L_PID1K33 : bit absolute PID1K3L.3; + PID1K3L_PID1K32 : bit absolute PID1K3L.2; + PID1K3L_PID1K31 : bit absolute PID1K3L.1; + PID1K3L_PID1K30 : bit absolute PID1K3L.0; + PID1K3H : byte absolute $0595; + PID1K3H_PID1K315 : bit absolute PID1K3H.7; + PID1K3H_PID1K314 : bit absolute PID1K3H.6; + PID1K3H_PID1K313 : bit absolute PID1K3H.5; + PID1K3H_PID1K312 : bit absolute PID1K3H.4; + PID1K3H_PID1K311 : bit absolute PID1K3H.3; + PID1K3H_PID1K310 : bit absolute PID1K3H.2; + PID1K3H_PID1K39 : bit absolute PID1K3H.1; + PID1K3H_PID1K38 : bit absolute PID1K3H.0; + PID1OUTLL : byte absolute $0596; + PID1OUTLL_PID1OUT7 : bit absolute PID1OUTLL.7; + PID1OUTLL_PID1OUT6 : bit absolute PID1OUTLL.6; + PID1OUTLL_PID1OUT5 : bit absolute PID1OUTLL.5; + PID1OUTLL_PID1OUT4 : bit absolute PID1OUTLL.4; + PID1OUTLL_PID1OUT3 : bit absolute PID1OUTLL.3; + PID1OUTLL_PID1OUT2 : bit absolute PID1OUTLL.2; + PID1OUTLL_PID1OUT1 : bit absolute PID1OUTLL.1; + PID1OUTLL_PID1OUT0 : bit absolute PID1OUTLL.0; + PID1OUTLH : byte absolute $0597; + PID1OUTLH_PID1OUT15 : bit absolute PID1OUTLH.7; + PID1OUTLH_PID1OUT14 : bit absolute PID1OUTLH.6; + PID1OUTLH_PID1OUT13 : bit absolute PID1OUTLH.5; + PID1OUTLH_PID1OUT12 : bit absolute PID1OUTLH.4; + PID1OUTLH_PID1OUT11 : bit absolute PID1OUTLH.3; + PID1OUTLH_PID1OUT10 : bit absolute PID1OUTLH.2; + PID1OUTLH_PID1OUT9 : bit absolute PID1OUTLH.1; + PID1OUTLH_PID1OUT8 : bit absolute PID1OUTLH.0; + PID1OUTHL : byte absolute $0598; + PID1OUTHL_PID1OUT23 : bit absolute PID1OUTHL.7; + PID1OUTHL_PID1OUT22 : bit absolute PID1OUTHL.6; + PID1OUTHL_PID1OUT21 : bit absolute PID1OUTHL.5; + PID1OUTHL_PID1OUT20 : bit absolute PID1OUTHL.4; + PID1OUTHL_PID1OUT19 : bit absolute PID1OUTHL.3; + PID1OUTHL_PID1OUT18 : bit absolute PID1OUTHL.2; + PID1OUTHL_PID1OUT17 : bit absolute PID1OUTHL.1; + PID1OUTHL_PID1OUT16 : bit absolute PID1OUTHL.0; + PID1OUTHH : byte absolute $0599; + PID1OUTHH_PID1OUT31 : bit absolute PID1OUTHH.7; + PID1OUTHH_PID1OUT30 : bit absolute PID1OUTHH.6; + PID1OUTHH_PID1OUT29 : bit absolute PID1OUTHH.5; + PID1OUTHH_PID1OUT28 : bit absolute PID1OUTHH.4; + PID1OUTHH_PID1OUT27 : bit absolute PID1OUTHH.3; + PID1OUTHH_PID1OUT26 : bit absolute PID1OUTHH.2; + PID1OUTHH_PID1OUT25 : bit absolute PID1OUTHH.1; + PID1OUTHH_PID1OUT24 : bit absolute PID1OUTHH.0; + PID1OUTU : byte absolute $059A; + PID1OUTU_PID1OUT35 : bit absolute PID1OUTU.3; + PID1OUTU_PID1OUT34 : bit absolute PID1OUTU.2; + PID1OUTU_PID1OUT33 : bit absolute PID1OUTU.1; + PID1OUTU_PID1OUT32 : bit absolute PID1OUTU.0; + PID1Z1L : byte absolute $059B; + PID1Z1L_PID1Z17 : bit absolute PID1Z1L.7; + PID1Z1L_PID1Z16 : bit absolute PID1Z1L.6; + PID1Z1L_PID1Z15 : bit absolute PID1Z1L.5; + PID1Z1L_PID1Z14 : bit absolute PID1Z1L.4; + PID1Z1L_PID1Z13 : bit absolute PID1Z1L.3; + PID1Z1L_PID1Z12 : bit absolute PID1Z1L.2; + PID1Z1L_PID1Z11 : bit absolute PID1Z1L.1; + PID1Z1L_PID1Z10 : bit absolute PID1Z1L.0; + PID1Z1H : byte absolute $059C; + PID1Z1H_PID1Z115 : bit absolute PID1Z1H.7; + PID1Z1H_PID1Z114 : bit absolute PID1Z1H.6; + PID1Z1H_PID1Z113 : bit absolute PID1Z1H.5; + PID1Z1H_PID1Z112 : bit absolute PID1Z1H.4; + PID1Z1H_PID1Z111 : bit absolute PID1Z1H.3; + PID1Z1H_PID1Z110 : bit absolute PID1Z1H.2; + PID1Z1H_PID1Z19 : bit absolute PID1Z1H.1; + PID1Z1H_PID1Z18 : bit absolute PID1Z1H.0; + PID1Z1U : byte absolute $059D; + PID1Z1U_PID1Z116 : bit absolute PID1Z1U.0; + PID1Z2L : byte absolute $060C; + PID1Z2L_PID1Z27 : bit absolute PID1Z2L.7; + PID1Z2L_PID1Z26 : bit absolute PID1Z2L.6; + PID1Z2L_PID1Z25 : bit absolute PID1Z2L.5; + PID1Z2L_PID1Z24 : bit absolute PID1Z2L.4; + PID1Z2L_PID1Z23 : bit absolute PID1Z2L.3; + PID1Z2L_PID1Z22 : bit absolute PID1Z2L.2; + PID1Z2L_PID1Z21 : bit absolute PID1Z2L.1; + PID1Z2L_PID1Z20 : bit absolute PID1Z2L.0; + PID1Z2H : byte absolute $060D; + PID1Z2H_PID1Z215 : bit absolute PID1Z2H.7; + PID1Z2H_PID1Z214 : bit absolute PID1Z2H.6; + PID1Z2H_PID1Z213 : bit absolute PID1Z2H.5; + PID1Z2H_PID1Z212 : bit absolute PID1Z2H.4; + PID1Z2H_PID1Z211 : bit absolute PID1Z2H.3; + PID1Z2H_PID1Z210 : bit absolute PID1Z2H.2; + PID1Z2H_PID1Z29 : bit absolute PID1Z2H.1; + PID1Z2H_PID1Z28 : bit absolute PID1Z2H.0; + PID1Z2U : byte absolute $060E; + PID1Z2U_PID1Z216 : bit absolute PID1Z2U.0; + PID1ACCLL : byte absolute $060F; + PID1ACCLL_PID1ACC7 : bit absolute PID1ACCLL.7; + PID1ACCLL_PID1ACC6 : bit absolute PID1ACCLL.6; + PID1ACCLL_PID1ACC5 : bit absolute PID1ACCLL.5; + PID1ACCLL_PID1ACC4 : bit absolute PID1ACCLL.4; + PID1ACCLL_PID1ACC3 : bit absolute PID1ACCLL.3; + PID1ACCLL_PID1ACC2 : bit absolute PID1ACCLL.2; + PID1ACCLL_PID1ACC1 : bit absolute PID1ACCLL.1; + PID1ACCLL_PID1ACC0 : bit absolute PID1ACCLL.0; + PID1ACCLH : byte absolute $0610; + PID1ACCLH_PID1ACC15 : bit absolute PID1ACCLH.7; + PID1ACCLH_PID1ACC14 : bit absolute PID1ACCLH.6; + PID1ACCLH_PID1ACC13 : bit absolute PID1ACCLH.5; + PID1ACCLH_PID1ACC12 : bit absolute PID1ACCLH.4; + PID1ACCLH_PID1ACC11 : bit absolute PID1ACCLH.3; + PID1ACCLH_PID1ACC10 : bit absolute PID1ACCLH.2; + PID1ACCLH_PID1ACC9 : bit absolute PID1ACCLH.1; + PID1ACCLH_PID1ACC8 : bit absolute PID1ACCLH.0; + PID1ACCHL : byte absolute $0611; + PID1ACCHL_PID1ACC23 : bit absolute PID1ACCHL.7; + PID1ACCHL_PID1ACC22 : bit absolute PID1ACCHL.6; + PID1ACCHL_PID1ACC21 : bit absolute PID1ACCHL.5; + PID1ACCHL_PID1ACC20 : bit absolute PID1ACCHL.4; + PID1ACCHL_PID1ACC19 : bit absolute PID1ACCHL.3; + PID1ACCHL_PID1ACC18 : bit absolute PID1ACCHL.2; + PID1ACCHL_PID1ACC17 : bit absolute PID1ACCHL.1; + PID1ACCHL_PID1ACC16 : bit absolute PID1ACCHL.0; + PID1ACCHH : byte absolute $0612; + PID1ACCHH_PID1ACC31 : bit absolute PID1ACCHH.7; + PID1ACCHH_PID1ACC30 : bit absolute PID1ACCHH.6; + PID1ACCHH_PID1ACC29 : bit absolute PID1ACCHH.5; + PID1ACCHH_PID1ACC28 : bit absolute PID1ACCHH.4; + PID1ACCHH_PID1ACC27 : bit absolute PID1ACCHH.3; + PID1ACCHH_PID1ACC26 : bit absolute PID1ACCHH.2; + PID1ACCHH_PID1ACC25 : bit absolute PID1ACCHH.1; + PID1ACCHH_PID1ACC24 : bit absolute PID1ACCHH.0; + PID1ACCU : byte absolute $0613; + PID1ACCU_PID1ACC34 : bit absolute PID1ACCU.2; + PID1ACCU_PID1ACC33 : bit absolute PID1ACCU.1; + PID1ACCU_PID1ACC32 : bit absolute PID1ACCU.0; + PID1CON : byte absolute $0614; + PID1CON_PID1EN : bit absolute PID1CON.7; + PID1CON_PID1BUSY : bit absolute PID1CON.6; + PID1CON_PID1MODE2 : bit absolute PID1CON.2; + PID1CON_PID1MODE1 : bit absolute PID1CON.1; + PID1CON_PID1MODE0 : bit absolute PID1CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + AT1RESL : byte absolute $080C; + AT1RESL_AT1RES7 : bit absolute AT1RESL.7; + AT1RESL_AT1RES6 : bit absolute AT1RESL.6; + AT1RESL_AT1RES5 : bit absolute AT1RESL.5; + AT1RESL_AT1RES4 : bit absolute AT1RESL.4; + AT1RESL_AT1RES3 : bit absolute AT1RESL.3; + AT1RESL_AT1RES2 : bit absolute AT1RESL.2; + AT1RESL_AT1RES1 : bit absolute AT1RESL.1; + AT1RESL_AT1RES0 : bit absolute AT1RESL.0; + AT1RESH : byte absolute $080D; + AT1RESH_AT1RES9 : bit absolute AT1RESH.1; + AT1RESH_AT1RES8 : bit absolute AT1RESH.0; + AT1MISSL : byte absolute $080E; + AT1MISSL_AT1MISS7 : bit absolute AT1MISSL.7; + AT1MISSL_AT1MISS6 : bit absolute AT1MISSL.6; + AT1MISSL_AT1MISS5 : bit absolute AT1MISSL.5; + AT1MISSL_AT1MISS4 : bit absolute AT1MISSL.4; + AT1MISSL_AT1MISS3 : bit absolute AT1MISSL.3; + AT1MISSL_AT1MISS2 : bit absolute AT1MISSL.2; + AT1MISSL_AT1MISS1 : bit absolute AT1MISSL.1; + AT1MISSL_AT1MISS0 : bit absolute AT1MISSL.0; + AT1MISSH : byte absolute $080F; + AT1MISSH_AT1MISS15 : bit absolute AT1MISSH.7; + AT1MISSH_AT1MISS14 : bit absolute AT1MISSH.6; + AT1MISSH_AT1MISS13 : bit absolute AT1MISSH.5; + AT1MISSH_AT1MISS12 : bit absolute AT1MISSH.4; + AT1MISSH_AT1MISS11 : bit absolute AT1MISSH.3; + AT1MISSH_AT1MISS10 : bit absolute AT1MISSH.2; + AT1MISSH_AT1MISS9 : bit absolute AT1MISSH.1; + AT1MISSH_AT1MISS8 : bit absolute AT1MISSH.0; + AT1PERL : byte absolute $0810; + AT1PERL_AT1PER7 : bit absolute AT1PERL.7; + AT1PERL_AT1PER6 : bit absolute AT1PERL.6; + AT1PERL_AT1PER5 : bit absolute AT1PERL.5; + AT1PERL_AT1PER4 : bit absolute AT1PERL.4; + AT1PERL_AT1PER3 : bit absolute AT1PERL.3; + AT1PERL_AT1PER2 : bit absolute AT1PERL.2; + AT1PERL_AT1PER1 : bit absolute AT1PERL.1; + AT1PERL_AT1PER0 : bit absolute AT1PERL.0; + AT1PERH : byte absolute $0811; + AT1PERH_AT1POV : bit absolute AT1PERH.7; + AT1PERH_AT1PER14 : bit absolute AT1PERH.6; + AT1PERH_AT1PER13 : bit absolute AT1PERH.5; + AT1PERH_AT1PER12 : bit absolute AT1PERH.4; + AT1PERH_AT1PER11 : bit absolute AT1PERH.3; + AT1PERH_AT1PER10 : bit absolute AT1PERH.2; + AT1PERH_AT1PER9 : bit absolute AT1PERH.1; + AT1PERH_AT1PER8 : bit absolute AT1PERH.0; + AT1PHSL : byte absolute $0812; + AT1PHSL_AT1PHS7 : bit absolute AT1PHSL.7; + AT1PHSL_AT1PHS6 : bit absolute AT1PHSL.6; + AT1PHSL_AT1PHS5 : bit absolute AT1PHSL.5; + AT1PHSL_AT1PHS4 : bit absolute AT1PHSL.4; + AT1PHSL_AT1PHS3 : bit absolute AT1PHSL.3; + AT1PHSL_AT1PHS2 : bit absolute AT1PHSL.2; + AT1PHSL_AT1PHS1 : bit absolute AT1PHSL.1; + AT1PHSL_AT1PHS0 : bit absolute AT1PHSL.0; + AT1PHSH : byte absolute $0813; + AT1PHSH_AT1PHS9 : bit absolute AT1PHSH.1; + AT1PHSH_AT1PHS8 : bit absolute AT1PHSH.0; + AT1CON0 : byte absolute $0814; + AT1CON0_PREC : bit absolute AT1CON0.6; + AT1CON0_APMOD : bit absolute AT1CON0.1; + AT1CON0_MODE : bit absolute AT1CON0.0; + AT1CON1 : byte absolute $0815; + AT1CON1_PHP : bit absolute AT1CON1.6; + AT1CON1_PRP : bit absolute AT1CON1.4; + AT1CON1_MPP : bit absolute AT1CON1.2; + AT1CON1_ACCS : bit absolute AT1CON1.1; + AT1CON1_VALID : bit absolute AT1CON1.0; + AT1IR0 : byte absolute $0816; + AT1IR0_AT1PHSIF : bit absolute AT1IR0.2; + AT1IR0_AT1MISSIF : bit absolute AT1IR0.1; + AT1IR0_AT1PERIF : bit absolute AT1IR0.0; + AT1IE0 : byte absolute $0817; + AT1IE0_AT1PHSIE : bit absolute AT1IE0.2; + AT1IE0_AT1MISSIE : bit absolute AT1IE0.1; + AT1IE0_AT1PERIE : bit absolute AT1IE0.0; + AT1IR1 : byte absolute $0818; + AT1IR1_AT1CC3IF : bit absolute AT1IR1.2; + AT1IR1_AT1CC2IF : bit absolute AT1IR1.1; + AT1IR1_AT1CC1IF : bit absolute AT1IR1.0; + AT1IE1 : byte absolute $0819; + AT1IE1_AT1CC3IE : bit absolute AT1IE1.2; + AT1IE1_AT1CC2IE : bit absolute AT1IE1.1; + AT1IE1_AT1CC1IE : bit absolute AT1IE1.0; + AT1STPTL : byte absolute $081A; + AT1STPTL_AT1STPT7 : bit absolute AT1STPTL.7; + AT1STPTL_AT1STPT6 : bit absolute AT1STPTL.6; + AT1STPTL_AT1STPT5 : bit absolute AT1STPTL.5; + AT1STPTL_AT1STPT4 : bit absolute AT1STPTL.4; + AT1STPTL_AT1STPT3 : bit absolute AT1STPTL.3; + AT1STPTL_AT1STPT2 : bit absolute AT1STPTL.2; + AT1STPTL_AT1STPT1 : bit absolute AT1STPTL.1; + AT1STPTL_AT1STPT0 : bit absolute AT1STPTL.0; + AT1STPTH : byte absolute $081B; + AT1STPTH_AT1STPT14 : bit absolute AT1STPTH.6; + AT1STPTH_AT1STPT13 : bit absolute AT1STPTH.5; + AT1STPTH_AT1STPT12 : bit absolute AT1STPTH.4; + AT1STPTH_AT1STPT11 : bit absolute AT1STPTH.3; + AT1STPTH_AT1STPT10 : bit absolute AT1STPTH.2; + AT1STPTH_AT1STPT9 : bit absolute AT1STPTH.1; + AT1STPTH_AT1STPT8 : bit absolute AT1STPTH.0; + AT1ERRL : byte absolute $081C; + AT1ERRL_AT1ERR7 : bit absolute AT1ERRL.7; + AT1ERRL_AT1ERR6 : bit absolute AT1ERRL.6; + AT1ERRL_AT1ERR5 : bit absolute AT1ERRL.5; + AT1ERRL_AT1ERR4 : bit absolute AT1ERRL.4; + AT1ERRL_AT1ERR3 : bit absolute AT1ERRL.3; + AT1ERRL_AT1ERR2 : bit absolute AT1ERRL.2; + AT1ERRL_AT1ERR1 : bit absolute AT1ERRL.1; + AT1ERRL_AT1ERR0 : bit absolute AT1ERRL.0; + AT1ERRH : byte absolute $081D; + AT1ERRH_AT1ERR15 : bit absolute AT1ERRH.7; + AT1ERRH_AT1ERR14 : bit absolute AT1ERRH.6; + AT1ERRH_AT1ERR13 : bit absolute AT1ERRH.5; + AT1ERRH_AT1ERR12 : bit absolute AT1ERRH.4; + AT1ERRH_AT1ERR11 : bit absolute AT1ERRH.3; + AT1ERRH_AT1ERR10 : bit absolute AT1ERRH.2; + AT1ERRH_AT1ERR9 : bit absolute AT1ERRH.1; + AT1ERRH_AT1ERR8 : bit absolute AT1ERRH.0; + AT1CLK : byte absolute $088C; + AT1SIG : byte absolute $088D; + AT1SIG_SSEL2 : bit absolute AT1SIG.2; + AT1SIG_SSEL1 : bit absolute AT1SIG.1; + AT1SIG_SSEL0 : bit absolute AT1SIG.0; + AT1CSEL1 : byte absolute $088E; + AT1CSEL1_CP1S2 : bit absolute AT1CSEL1.2; + AT1CSEL1_CP1S1 : bit absolute AT1CSEL1.1; + AT1CSEL1_CP1S0 : bit absolute AT1CSEL1.0; + AT1CC1L : byte absolute $088F; + AT1CC1L_AT1CC17 : bit absolute AT1CC1L.7; + AT1CC1L_AT1CC16 : bit absolute AT1CC1L.6; + AT1CC1L_AT1CC15 : bit absolute AT1CC1L.5; + AT1CC1L_AT1CC14 : bit absolute AT1CC1L.4; + AT1CC1L_AT1CC13 : bit absolute AT1CC1L.3; + AT1CC1L_AT1CC12 : bit absolute AT1CC1L.2; + AT1CC1L_AT1CC11 : bit absolute AT1CC1L.1; + AT1CC1L_AT1CC10 : bit absolute AT1CC1L.0; + AT1CC1H : byte absolute $0890; + AT1CC1H_AT1CC19 : bit absolute AT1CC1H.1; + AT1CC1H_AT1CC18 : bit absolute AT1CC1H.0; + AT1CCON1 : byte absolute $0891; + AT1CCON1_AT1CC1EN : bit absolute AT1CCON1.7; + AT1CCON1_AT1CC1POL : bit absolute AT1CCON1.4; + AT1CCON1_AT1CAP1P : bit absolute AT1CCON1.3; + AT1CCON1_AT1CC1MODE : bit absolute AT1CCON1.0; + AT1CSEL2 : byte absolute $0892; + AT1CSEL2_AT1CP2S2 : bit absolute AT1CSEL2.2; + AT1CSEL2_AT1CP2S1 : bit absolute AT1CSEL2.1; + AT1CSEL2_AT1CP2S0 : bit absolute AT1CSEL2.0; + AT1CC2L : byte absolute $0893; + AT1CC2L_AT1CC27 : bit absolute AT1CC2L.7; + AT1CC2L_AT1CC26 : bit absolute AT1CC2L.6; + AT1CC2L_AT1CC25 : bit absolute AT1CC2L.5; + AT1CC2L_AT1CC24 : bit absolute AT1CC2L.4; + AT1CC2L_AT1CC23 : bit absolute AT1CC2L.3; + AT1CC2L_AT1CC22 : bit absolute AT1CC2L.2; + AT1CC2L_AT1CC21 : bit absolute AT1CC2L.1; + AT1CC2L_AT1CC20 : bit absolute AT1CC2L.0; + AT1CC2H : byte absolute $0894; + AT1CC2H_AT1CC29 : bit absolute AT1CC2H.1; + AT1CC2H_AT1CC28 : bit absolute AT1CC2H.0; + AT1CCON2 : byte absolute $0895; + AT1CCON2_AT1CC2EN : bit absolute AT1CCON2.7; + AT1CCON2_AT1CC2POL : bit absolute AT1CCON2.4; + AT1CCON2_AT1CAP2P : bit absolute AT1CCON2.3; + AT1CCON2_AT1CC2MODE : bit absolute AT1CCON2.0; + AT1CSEL3 : byte absolute $0896; + AT1CSEL3_AT1CP3S2 : bit absolute AT1CSEL3.2; + AT1CSEL3_AT1CP3S1 : bit absolute AT1CSEL3.1; + AT1CSEL3_AT1CP3S0 : bit absolute AT1CSEL3.0; + AT1CC3L : byte absolute $0897; + AT1CC3L_AT1CC37 : bit absolute AT1CC3L.7; + AT1CC3L_AT1CC36 : bit absolute AT1CC3L.6; + AT1CC3L_AT1CC35 : bit absolute AT1CC3L.5; + AT1CC3L_AT1CC34 : bit absolute AT1CC3L.4; + AT1CC3L_AT1CC33 : bit absolute AT1CC3L.3; + AT1CC3L_AT1CC32 : bit absolute AT1CC3L.2; + AT1CC3L_AT1CC31 : bit absolute AT1CC3L.1; + AT1CC3L_AT1CC30 : bit absolute AT1CC3L.0; + AT1CC3H : byte absolute $0898; + AT1CC3H_AT1CC39 : bit absolute AT1CC3H.1; + AT1CC3H_AT1CC38 : bit absolute AT1CC3H.0; + AT1CCON3 : byte absolute $0899; + AT1CCON3_AT1CC3EN : bit absolute AT1CCON3.7; + AT1CCON3_AT1CC3POL : bit absolute AT1CCON3.4; + AT1CCON3_AT1CAP3P : bit absolute AT1CCON3.3; + AT1CCON3_AT1CC3MODE : bit absolute AT1CCON3.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + ATINPPS : byte absolute $0E16; + ATINPPS_ATINPPS4 : bit absolute ATINPPS.4; + ATINPPS_ATINPPS3 : bit absolute ATINPPS.3; + ATINPPS_ATINPPS2 : bit absolute ATINPPS.2; + ATINPPS_ATINPPS1 : bit absolute ATINPPS.1; + ATINPPS_ATINPPS0 : bit absolute ATINPPS.0; + CWGINPPS : byte absolute $0E17; + CWGINPPS_CWGINPPS4 : bit absolute CWGINPPS.4; + CWGINPPS_CWGINPPS3 : bit absolute CWGINPPS.3; + CWGINPPS_CWGINPPS2 : bit absolute CWGINPPS.2; + CWGINPPS_CWGINPPS1 : bit absolute CWGINPPS.1; + CWGINPPS_CWGINPPS0 : bit absolute CWGINPPS.0; + T2PPS : byte absolute $0E18; + T2PPS_T2PPS4 : bit absolute T2PPS.4; + T2PPS_T2PPS3 : bit absolute T2PPS.3; + T2PPS_T2PPS2 : bit absolute T2PPS.2; + T2PPS_T2PPS1 : bit absolute T2PPS.1; + T2PPS_T2PPS0 : bit absolute T2PPS.0; + T3CKIPPS : byte absolute $0E19; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1A; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4PPS : byte absolute $0E1B; + T4PPS_T4PPS4 : bit absolute T4PPS.4; + T4PPS_T4PPS3 : bit absolute T4PPS.3; + T4PPS_T4PPS2 : bit absolute T4PPS.2; + T4PPS_T4PPS1 : bit absolute T4PPS.1; + T4PPS_T4PPS0 : bit absolute T4PPS.0; + T5CKIPPS : byte absolute $0E1C; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1D; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6PPS : byte absolute $0E1E; + T6PPS_T6PPS4 : bit absolute T6PPS.4; + T6PPS_T6PPS3 : bit absolute T6PPS.3; + T6PPS_T6PPS2 : bit absolute T6PPS.2; + T6PPS_T6PPS1 : bit absolute T6PPS.1; + T6PPS_T6PPS0 : bit absolute T6PPS.0; + ATCC1PPS : byte absolute $0E1F; + ATCC1PPS_ATCC1PPS4 : bit absolute ATCC1PPS.4; + ATCC1PPS_ATCC1PPS3 : bit absolute ATCC1PPS.3; + ATCC1PPS_ATCC1PPS2 : bit absolute ATCC1PPS.2; + ATCC1PPS_ATCC1PPS1 : bit absolute ATCC1PPS.1; + ATCC1PPS_ATCC1PPS0 : bit absolute ATCC1PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + ATCC2PPS : byte absolute $0E23; + ATCC2PPS_ATCC2PPS4 : bit absolute ATCC2PPS.4; + ATCC2PPS_ATCC2PPS3 : bit absolute ATCC2PPS.3; + ATCC2PPS_ATCC2PPS2 : bit absolute ATCC2PPS.2; + ATCC2PPS_ATCC2PPS1 : bit absolute ATCC2PPS.1; + ATCC2PPS_ATCC2PPS0 : bit absolute ATCC2PPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + SMT1SIGPPS : byte absolute $0E26; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT1WINPPS : byte absolute $0E27; + SMT1WINPPS_SMTWINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMTWINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMTWINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMTWINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMTWINPPS0 : bit absolute SMT1WINPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + SMT2SIGPPS : byte absolute $0E2C; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + SMT2WINPPS : byte absolute $0E2D; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + ATCC3PPS : byte absolute $0E2E; + ATCC3PPS_ATCC3PPS4 : bit absolute ATCC3PPS.4; + ATCC3PPS_ATCC3PPS3 : bit absolute ATCC3PPS.3; + ATCC3PPS_ATCC3PPS2 : bit absolute ATCC3PPS.2; + ATCC3PPS_ATCC3PPS1 : bit absolute ATCC3PPS.1; + ATCC3PPS_ATCC3PPS0 : bit absolute ATCC3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, PIR5, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, PIE5, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '58C-59D:SFR'} // Bank 11 : PID1SETL, PID1SETH, PID1INL, PID1INH, PID1K1L, PID1K1H, PID1K2L, PID1K2H, PID1K3L, PID1K3H, PID1OUTLL, PID1OUTLH, PID1OUTHL, PID1OUTHH, PID1OUTU, PID1Z1L, PID1Z1H, PID1Z1U + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : PID1Z2L, PID1Z2H, PID1Z2U, PID1ACCLL, PID1ACCLH, PID1ACCHL, PID1ACCHH, PID1ACCU, PID1CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-697:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1 + {$SET_STATE_RAM '699-69A:SFR'} // Bank 13 : CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '80C-81D:SFR'} // Bank 16 : AT1RESL, AT1RESH, AT1MISSL, AT1MISSH, AT1PERL, AT1PERH, AT1PHSL, AT1PHSH, AT1CON0, AT1CON1, AT1IR0, AT1IE0, AT1IR1, AT1IE1, AT1STPTL, AT1STPTH, AT1ERRL, AT1ERRH + {$SET_STATE_RAM '88C-899:SFR'} // Bank 17 : AT1CLK, AT1SIG, AT1CSEL1, AT1CC1L, AT1CC1H, AT1CCON1, AT1CSEL2, AT1CC2L, AT1CC2H, AT1CCON2, AT1CSEL3, AT1CC3L, AT1CC3H, AT1CCON3 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'E0F-E2E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, ATINPPS, CWGINPPS, T2PPS, T3CKIPPS, T3GPPS, T4PPS, T5CKIPPS, T5GPPS, T6PPS, ATCC1PPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, ATCC2PPS, RXPPS, CKPPS, SMT1SIGPPS, SMT1WINPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, SMT2SIGPPS, SMT2WINPPS, ATCC3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F23:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:6F'} // PIR2 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:33'} // PIR3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:6F'} // PIE2 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:5F'} // OSCSTAT bits 7,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:0F'} // PID1OUTU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59D:01'} // PID1Z1U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:01'} // PID1Z2U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:07'} // PID1ACCU bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C7'} // PID1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:03'} // AT1RESH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // AT1PHSH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:FB'} // AT1CON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:57'} // AT1CON1 bits 7,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:07'} // AT1IR0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:07'} // AT1IE0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:07'} // AT1IR1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:07'} // AT1IE1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // AT1STPTH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:01'} // AT1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:07'} // AT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:07'} // AT1CSEL1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:03'} // AT1CC1H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:99'} // AT1CCON1 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:07'} // AT1CSEL2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:03'} // AT1CC2H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:99'} // AT1CCON2 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:07'} // AT1CSEL3 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:03'} // AT1CC3H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:99'} // AT1CCON3 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // ATINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CWGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // T2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // ATCC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:1F'} // ATCC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // ATCC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN + // Pin 3 : RA4/AN3/CLKOUT + // Pin 4 : RA3/VPP/nMCLR/MCLR + // Pin 5 : RC5/HIDC5 + // Pin 6 : RC4/HIDC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC6/AN8 + // Pin 9 : RC7/AN9 + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11 + // Pin 13 : RB4/AN10 + // Pin 14 : RC2/AN6/C1IN2-/C2IN2- + // Pin 15 : RC1/AN5/C1IN1-/C2IN1- + // Pin 16 : RC0/AN4/C2IN+ + // Pin 17 : RA2/AN2/ZCDIN + // Pin 18 : RA1/AN1/C2IN0-/C1IN0-/VREF+/ICSPCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT/ICSPDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC16F1619.pas b/devices17/PIC16F1619.pas new file mode 100644 index 00000000..e8cc9437 --- /dev/null +++ b/devices17/PIC16F1619.pas @@ -0,0 +1,2376 @@ +unit PIC16F1619; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1619'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0010; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0011; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0012; + PIR3_CWGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0013; + PIR4_SCANIF : bit absolute PIR4.7; + PIR4_CRCIF : bit absolute PIR4.6; + PIR4_SMT2PWAIF : bit absolute PIR4.5; + PIR4_SMT2PRAIF : bit absolute PIR4.4; + PIR4_SMT2IF : bit absolute PIR4.3; + PIR4_SMT1PWAIF : bit absolute PIR4.2; + PIR4_SMT1PRAIF : bit absolute PIR4.1; + PIR4_SMT1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0014; + PIR5_TMR3GIF : bit absolute PIR5.7; + PIR5_TMR3IF : bit absolute PIR5.6; + PIR5_TMR5GIF : bit absolute PIR5.5; + PIR5_TMR5IF : bit absolute PIR5.4; + PIR5_AT1IF : bit absolute PIR5.2; + PIR5_PID1EIF : bit absolute PIR5.1; + PIR5_PID1DIF : bit absolute PIR5.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_ON : bit absolute T2CON.7; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_CKPS1 : bit absolute T2CON.5; + T2CON_CKPS0 : bit absolute T2CON.4; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2CLKCON_CS1 : bit absolute T2CLKCON.1; + T2CLKCON_CS0 : bit absolute T2CLKCON.0; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0090; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0091; + PIE2_OSCFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0092; + PIE3_CWGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0093; + PIE4_SCANIE : bit absolute PIE4.7; + PIE4_CRCIE : bit absolute PIE4.6; + PIE4_SMT2PWAIE : bit absolute PIE4.5; + PIE4_SMT2PRAIE : bit absolute PIE4.4; + PIE4_SMT2IE : bit absolute PIE4.3; + PIE4_SMT1PWAIE : bit absolute PIE4.2; + PIE4_SMT1PRAIE : bit absolute PIE4.1; + PIE4_SMT1IE : bit absolute PIE4.0; + PIE5 : byte absolute $0094; + PIE5_TMR3GIE : bit absolute PIE5.7; + PIE5_TMR3IE : bit absolute PIE5.6; + PIE5_TMR5GIE : bit absolute PIE5.5; + PIE5_TMR5IE : bit absolute PIE5.4; + PIE5_AT1IE : bit absolute PIE5.2; + PIE5_PID1EIE : bit absolute PIE5.1; + PIE5_PID1DIE : bit absolute PIE5.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nWDTWV : bit absolute PCON.5; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE : bit absolute DAC1CON0.5; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_CCP2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_CCP2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_CCP1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_CCP1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0496; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $049D; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + PID1SETL : byte absolute $058C; + PID1SETL_PID1SET7 : bit absolute PID1SETL.7; + PID1SETL_PID1SET6 : bit absolute PID1SETL.6; + PID1SETL_PID1SET5 : bit absolute PID1SETL.5; + PID1SETL_PID1SET4 : bit absolute PID1SETL.4; + PID1SETL_PID1SET3 : bit absolute PID1SETL.3; + PID1SETL_PID1SET2 : bit absolute PID1SETL.2; + PID1SETL_PID1SET1 : bit absolute PID1SETL.1; + PID1SETL_PID1SET0 : bit absolute PID1SETL.0; + PID1SETH : byte absolute $058D; + PID1SETH_PID1SET15 : bit absolute PID1SETH.7; + PID1SETH_PID1SET14 : bit absolute PID1SETH.6; + PID1SETH_PID1SET13 : bit absolute PID1SETH.5; + PID1SETH_PID1SET12 : bit absolute PID1SETH.4; + PID1SETH_PID1SET11 : bit absolute PID1SETH.3; + PID1SETH_PID1SET10 : bit absolute PID1SETH.2; + PID1SETH_PID1SET9 : bit absolute PID1SETH.1; + PID1SETH_PID1SET8 : bit absolute PID1SETH.0; + PID1INL : byte absolute $058E; + PID1INL_PID1IN7 : bit absolute PID1INL.7; + PID1INL_PID1IN6 : bit absolute PID1INL.6; + PID1INL_PID1IN5 : bit absolute PID1INL.5; + PID1INL_PID1IN4 : bit absolute PID1INL.4; + PID1INL_PID1IN3 : bit absolute PID1INL.3; + PID1INL_PID1IN2 : bit absolute PID1INL.2; + PID1INL_PID1IN1 : bit absolute PID1INL.1; + PID1INL_PID1IN0 : bit absolute PID1INL.0; + PID1INH : byte absolute $058F; + PID1INH_PID1IN15 : bit absolute PID1INH.7; + PID1INH_PID1IN14 : bit absolute PID1INH.6; + PID1INH_PID1IN13 : bit absolute PID1INH.5; + PID1INH_PID1IN12 : bit absolute PID1INH.4; + PID1INH_PID1IN11 : bit absolute PID1INH.3; + PID1INH_PID1IN10 : bit absolute PID1INH.2; + PID1INH_PID1IN9 : bit absolute PID1INH.1; + PID1INH_PID1IN8 : bit absolute PID1INH.0; + PID1K1L : byte absolute $0590; + PID1K1L_PID1K17 : bit absolute PID1K1L.7; + PID1K1L_PID1K16 : bit absolute PID1K1L.6; + PID1K1L_PID1K15 : bit absolute PID1K1L.5; + PID1K1L_PID1K14 : bit absolute PID1K1L.4; + PID1K1L_PID1K13 : bit absolute PID1K1L.3; + PID1K1L_PID1K12 : bit absolute PID1K1L.2; + PID1K1L_PID1K11 : bit absolute PID1K1L.1; + PID1K1L_PID1K10 : bit absolute PID1K1L.0; + PID1K1H : byte absolute $0591; + PID1K1H_PID1K115 : bit absolute PID1K1H.7; + PID1K1H_PID1K114 : bit absolute PID1K1H.6; + PID1K1H_PID1K113 : bit absolute PID1K1H.5; + PID1K1H_PID1K112 : bit absolute PID1K1H.4; + PID1K1H_PID1K111 : bit absolute PID1K1H.3; + PID1K1H_PID1K110 : bit absolute PID1K1H.2; + PID1K1H_PID1K19 : bit absolute PID1K1H.1; + PID1K1H_PID1K18 : bit absolute PID1K1H.0; + PID1K2L : byte absolute $0592; + PID1K2L_PID1K27 : bit absolute PID1K2L.7; + PID1K2L_PID1K26 : bit absolute PID1K2L.6; + PID1K2L_PID1K25 : bit absolute PID1K2L.5; + PID1K2L_PID1K24 : bit absolute PID1K2L.4; + PID1K2L_PID1K23 : bit absolute PID1K2L.3; + PID1K2L_PID1K22 : bit absolute PID1K2L.2; + PID1K2L_PID1K21 : bit absolute PID1K2L.1; + PID1K2L_PID1K20 : bit absolute PID1K2L.0; + PID1K2H : byte absolute $0593; + PID1K2H_PID1K215 : bit absolute PID1K2H.7; + PID1K2H_PID1K214 : bit absolute PID1K2H.6; + PID1K2H_PID1K213 : bit absolute PID1K2H.5; + PID1K2H_PID1K212 : bit absolute PID1K2H.4; + PID1K2H_PID1K211 : bit absolute PID1K2H.3; + PID1K2H_PID1K210 : bit absolute PID1K2H.2; + PID1K2H_PID1K29 : bit absolute PID1K2H.1; + PID1K2H_PID1K28 : bit absolute PID1K2H.0; + PID1K3L : byte absolute $0594; + PID1K3L_PID1K37 : bit absolute PID1K3L.7; + PID1K3L_PID1K36 : bit absolute PID1K3L.6; + PID1K3L_PID1K35 : bit absolute PID1K3L.5; + PID1K3L_PID1K34 : bit absolute PID1K3L.4; + PID1K3L_PID1K33 : bit absolute PID1K3L.3; + PID1K3L_PID1K32 : bit absolute PID1K3L.2; + PID1K3L_PID1K31 : bit absolute PID1K3L.1; + PID1K3L_PID1K30 : bit absolute PID1K3L.0; + PID1K3H : byte absolute $0595; + PID1K3H_PID1K315 : bit absolute PID1K3H.7; + PID1K3H_PID1K314 : bit absolute PID1K3H.6; + PID1K3H_PID1K313 : bit absolute PID1K3H.5; + PID1K3H_PID1K312 : bit absolute PID1K3H.4; + PID1K3H_PID1K311 : bit absolute PID1K3H.3; + PID1K3H_PID1K310 : bit absolute PID1K3H.2; + PID1K3H_PID1K39 : bit absolute PID1K3H.1; + PID1K3H_PID1K38 : bit absolute PID1K3H.0; + PID1OUTLL : byte absolute $0596; + PID1OUTLL_PID1OUT7 : bit absolute PID1OUTLL.7; + PID1OUTLL_PID1OUT6 : bit absolute PID1OUTLL.6; + PID1OUTLL_PID1OUT5 : bit absolute PID1OUTLL.5; + PID1OUTLL_PID1OUT4 : bit absolute PID1OUTLL.4; + PID1OUTLL_PID1OUT3 : bit absolute PID1OUTLL.3; + PID1OUTLL_PID1OUT2 : bit absolute PID1OUTLL.2; + PID1OUTLL_PID1OUT1 : bit absolute PID1OUTLL.1; + PID1OUTLL_PID1OUT0 : bit absolute PID1OUTLL.0; + PID1OUTLH : byte absolute $0597; + PID1OUTLH_PID1OUT15 : bit absolute PID1OUTLH.7; + PID1OUTLH_PID1OUT14 : bit absolute PID1OUTLH.6; + PID1OUTLH_PID1OUT13 : bit absolute PID1OUTLH.5; + PID1OUTLH_PID1OUT12 : bit absolute PID1OUTLH.4; + PID1OUTLH_PID1OUT11 : bit absolute PID1OUTLH.3; + PID1OUTLH_PID1OUT10 : bit absolute PID1OUTLH.2; + PID1OUTLH_PID1OUT9 : bit absolute PID1OUTLH.1; + PID1OUTLH_PID1OUT8 : bit absolute PID1OUTLH.0; + PID1OUTHL : byte absolute $0598; + PID1OUTHL_PID1OUT23 : bit absolute PID1OUTHL.7; + PID1OUTHL_PID1OUT22 : bit absolute PID1OUTHL.6; + PID1OUTHL_PID1OUT21 : bit absolute PID1OUTHL.5; + PID1OUTHL_PID1OUT20 : bit absolute PID1OUTHL.4; + PID1OUTHL_PID1OUT19 : bit absolute PID1OUTHL.3; + PID1OUTHL_PID1OUT18 : bit absolute PID1OUTHL.2; + PID1OUTHL_PID1OUT17 : bit absolute PID1OUTHL.1; + PID1OUTHL_PID1OUT16 : bit absolute PID1OUTHL.0; + PID1OUTHH : byte absolute $0599; + PID1OUTHH_PID1OUT31 : bit absolute PID1OUTHH.7; + PID1OUTHH_PID1OUT30 : bit absolute PID1OUTHH.6; + PID1OUTHH_PID1OUT29 : bit absolute PID1OUTHH.5; + PID1OUTHH_PID1OUT28 : bit absolute PID1OUTHH.4; + PID1OUTHH_PID1OUT27 : bit absolute PID1OUTHH.3; + PID1OUTHH_PID1OUT26 : bit absolute PID1OUTHH.2; + PID1OUTHH_PID1OUT25 : bit absolute PID1OUTHH.1; + PID1OUTHH_PID1OUT24 : bit absolute PID1OUTHH.0; + PID1OUTU : byte absolute $059A; + PID1OUTU_PID1OUT35 : bit absolute PID1OUTU.3; + PID1OUTU_PID1OUT34 : bit absolute PID1OUTU.2; + PID1OUTU_PID1OUT33 : bit absolute PID1OUTU.1; + PID1OUTU_PID1OUT32 : bit absolute PID1OUTU.0; + PID1Z1L : byte absolute $059B; + PID1Z1L_PID1Z17 : bit absolute PID1Z1L.7; + PID1Z1L_PID1Z16 : bit absolute PID1Z1L.6; + PID1Z1L_PID1Z15 : bit absolute PID1Z1L.5; + PID1Z1L_PID1Z14 : bit absolute PID1Z1L.4; + PID1Z1L_PID1Z13 : bit absolute PID1Z1L.3; + PID1Z1L_PID1Z12 : bit absolute PID1Z1L.2; + PID1Z1L_PID1Z11 : bit absolute PID1Z1L.1; + PID1Z1L_PID1Z10 : bit absolute PID1Z1L.0; + PID1Z1H : byte absolute $059C; + PID1Z1H_PID1Z115 : bit absolute PID1Z1H.7; + PID1Z1H_PID1Z114 : bit absolute PID1Z1H.6; + PID1Z1H_PID1Z113 : bit absolute PID1Z1H.5; + PID1Z1H_PID1Z112 : bit absolute PID1Z1H.4; + PID1Z1H_PID1Z111 : bit absolute PID1Z1H.3; + PID1Z1H_PID1Z110 : bit absolute PID1Z1H.2; + PID1Z1H_PID1Z19 : bit absolute PID1Z1H.1; + PID1Z1H_PID1Z18 : bit absolute PID1Z1H.0; + PID1Z1U : byte absolute $059D; + PID1Z1U_PID1Z116 : bit absolute PID1Z1U.0; + PID1Z2L : byte absolute $060C; + PID1Z2L_PID1Z27 : bit absolute PID1Z2L.7; + PID1Z2L_PID1Z26 : bit absolute PID1Z2L.6; + PID1Z2L_PID1Z25 : bit absolute PID1Z2L.5; + PID1Z2L_PID1Z24 : bit absolute PID1Z2L.4; + PID1Z2L_PID1Z23 : bit absolute PID1Z2L.3; + PID1Z2L_PID1Z22 : bit absolute PID1Z2L.2; + PID1Z2L_PID1Z21 : bit absolute PID1Z2L.1; + PID1Z2L_PID1Z20 : bit absolute PID1Z2L.0; + PID1Z2H : byte absolute $060D; + PID1Z2H_PID1Z215 : bit absolute PID1Z2H.7; + PID1Z2H_PID1Z214 : bit absolute PID1Z2H.6; + PID1Z2H_PID1Z213 : bit absolute PID1Z2H.5; + PID1Z2H_PID1Z212 : bit absolute PID1Z2H.4; + PID1Z2H_PID1Z211 : bit absolute PID1Z2H.3; + PID1Z2H_PID1Z210 : bit absolute PID1Z2H.2; + PID1Z2H_PID1Z29 : bit absolute PID1Z2H.1; + PID1Z2H_PID1Z28 : bit absolute PID1Z2H.0; + PID1Z2U : byte absolute $060E; + PID1Z2U_PID1Z216 : bit absolute PID1Z2U.0; + PID1ACCLL : byte absolute $060F; + PID1ACCLL_PID1ACC7 : bit absolute PID1ACCLL.7; + PID1ACCLL_PID1ACC6 : bit absolute PID1ACCLL.6; + PID1ACCLL_PID1ACC5 : bit absolute PID1ACCLL.5; + PID1ACCLL_PID1ACC4 : bit absolute PID1ACCLL.4; + PID1ACCLL_PID1ACC3 : bit absolute PID1ACCLL.3; + PID1ACCLL_PID1ACC2 : bit absolute PID1ACCLL.2; + PID1ACCLL_PID1ACC1 : bit absolute PID1ACCLL.1; + PID1ACCLL_PID1ACC0 : bit absolute PID1ACCLL.0; + PID1ACCLH : byte absolute $0610; + PID1ACCLH_PID1ACC15 : bit absolute PID1ACCLH.7; + PID1ACCLH_PID1ACC14 : bit absolute PID1ACCLH.6; + PID1ACCLH_PID1ACC13 : bit absolute PID1ACCLH.5; + PID1ACCLH_PID1ACC12 : bit absolute PID1ACCLH.4; + PID1ACCLH_PID1ACC11 : bit absolute PID1ACCLH.3; + PID1ACCLH_PID1ACC10 : bit absolute PID1ACCLH.2; + PID1ACCLH_PID1ACC9 : bit absolute PID1ACCLH.1; + PID1ACCLH_PID1ACC8 : bit absolute PID1ACCLH.0; + PID1ACCHL : byte absolute $0611; + PID1ACCHL_PID1ACC23 : bit absolute PID1ACCHL.7; + PID1ACCHL_PID1ACC22 : bit absolute PID1ACCHL.6; + PID1ACCHL_PID1ACC21 : bit absolute PID1ACCHL.5; + PID1ACCHL_PID1ACC20 : bit absolute PID1ACCHL.4; + PID1ACCHL_PID1ACC19 : bit absolute PID1ACCHL.3; + PID1ACCHL_PID1ACC18 : bit absolute PID1ACCHL.2; + PID1ACCHL_PID1ACC17 : bit absolute PID1ACCHL.1; + PID1ACCHL_PID1ACC16 : bit absolute PID1ACCHL.0; + PID1ACCHH : byte absolute $0612; + PID1ACCHH_PID1ACC31 : bit absolute PID1ACCHH.7; + PID1ACCHH_PID1ACC30 : bit absolute PID1ACCHH.6; + PID1ACCHH_PID1ACC29 : bit absolute PID1ACCHH.5; + PID1ACCHH_PID1ACC28 : bit absolute PID1ACCHH.4; + PID1ACCHH_PID1ACC27 : bit absolute PID1ACCHH.3; + PID1ACCHH_PID1ACC26 : bit absolute PID1ACCHH.2; + PID1ACCHH_PID1ACC25 : bit absolute PID1ACCHH.1; + PID1ACCHH_PID1ACC24 : bit absolute PID1ACCHH.0; + PID1ACCU : byte absolute $0613; + PID1ACCU_PID1ACC34 : bit absolute PID1ACCU.2; + PID1ACCU_PID1ACC33 : bit absolute PID1ACCU.1; + PID1ACCU_PID1ACC32 : bit absolute PID1ACCU.0; + PID1CON : byte absolute $0614; + PID1CON_PID1EN : bit absolute PID1CON.7; + PID1CON_PID1BUSY : bit absolute PID1CON.6; + PID1CON_PID1MODE2 : bit absolute PID1CON.2; + PID1CON_PID1MODE1 : bit absolute PID1CON.1; + PID1CON_PID1MODE0 : bit absolute PID1CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + CWG1DBR : byte absolute $0691; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0692; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1AS0 : byte absolute $0693; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0694; + CWG1AS1_TMR6AS : bit absolute CWG1AS1.6; + CWG1AS1_TMR4AS : bit absolute CWG1AS1.5; + CWG1AS1_TMR2AS : bit absolute CWG1AS1.4; + CWG1AS1_C2AS : bit absolute CWG1AS1.2; + CWG1AS1_C1AS : bit absolute CWG1AS1.1; + CWG1AS1_INAS : bit absolute CWG1AS1.0; + CWG1OCON0 : byte absolute $0695; + CWG1OCON0_OVRD : bit absolute CWG1OCON0.7; + CWG1OCON0_OVRC : bit absolute CWG1OCON0.6; + CWG1OCON0_OVRB : bit absolute CWG1OCON0.5; + CWG1OCON0_OVRA : bit absolute CWG1OCON0.4; + CWG1OCON0_STRD : bit absolute CWG1OCON0.3; + CWG1OCON0_STRC : bit absolute CWG1OCON0.2; + CWG1OCON0_STRB : bit absolute CWG1OCON0.1; + CWG1OCON0_STRA : bit absolute CWG1OCON0.0; + CWG1CON0 : byte absolute $0696; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0697; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1CLKCON : byte absolute $0699; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $069A; + WDTCON0 : byte absolute $0711; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $0712; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $0713; + WDTPSH : byte absolute $0714; + WDTTMR : byte absolute $0715; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + SCANLADRL : byte absolute $0718; + SCANLADRH : byte absolute $0719; + SCANHADRL : byte absolute $071A; + SCANHADRH : byte absolute $071B; + SCANCON0 : byte absolute $071C; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $071D; + CRCDATL : byte absolute $0791; + CRCDATH : byte absolute $0792; + CRCACCL : byte absolute $0793; + CRCACCH : byte absolute $0794; + CRCSHIFTL : byte absolute $0795; + CRCSHIFTH : byte absolute $0796; + CRCXORL : byte absolute $0797; + CRCXORL_XOR7 : bit absolute CRCXORL.7; + CRCXORL_XOR6 : bit absolute CRCXORL.6; + CRCXORL_XOR5 : bit absolute CRCXORL.5; + CRCXORL_XOR4 : bit absolute CRCXORL.4; + CRCXORL_XOR3 : bit absolute CRCXORL.3; + CRCXORL_XOR2 : bit absolute CRCXORL.2; + CRCXORL_XOR1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $0798; + CRCXORH_XOR15 : bit absolute CRCXORH.7; + CRCXORH_XOR14 : bit absolute CRCXORH.6; + CRCXORH_XOR13 : bit absolute CRCXORH.5; + CRCXORH_XOR12 : bit absolute CRCXORH.4; + CRCXORH_XOR11 : bit absolute CRCXORH.3; + CRCXORH_XOR10 : bit absolute CRCXORH.2; + CRCXORH_XOR9 : bit absolute CRCXORH.1; + CRCXORH_XOR8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $0799; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $079A; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + AT1RESL : byte absolute $080C; + AT1RESL_AT1RES7 : bit absolute AT1RESL.7; + AT1RESL_AT1RES6 : bit absolute AT1RESL.6; + AT1RESL_AT1RES5 : bit absolute AT1RESL.5; + AT1RESL_AT1RES4 : bit absolute AT1RESL.4; + AT1RESL_AT1RES3 : bit absolute AT1RESL.3; + AT1RESL_AT1RES2 : bit absolute AT1RESL.2; + AT1RESL_AT1RES1 : bit absolute AT1RESL.1; + AT1RESL_AT1RES0 : bit absolute AT1RESL.0; + AT1RESH : byte absolute $080D; + AT1RESH_AT1RES9 : bit absolute AT1RESH.1; + AT1RESH_AT1RES8 : bit absolute AT1RESH.0; + AT1MISSL : byte absolute $080E; + AT1MISSL_AT1MISS7 : bit absolute AT1MISSL.7; + AT1MISSL_AT1MISS6 : bit absolute AT1MISSL.6; + AT1MISSL_AT1MISS5 : bit absolute AT1MISSL.5; + AT1MISSL_AT1MISS4 : bit absolute AT1MISSL.4; + AT1MISSL_AT1MISS3 : bit absolute AT1MISSL.3; + AT1MISSL_AT1MISS2 : bit absolute AT1MISSL.2; + AT1MISSL_AT1MISS1 : bit absolute AT1MISSL.1; + AT1MISSL_AT1MISS0 : bit absolute AT1MISSL.0; + AT1MISSH : byte absolute $080F; + AT1MISSH_AT1MISS15 : bit absolute AT1MISSH.7; + AT1MISSH_AT1MISS14 : bit absolute AT1MISSH.6; + AT1MISSH_AT1MISS13 : bit absolute AT1MISSH.5; + AT1MISSH_AT1MISS12 : bit absolute AT1MISSH.4; + AT1MISSH_AT1MISS11 : bit absolute AT1MISSH.3; + AT1MISSH_AT1MISS10 : bit absolute AT1MISSH.2; + AT1MISSH_AT1MISS9 : bit absolute AT1MISSH.1; + AT1MISSH_AT1MISS8 : bit absolute AT1MISSH.0; + AT1PERL : byte absolute $0810; + AT1PERL_AT1PER7 : bit absolute AT1PERL.7; + AT1PERL_AT1PER6 : bit absolute AT1PERL.6; + AT1PERL_AT1PER5 : bit absolute AT1PERL.5; + AT1PERL_AT1PER4 : bit absolute AT1PERL.4; + AT1PERL_AT1PER3 : bit absolute AT1PERL.3; + AT1PERL_AT1PER2 : bit absolute AT1PERL.2; + AT1PERL_AT1PER1 : bit absolute AT1PERL.1; + AT1PERL_AT1PER0 : bit absolute AT1PERL.0; + AT1PERH : byte absolute $0811; + AT1PERH_AT1POV : bit absolute AT1PERH.7; + AT1PERH_AT1PER14 : bit absolute AT1PERH.6; + AT1PERH_AT1PER13 : bit absolute AT1PERH.5; + AT1PERH_AT1PER12 : bit absolute AT1PERH.4; + AT1PERH_AT1PER11 : bit absolute AT1PERH.3; + AT1PERH_AT1PER10 : bit absolute AT1PERH.2; + AT1PERH_AT1PER9 : bit absolute AT1PERH.1; + AT1PERH_AT1PER8 : bit absolute AT1PERH.0; + AT1PHSL : byte absolute $0812; + AT1PHSL_AT1PHS7 : bit absolute AT1PHSL.7; + AT1PHSL_AT1PHS6 : bit absolute AT1PHSL.6; + AT1PHSL_AT1PHS5 : bit absolute AT1PHSL.5; + AT1PHSL_AT1PHS4 : bit absolute AT1PHSL.4; + AT1PHSL_AT1PHS3 : bit absolute AT1PHSL.3; + AT1PHSL_AT1PHS2 : bit absolute AT1PHSL.2; + AT1PHSL_AT1PHS1 : bit absolute AT1PHSL.1; + AT1PHSL_AT1PHS0 : bit absolute AT1PHSL.0; + AT1PHSH : byte absolute $0813; + AT1PHSH_AT1PHS9 : bit absolute AT1PHSH.1; + AT1PHSH_AT1PHS8 : bit absolute AT1PHSH.0; + AT1CON0 : byte absolute $0814; + AT1CON0_PREC : bit absolute AT1CON0.6; + AT1CON0_APMOD : bit absolute AT1CON0.1; + AT1CON0_MODE : bit absolute AT1CON0.0; + AT1CON1 : byte absolute $0815; + AT1CON1_PHP : bit absolute AT1CON1.6; + AT1CON1_PRP : bit absolute AT1CON1.4; + AT1CON1_MPP : bit absolute AT1CON1.2; + AT1CON1_ACCS : bit absolute AT1CON1.1; + AT1CON1_VALID : bit absolute AT1CON1.0; + AT1IR0 : byte absolute $0816; + AT1IR0_AT1PHSIF : bit absolute AT1IR0.2; + AT1IR0_AT1MISSIF : bit absolute AT1IR0.1; + AT1IR0_AT1PERIF : bit absolute AT1IR0.0; + AT1IE0 : byte absolute $0817; + AT1IE0_AT1PHSIE : bit absolute AT1IE0.2; + AT1IE0_AT1MISSIE : bit absolute AT1IE0.1; + AT1IE0_AT1PERIE : bit absolute AT1IE0.0; + AT1IR1 : byte absolute $0818; + AT1IR1_AT1CC3IF : bit absolute AT1IR1.2; + AT1IR1_AT1CC2IF : bit absolute AT1IR1.1; + AT1IR1_AT1CC1IF : bit absolute AT1IR1.0; + AT1IE1 : byte absolute $0819; + AT1IE1_AT1CC3IE : bit absolute AT1IE1.2; + AT1IE1_AT1CC2IE : bit absolute AT1IE1.1; + AT1IE1_AT1CC1IE : bit absolute AT1IE1.0; + AT1STPTL : byte absolute $081A; + AT1STPTL_AT1STPT7 : bit absolute AT1STPTL.7; + AT1STPTL_AT1STPT6 : bit absolute AT1STPTL.6; + AT1STPTL_AT1STPT5 : bit absolute AT1STPTL.5; + AT1STPTL_AT1STPT4 : bit absolute AT1STPTL.4; + AT1STPTL_AT1STPT3 : bit absolute AT1STPTL.3; + AT1STPTL_AT1STPT2 : bit absolute AT1STPTL.2; + AT1STPTL_AT1STPT1 : bit absolute AT1STPTL.1; + AT1STPTL_AT1STPT0 : bit absolute AT1STPTL.0; + AT1STPTH : byte absolute $081B; + AT1STPTH_AT1STPT14 : bit absolute AT1STPTH.6; + AT1STPTH_AT1STPT13 : bit absolute AT1STPTH.5; + AT1STPTH_AT1STPT12 : bit absolute AT1STPTH.4; + AT1STPTH_AT1STPT11 : bit absolute AT1STPTH.3; + AT1STPTH_AT1STPT10 : bit absolute AT1STPTH.2; + AT1STPTH_AT1STPT9 : bit absolute AT1STPTH.1; + AT1STPTH_AT1STPT8 : bit absolute AT1STPTH.0; + AT1ERRL : byte absolute $081C; + AT1ERRL_AT1ERR7 : bit absolute AT1ERRL.7; + AT1ERRL_AT1ERR6 : bit absolute AT1ERRL.6; + AT1ERRL_AT1ERR5 : bit absolute AT1ERRL.5; + AT1ERRL_AT1ERR4 : bit absolute AT1ERRL.4; + AT1ERRL_AT1ERR3 : bit absolute AT1ERRL.3; + AT1ERRL_AT1ERR2 : bit absolute AT1ERRL.2; + AT1ERRL_AT1ERR1 : bit absolute AT1ERRL.1; + AT1ERRL_AT1ERR0 : bit absolute AT1ERRL.0; + AT1ERRH : byte absolute $081D; + AT1ERRH_AT1ERR15 : bit absolute AT1ERRH.7; + AT1ERRH_AT1ERR14 : bit absolute AT1ERRH.6; + AT1ERRH_AT1ERR13 : bit absolute AT1ERRH.5; + AT1ERRH_AT1ERR12 : bit absolute AT1ERRH.4; + AT1ERRH_AT1ERR11 : bit absolute AT1ERRH.3; + AT1ERRH_AT1ERR10 : bit absolute AT1ERRH.2; + AT1ERRH_AT1ERR9 : bit absolute AT1ERRH.1; + AT1ERRH_AT1ERR8 : bit absolute AT1ERRH.0; + AT1CLK : byte absolute $088C; + AT1SIG : byte absolute $088D; + AT1SIG_SSEL2 : bit absolute AT1SIG.2; + AT1SIG_SSEL1 : bit absolute AT1SIG.1; + AT1SIG_SSEL0 : bit absolute AT1SIG.0; + AT1CSEL1 : byte absolute $088E; + AT1CSEL1_CP1S2 : bit absolute AT1CSEL1.2; + AT1CSEL1_CP1S1 : bit absolute AT1CSEL1.1; + AT1CSEL1_CP1S0 : bit absolute AT1CSEL1.0; + AT1CC1L : byte absolute $088F; + AT1CC1L_AT1CC17 : bit absolute AT1CC1L.7; + AT1CC1L_AT1CC16 : bit absolute AT1CC1L.6; + AT1CC1L_AT1CC15 : bit absolute AT1CC1L.5; + AT1CC1L_AT1CC14 : bit absolute AT1CC1L.4; + AT1CC1L_AT1CC13 : bit absolute AT1CC1L.3; + AT1CC1L_AT1CC12 : bit absolute AT1CC1L.2; + AT1CC1L_AT1CC11 : bit absolute AT1CC1L.1; + AT1CC1L_AT1CC10 : bit absolute AT1CC1L.0; + AT1CC1H : byte absolute $0890; + AT1CC1H_AT1CC19 : bit absolute AT1CC1H.1; + AT1CC1H_AT1CC18 : bit absolute AT1CC1H.0; + AT1CCON1 : byte absolute $0891; + AT1CCON1_AT1CC1EN : bit absolute AT1CCON1.7; + AT1CCON1_AT1CC1POL : bit absolute AT1CCON1.4; + AT1CCON1_AT1CAP1P : bit absolute AT1CCON1.3; + AT1CCON1_AT1CC1MODE : bit absolute AT1CCON1.0; + AT1CSEL2 : byte absolute $0892; + AT1CSEL2_AT1CP2S2 : bit absolute AT1CSEL2.2; + AT1CSEL2_AT1CP2S1 : bit absolute AT1CSEL2.1; + AT1CSEL2_AT1CP2S0 : bit absolute AT1CSEL2.0; + AT1CC2L : byte absolute $0893; + AT1CC2L_AT1CC27 : bit absolute AT1CC2L.7; + AT1CC2L_AT1CC26 : bit absolute AT1CC2L.6; + AT1CC2L_AT1CC25 : bit absolute AT1CC2L.5; + AT1CC2L_AT1CC24 : bit absolute AT1CC2L.4; + AT1CC2L_AT1CC23 : bit absolute AT1CC2L.3; + AT1CC2L_AT1CC22 : bit absolute AT1CC2L.2; + AT1CC2L_AT1CC21 : bit absolute AT1CC2L.1; + AT1CC2L_AT1CC20 : bit absolute AT1CC2L.0; + AT1CC2H : byte absolute $0894; + AT1CC2H_AT1CC29 : bit absolute AT1CC2H.1; + AT1CC2H_AT1CC28 : bit absolute AT1CC2H.0; + AT1CCON2 : byte absolute $0895; + AT1CCON2_AT1CC2EN : bit absolute AT1CCON2.7; + AT1CCON2_AT1CC2POL : bit absolute AT1CCON2.4; + AT1CCON2_AT1CAP2P : bit absolute AT1CCON2.3; + AT1CCON2_AT1CC2MODE : bit absolute AT1CCON2.0; + AT1CSEL3 : byte absolute $0896; + AT1CSEL3_AT1CP3S2 : bit absolute AT1CSEL3.2; + AT1CSEL3_AT1CP3S1 : bit absolute AT1CSEL3.1; + AT1CSEL3_AT1CP3S0 : bit absolute AT1CSEL3.0; + AT1CC3L : byte absolute $0897; + AT1CC3L_AT1CC37 : bit absolute AT1CC3L.7; + AT1CC3L_AT1CC36 : bit absolute AT1CC3L.6; + AT1CC3L_AT1CC35 : bit absolute AT1CC3L.5; + AT1CC3L_AT1CC34 : bit absolute AT1CC3L.4; + AT1CC3L_AT1CC33 : bit absolute AT1CC3L.3; + AT1CC3L_AT1CC32 : bit absolute AT1CC3L.2; + AT1CC3L_AT1CC31 : bit absolute AT1CC3L.1; + AT1CC3L_AT1CC30 : bit absolute AT1CC3L.0; + AT1CC3H : byte absolute $0898; + AT1CC3H_AT1CC39 : bit absolute AT1CC3H.1; + AT1CC3H_AT1CC38 : bit absolute AT1CC3H.0; + AT1CCON3 : byte absolute $0899; + AT1CCON3_AT1CC3EN : bit absolute AT1CCON3.7; + AT1CCON3_AT1CC3POL : bit absolute AT1CCON3.4; + AT1CCON3_AT1CAP3P : bit absolute AT1CCON3.3; + AT1CCON3_AT1CC3MODE : bit absolute AT1CCON3.0; + SMT1TMRL : byte absolute $0D8C; + SMT1TMRH : byte absolute $0D8D; + SMT1TMRU : byte absolute $0D8E; + SMT1CPRL : byte absolute $0D8F; + SMT1CPRH : byte absolute $0D90; + SMT1CPRU : byte absolute $0D91; + SMT1CPWL : byte absolute $0D92; + SMT1CPWH : byte absolute $0D93; + SMT1CPWU : byte absolute $0D94; + SMT1PRL : byte absolute $0D95; + SMT1PRH : byte absolute $0D96; + SMT1PRU : byte absolute $0D97; + SMT1CON0 : byte absolute $0D98; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0D99; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $0D9A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $0D9B; + SMT1SIG : byte absolute $0D9C; + SMT1WIN : byte absolute $0D9D; + SMT2TMRL : byte absolute $0D9E; + SMT2TMRH : byte absolute $0D9F; + SMT2TMRU : byte absolute $0DA0; + SMT2CPRL : byte absolute $0DA1; + SMT2CPRH : byte absolute $0DA2; + SMT2CPRU : byte absolute $0DA3; + SMT2CPWL : byte absolute $0DA4; + SMT2CPWH : byte absolute $0DA5; + SMT2CPWU : byte absolute $0DA6; + SMT2PRL : byte absolute $0DA7; + SMT2PRH : byte absolute $0DA8; + SMT2PRU : byte absolute $0DA9; + SMT2CON0 : byte absolute $0DAA; + SMT2CON0_SMT2PS1 : bit absolute SMT2CON0.1; + SMT2CON0_SMT2PS0 : bit absolute SMT2CON0.0; + SMT2CON1 : byte absolute $0DAB; + SMT2CON1_SMT2GO : bit absolute SMT2CON1.7; + SMT2STAT : byte absolute $0DAC; + SMT2CLK : byte absolute $0DAD; + SMT2SIG : byte absolute $0DAE; + SMT2WIN : byte absolute $0DAF; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + ATINPPS : byte absolute $0E16; + ATINPPS_ATINPPS4 : bit absolute ATINPPS.4; + ATINPPS_ATINPPS3 : bit absolute ATINPPS.3; + ATINPPS_ATINPPS2 : bit absolute ATINPPS.2; + ATINPPS_ATINPPS1 : bit absolute ATINPPS.1; + ATINPPS_ATINPPS0 : bit absolute ATINPPS.0; + CWGINPPS : byte absolute $0E17; + CWGINPPS_CWGINPPS4 : bit absolute CWGINPPS.4; + CWGINPPS_CWGINPPS3 : bit absolute CWGINPPS.3; + CWGINPPS_CWGINPPS2 : bit absolute CWGINPPS.2; + CWGINPPS_CWGINPPS1 : bit absolute CWGINPPS.1; + CWGINPPS_CWGINPPS0 : bit absolute CWGINPPS.0; + T2PPS : byte absolute $0E18; + T2PPS_T2PPS4 : bit absolute T2PPS.4; + T2PPS_T2PPS3 : bit absolute T2PPS.3; + T2PPS_T2PPS2 : bit absolute T2PPS.2; + T2PPS_T2PPS1 : bit absolute T2PPS.1; + T2PPS_T2PPS0 : bit absolute T2PPS.0; + T3CKIPPS : byte absolute $0E19; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1A; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4PPS : byte absolute $0E1B; + T4PPS_T4PPS4 : bit absolute T4PPS.4; + T4PPS_T4PPS3 : bit absolute T4PPS.3; + T4PPS_T4PPS2 : bit absolute T4PPS.2; + T4PPS_T4PPS1 : bit absolute T4PPS.1; + T4PPS_T4PPS0 : bit absolute T4PPS.0; + T5CKIPPS : byte absolute $0E1C; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1D; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6PPS : byte absolute $0E1E; + T6PPS_T6PPS4 : bit absolute T6PPS.4; + T6PPS_T6PPS3 : bit absolute T6PPS.3; + T6PPS_T6PPS2 : bit absolute T6PPS.2; + T6PPS_T6PPS1 : bit absolute T6PPS.1; + T6PPS_T6PPS0 : bit absolute T6PPS.0; + ATCC1PPS : byte absolute $0E1F; + ATCC1PPS_ATCC1PPS4 : bit absolute ATCC1PPS.4; + ATCC1PPS_ATCC1PPS3 : bit absolute ATCC1PPS.3; + ATCC1PPS_ATCC1PPS2 : bit absolute ATCC1PPS.2; + ATCC1PPS_ATCC1PPS1 : bit absolute ATCC1PPS.1; + ATCC1PPS_ATCC1PPS0 : bit absolute ATCC1PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + ATCC2PPS : byte absolute $0E23; + ATCC2PPS_ATCC2PPS4 : bit absolute ATCC2PPS.4; + ATCC2PPS_ATCC2PPS3 : bit absolute ATCC2PPS.3; + ATCC2PPS_ATCC2PPS2 : bit absolute ATCC2PPS.2; + ATCC2PPS_ATCC2PPS1 : bit absolute ATCC2PPS.1; + ATCC2PPS_ATCC2PPS0 : bit absolute ATCC2PPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + SMT1SIGPPS : byte absolute $0E26; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT1WINPPS : byte absolute $0E27; + SMT1WINPPS_SMTWINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMTWINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMTWINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMTWINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMTWINPPS0 : bit absolute SMT1WINPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + SMT2SIGPPS : byte absolute $0E2C; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + SMT2WINPPS : byte absolute $0E2D; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + ATCC3PPS : byte absolute $0E2E; + ATCC3PPS_ATCC3PPS4 : bit absolute ATCC3PPS.4; + ATCC3PPS_ATCC3PPS3 : bit absolute ATCC3PPS.3; + ATCC3PPS_ATCC3PPS2 : bit absolute ATCC3PPS.2; + ATCC3PPS_ATCC3PPS1 : bit absolute ATCC3PPS.1; + ATCC3PPS_ATCC3PPS0 : bit absolute ATCC3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, PIR5, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-096:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, PIE5, OPTION_REG, PCON + {$SET_STATE_RAM '098-09F:SFR'} // Bank 1 : OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-59D:SFR'} // Bank 11 : PID1SETL, PID1SETH, PID1INL, PID1INH, PID1K1L, PID1K1H, PID1K2L, PID1K2H, PID1K3L, PID1K3H, PID1OUTLL, PID1OUTLH, PID1OUTHL, PID1OUTHH, PID1OUTU, PID1Z1L, PID1Z1H, PID1Z1U + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : PID1Z2L, PID1Z2H, PID1Z2U, PID1ACCLL, PID1ACCLH, PID1ACCHL, PID1ACCHH, PID1ACCU, PID1CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-697:SFR'} // Bank 13 : CWG1DBR, CWG1DBF, CWG1AS0, CWG1AS1, CWG1OCON0, CWG1CON0, CWG1CON1 + {$SET_STATE_RAM '699-69A:SFR'} // Bank 13 : CWG1CLKCON, CWG1ISM + {$SET_STATE_RAM '711-715:SFR'} // Bank 14 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR + {$SET_STATE_RAM '718-71D:SFR'} // Bank 14 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '791-79A:SFR'} // Bank 15 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '80C-81D:SFR'} // Bank 16 : AT1RESL, AT1RESH, AT1MISSL, AT1MISSH, AT1PERL, AT1PERH, AT1PHSL, AT1PHSH, AT1CON0, AT1CON1, AT1IR0, AT1IE0, AT1IR1, AT1IE1, AT1STPTL, AT1STPTH, AT1ERRL, AT1ERRH + {$SET_STATE_RAM '88C-899:SFR'} // Bank 17 : AT1CLK, AT1SIG, AT1CSEL1, AT1CC1L, AT1CC1H, AT1CCON1, AT1CSEL2, AT1CC2L, AT1CC2H, AT1CCON2, AT1CSEL3, AT1CC3L, AT1CC3H, AT1CCON3 + {$SET_STATE_RAM 'D8C-DAF:SFR'} // Bank 27 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN, SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM 'E0F-E2E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, ATINPPS, CWGINPPS, T2PPS, T3CKIPPS, T3GPPS, T4PPS, T5CKIPPS, T5GPPS, T6PPS, ATCC1PPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, ATCC2PPS, RXPPS, CKPPS, SMT1SIGPPS, SMT1WINPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, SMT2SIGPPS, SMT2WINPPS, ATCC3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:F5'} // T1CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:7F'} // OSCSTAT bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F7'} // CM1CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F7'} // CM2CON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AC'} // DAC1CON0 bits 6,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:0F'} // PID1OUTU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59D:01'} // PID1Z1U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:01'} // PID1Z2U bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:07'} // PID1ACCU bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C7'} // PID1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:77'} // CWG1AS1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:FE'} // CRCXORL bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:03'} // AT1RESH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // AT1PHSH bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:FB'} // AT1CON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:57'} // AT1CON1 bits 7,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:07'} // AT1IR0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:07'} // AT1IE0 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:07'} // AT1IR1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:07'} // AT1IE1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // AT1STPTH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:01'} // AT1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:07'} // AT1SIG bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:07'} // AT1CSEL1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:03'} // AT1CC1H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:99'} // AT1CCON1 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:07'} // AT1CSEL2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:03'} // AT1CC2H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:99'} // AT1CCON2 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:07'} // AT1CSEL3 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:03'} // AT1CC3H bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:99'} // AT1CCON3 bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D98:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D99:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAA:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // ATINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CWGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // T2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // ATCC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:1F'} // ATCC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // ATCC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN + // Pin 3 : RA4/AN3/CLKOUT + // Pin 4 : RA3/VPP/nMCLR/MCLR + // Pin 5 : RC5/HIDC5 + // Pin 6 : RC4/HIDC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC6/AN8 + // Pin 9 : RC7/AN9 + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11 + // Pin 13 : RB4/I2C/AN10 + // Pin 14 : RC2/AN6/C1IN2-/C2IN2- + // Pin 15 : RC1/AN5/C1IN1-/C2IN1- + // Pin 16 : RC0/AN4/C2IN+ + // Pin 17 : RA2/AN2/ZCDIN + // Pin 18 : RA1/AN1/C2IN0-/C1IN0-/VREF+/ICSPCLK + // Pin 19 : RA0/AN0/C1IN+/DACOUT/ICSPDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switch Over + {$define _IESO_ON = $3FFF} // Internal External Switch Over mode is enabled + {$define _IESO_OFF = $2FFF} // Internal External Switch Over mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by PMCON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by PMCON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by PMCON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero Cross Detect Disable Bit + {$define _ZCD_OFF = $3FFF} // ZCD disable. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON + {$define _ZCD_ON = $3F7F} // ZCD always enabled + + // PLLEN : PLL Enable Bit + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + + // WDTCPS : WDT Period Select + {$define _WDTCPS_WDTCPS0 = $3FE0} // 1:32 (1 ms period) + {$define _WDTCPS_WDTCPS1 = $3FE1} // 1:64 (2 ms period) + {$define _WDTCPS_WDTCPS2 = $3FE2} // 1:128 (4 ms period) + {$define _WDTCPS_WDTCPS3 = $3FE3} // 1:256 (8 ms period) + {$define _WDTCPS_WDTCPS4 = $3FE4} // 1:512 (16 ms period) + {$define _WDTCPS_WDTCPS5 = $3FE5} // 1:1024 (32 ms period) + {$define _WDTCPS_WDTCPS6 = $3FE6} // 1:2048 (64 ms period) + {$define _WDTCPS_WDTCPS7 = $3FE7} // 1:4096 (128 ms period) + {$define _WDTCPS_WDTCPS8 = $3FE8} // 1:8192 (256 ms period) + {$define _WDTCPS_WDTCPS9 = $3FE9} // 1:16384 (512 ms period) + {$define _WDTCPS_WDTCPSA = $3FEA} // 1:32768 (1 s period) + {$define _WDTCPS_WDTCPSB = $3FEB} // 1:65536 (2 s period) + {$define _WDTCPS_WDTCPSC = $3FEC} // 1:131072 (4 s period) + {$define _WDTCPS_WDTCPSD = $3FED} // 1:262144 (8 s period) + {$define _WDTCPS_WDTCPSE = $3FEE} // 1:524299 (16 s period) + {$define _WDTCPS_WDTCPSF = $3FEF} // 1:1048576 (32 s period) + {$define _WDTCPS_WDTCPS10 = $3FF0} // 1:2097152 (64 s period) + {$define _WDTCPS_WDTCPS11 = $3FF1} // 1:4194304 (128 s period) + {$define _WDTCPS_WDTCPS12 = $3FF2} // 1:8388608 (256 s period) + {$define _WDTCPS_WDTCPS1F = $3FFF} // Software Control (WDTPS) + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FBF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3F9F} // WDT disabled + + // WDTCWS : WDT Window Select + {$define _WDTCWS_WDTCWS125 = $38FF} // 12.5 percent window open time + {$define _WDTCWS_WDTCWS25 = $39FF} // 25 percent window open time + {$define _WDTCWS_WDTCWS375 = $3AFF} // 37.5 percent window open time + {$define _WDTCWS_WDTCWS50 = $3BFF} // 50 percent window open time + {$define _WDTCWS_WDTCWS625 = $3CFF} // 62.5 percent window open time + {$define _WDTCWS_WDTCWS75 = $3DFF} // 75 percent window open time + {$define _WDTCWS_WDTCWS100 = $3EFF} // 100 percent window open time (Legacy WDT) + {$define _WDTCWS_WDTCWSSW = $3FFF} // Software WDT window size control (WDTWS bits) + + // WDTCCS : WDT Input Clock Selector + {$define _WDTCCS_LFINTOSC = $07FF} // 31.0kHz LFINTOSC + {$define _WDTCCS_MFINTOSC = $0FFF} // 31.25 kHz HFINTOSC (MFINTOSC) + {$define _WDTCCS_SWC = $3FFF} // Software control, controlled by WDTCS bits + +implementation +end. diff --git a/devices17/PIC16F1703.pas b/devices17/PIC16F1703.pas new file mode 100644 index 00000000..be5be788 --- /dev/null +++ b/devices17/PIC16F1703.pas @@ -0,0 +1,932 @@ +unit PIC16F1703; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1703'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_ZCDIF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_ZCDIE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + CLKRFRZ : byte absolute $0F92; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F92:SFR'} // Bank 31 : ICDSTAT, CLKRFRZ + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:CF'} // PIR1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:09'} // PIR2 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:CF'} // PIE1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:09'} // PIE2 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F92:00'} // CLKRFRZ bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/Vpp + // Pin 5 : RC5/OPA2IN+ + // Pin 6 : RC4/OPA2IN- + // Pin 7 : RC3/AN7/OPA2OUT + // Pin 8 : RC2/AN6/OPA1OUT + // Pin 9 : RC1/AN5/OPA1IN- + // Pin 10 : RC0/AN4/OPA1IN+ + // Pin 11 : RA2/AN2/ZCD + // Pin 12 : RA1/AN1/Vref+/ICSPCLK + // Pin 13 : RA0/AN0/Vref-/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // External oscillator, high power. I/O function on RA4 + {$define _FOSC_ECM = $3FFE} // External oscillator, medium power. I/O function on RA4 + {$define _FOSC_ECL = $3FFD} // External oscillator, low power. I/O function on RA4 + {$define _FOSC_INTOSC = $3FFC} // Internal HFINTOSC. I/O function on RA4 and RA5. + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1704.pas b/devices17/PIC16F1704.pas new file mode 100644 index 00000000..637a5368 --- /dev/null +++ b/devices17/PIC16F1704.pas @@ -0,0 +1,1450 @@ +unit PIC16F1704; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1704'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANS5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:37'} // PIE3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:7F'} // COG1RIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1RSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69B:7F'} // COG1FIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/VPP + // Pin 5 : RC5/OPA2IN+ + // Pin 6 : RC4/OPA2IN- + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/OPA2OUT + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/OPA1OUT + // Pin 9 : RC1/AN5/C1IN1-/C2IN1-/OPA1IN- + // Pin 10 : RC0/AN4/C2IN+/OPA1IN+ + // Pin 11 : RA2/AN2/DAC1OUT2/ZCD + // Pin 12 : RA1/AN1/CLC4IN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/VREF-/C1IN+/DAC1OUT1/ICSPDAT/ICDDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1705.pas b/devices17/PIC16F1705.pas new file mode 100644 index 00000000..288dec98 --- /dev/null +++ b/devices17/PIC16F1705.pas @@ -0,0 +1,1533 @@ +unit PIC16F1705; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1705'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANS5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + CLKRFRZ : byte absolute $0F92; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F92:SFR'} // Bank 31 : ICDSTAT, CLKRFRZ + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:37'} // PIE3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:7F'} // COG1RIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1RSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69B:7F'} // COG1FIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F92:00'} // CLKRFRZ bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/VPP + // Pin 5 : RC5/OPA2IN+ + // Pin 6 : RC4/OPA2IN- + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/OPA2OUT + // Pin 8 : RC2/AN6/C1IN2-/C2IN2-/OPA1OUT + // Pin 9 : RC1/AN5/C1IN1-/C2IN1-/OPA1IN- + // Pin 10 : RC0/AN4/C2IN+/OPA1IN+ + // Pin 11 : RA2/AN2/DAC1OUT2/ZCD + // Pin 12 : RA1/AN1/CLC4IN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/VREF-/C1IN+/DAC1OUT1/ICSPDAT/ICDDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1707.pas b/devices17/PIC16F1707.pas new file mode 100644 index 00000000..a4dd2c31 --- /dev/null +++ b/devices17/PIC16F1707.pas @@ -0,0 +1,1046 @@ +unit PIC16F1707; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1707'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_ZCDIF : bit absolute PIR3.4; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_ZCDIE : bit absolute PIE3.4; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + CLKRFRZ : byte absolute $0F92; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '116-117:SFR'} // Bank 2 : BORCON, FVRCON + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F92:SFR'} // Bank 31 : ICDSTAT, CLKRFRZ + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '011:CF'} // PIR1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:09'} // PIR2 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '091:CF'} // PIE1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:09'} // PIE2 bits 7,6,5,4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F92:00'} // CLKRFRZ bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/Vpp + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/OPA2OUT + // Pin 8 : RC6/AN9/OPA2IN- + // Pin 9 : RC7/AN9/OPA2IN+ + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11/OPA1IN+ + // Pin 13 : RB4/AN10/OPA1IN+ + // Pin 14 : RC2/AN6/OPA1OUT + // Pin 15 : RC1/AN5 + // Pin 16 : RC0/AN4 + // Pin 17 : RA2/AN2/ZCD + // Pin 18 : RA1/AN1/Vref+/ICSPCLK + // Pin 19 : RA0/AN0/Vref-/ICSPDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // External oscillator, high power. I/O function on RA4 + {$define _FOSC_ECM = $3FFE} // External oscillator, medium power. I/O function on RA4 + {$define _FOSC_ECL = $3FFD} // External oscillator, low power. I/O function on RA4 + {$define _FOSC_INTOSC = $3FFC} // Internal HFINTOSC. I/O function on RA4 and RA5. + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1708.pas b/devices17/PIC16F1708.pas new file mode 100644 index 00000000..9bec615c --- /dev/null +++ b/devices17/PIC16F1708.pas @@ -0,0 +1,1566 @@ +unit PIC16F1708; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1708'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANS5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:37'} // PIE3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:7F'} // COG1RIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1RSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69B:7F'} // COG1FIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/T1CKI/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/VPP + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/OPA2OUT + // Pin 8 : RC6/AN8/OPA2IN- + // Pin 9 : RC7/AN9/OPA2IN+ + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11/OPA1IN+ + // Pin 13 : RB4/AN10/OPA1IN- + // Pin 14 : RC2/AN6/C1IN2-/C2IN2-/OPA1OUT + // Pin 15 : RC1/AN5/C1IN1-/C2IN1- + // Pin 16 : RC0/AN4/C2IN+ + // Pin 17 : RA2/AN2/DAC1OUT2/ZCD + // Pin 18 : RA1/AN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/VREF-/C1IN+/DAC1OUT1/ICSPDAT/ICDDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1709.pas b/devices17/PIC16F1709.pas new file mode 100644 index 00000000..3a969b19 --- /dev/null +++ b/devices17/PIC16F1709.pas @@ -0,0 +1,1647 @@ +unit PIC16F1709; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1709'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANS5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + ICDIO : byte absolute $0F8C; + ICDIO_PORT_ICDDAT : bit absolute ICDIO.7; + ICDIO_PORT_ICDCLK : bit absolute ICDIO.6; + ICDIO_LAT_ICDDAT : bit absolute ICDIO.5; + ICDIO_LAT_ICDCLK : bit absolute ICDIO.4; + ICDIO_TRIS_ICDDAT : bit absolute ICDIO.3; + ICDIO_TRIS_ICDCLK : bit absolute ICDIO.2; + ICDCON0 : byte absolute $0F8D; + ICDCON0_INBUG : bit absolute ICDCON0.7; + ICDCON0_FREEZ : bit absolute ICDCON0.6; + ICDCON0_SSTEP : bit absolute ICDCON0.5; + ICDCON0_DBGINEX : bit absolute ICDCON0.3; + ICDCON0_RSTVEC : bit absolute ICDCON0.0; + ICDSTAT : byte absolute $0F91; + ICDSTAT_TRP1HLTF : bit absolute ICDSTAT.7; + ICDSTAT_TRP0HLTF : bit absolute ICDSTAT.6; + ICDSTAT_USRHLTF : bit absolute ICDSTAT.1; + CLKRFRZ : byte absolute $0F92; + DEVSEL : byte absolute $0F95; + DEVSEL_DEVSEL2 : bit absolute DEVSEL.2; + DEVSEL_DEVSEL1 : bit absolute DEVSEL.1; + DEVSEL_DEVSEL0 : bit absolute DEVSEL.0; + ICDINSTL : byte absolute $0F96; + ICDINSTL_DBGIN7 : bit absolute ICDINSTL.7; + ICDINSTL_DBGIN6 : bit absolute ICDINSTL.6; + ICDINSTL_DBGIN5 : bit absolute ICDINSTL.5; + ICDINSTL_DBGIN4 : bit absolute ICDINSTL.4; + ICDINSTL_DBGIN3 : bit absolute ICDINSTL.3; + ICDINSTL_DBGIN2 : bit absolute ICDINSTL.2; + ICDINSTL_DBGIN1 : bit absolute ICDINSTL.1; + ICDINSTL_DBGIN0 : bit absolute ICDINSTL.0; + ICDINSTH : byte absolute $0F97; + ICDINSTH_DBGIN13 : bit absolute ICDINSTH.5; + ICDINSTH_DBGIN12 : bit absolute ICDINSTH.4; + ICDINSTH_DBGIN11 : bit absolute ICDINSTH.3; + ICDINSTH_DBGIN10 : bit absolute ICDINSTH.2; + ICDINSTH_DBGIN9 : bit absolute ICDINSTH.1; + ICDINSTH_DBGIN8 : bit absolute ICDINSTH.0; + ICDBK0CON : byte absolute $0F9C; + ICDBK0CON_BKEN : bit absolute ICDBK0CON.7; + ICDBK0CON_BKHLT : bit absolute ICDBK0CON.0; + ICDBK0L : byte absolute $0F9D; + ICDBK0L_BKA7 : bit absolute ICDBK0L.7; + ICDBK0L_BKA6 : bit absolute ICDBK0L.6; + ICDBK0L_BKA5 : bit absolute ICDBK0L.5; + ICDBK0L_BKA4 : bit absolute ICDBK0L.4; + ICDBK0L_BKA3 : bit absolute ICDBK0L.3; + ICDBK0L_BKA2 : bit absolute ICDBK0L.2; + ICDBK0L_BKA1 : bit absolute ICDBK0L.1; + ICDBK0L_BKA0 : bit absolute ICDBK0L.0; + ICDBK0H : byte absolute $0F9E; + ICDBK0H_BKA14 : bit absolute ICDBK0H.6; + ICDBK0H_BKA13 : bit absolute ICDBK0H.5; + ICDBK0H_BKA12 : bit absolute ICDBK0H.4; + ICDBK0H_BKA11 : bit absolute ICDBK0H.3; + ICDBK0H_BKA10 : bit absolute ICDBK0H.2; + ICDBK0H_BKA9 : bit absolute ICDBK0H.1; + ICDBK0H_BKA8 : bit absolute ICDBK0H.0; + BSRICDSHAD : byte absolute $0FE3; + BSRICDSHAD_BSR_ICDSHAD4 : bit absolute BSRICDSHAD.4; + BSRICDSHAD_BSR_ICDSHAD3 : bit absolute BSRICDSHAD.3; + BSRICDSHAD_BSR_ICDSHAD2 : bit absolute BSRICDSHAD.2; + BSRICDSHAD_BSR_ICDSHAD1 : bit absolute BSRICDSHAD.1; + BSRICDSHAD_BSR_ICDSHAD0 : bit absolute BSRICDSHAD.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '11C-11C:SFR'} // Bank 2 : ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'F8C-F8D:SFR'} // Bank 31 : ICDIO, ICDCON0 + {$SET_STATE_RAM 'F91-F92:SFR'} // Bank 31 : ICDSTAT, CLKRFRZ + {$SET_STATE_RAM 'F95-F97:SFR'} // Bank 31 : DEVSEL, ICDINSTL, ICDINSTH + {$SET_STATE_RAM 'F9C-F9E:SFR'} // Bank 31 : ICDBK0CON, ICDBK0L, ICDBK0H + {$SET_STATE_RAM 'FE3-FEB:SFR'} // Bank 31 : BSRICDSHAD, STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:37'} // PIR3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:37'} // PIE3 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '699:7F'} // COG1RIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1RSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69B:7F'} // COG1FIS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8C:FC'} // ICDIO bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F8D:E9'} // ICDCON0 bits 4,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F91:C2'} // ICDSTAT bits 5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F92:00'} // CLKRFRZ bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F95:07'} // DEVSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F97:3F'} // ICDINSTH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9C:81'} // ICDBK0CON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F9E:7F'} // ICDBK0H bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE3:1F'} // BSRICDSHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/T1CKI/SOSCI/CLKIN/OSC1 + // Pin 3 : RA4/AN3/SOSCO/CLKOUT/OSC2 + // Pin 4 : RA3/MCLR/VPP + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3-/OPA2OUT + // Pin 8 : RC6/AN8/OPA2IN- + // Pin 9 : RC7/AN9/OPA2IN+ + // Pin 10 : RB7 + // Pin 11 : RB6 + // Pin 12 : RB5/AN11/OPA1IN+ + // Pin 13 : RB4/AN10/OPA1IN- + // Pin 14 : RC2/AN6/C1IN2-/C2IN2-/OPA1OUT + // Pin 15 : RC1/AN5/C1IN1-/C2IN1- + // Pin 16 : RC0/AN4/C2IN+ + // Pin 17 : RA2/AN2/DAC1OUT2/ZCD + // Pin 18 : RA1/AN1/VREF+/C1IN0-/C2IN0-/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/VREF-/C1IN+/DAC1OUT1/ICSPDAT/ICDDAT + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1713.pas b/devices17/PIC16F1713.pas new file mode 100644 index 00000000..c819a989 --- /dev/null +++ b/devices17/PIC16F1713.pas @@ -0,0 +1,1852 @@ +unit PIC16F1713; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1713'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_NCOIF : bit absolute PIR3.6; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_NCOIE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + DAC2CON0 : byte absolute $011A; + DAC2CON0_EN : bit absolute DAC2CON0.7; + DAC2CON0_OE1 : bit absolute DAC2CON0.5; + DAC2CON0_OE2 : bit absolute DAC2CON0.4; + DAC2CON0_PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_PSS0 : bit absolute DAC2CON0.2; + DAC2CON0_NSS : bit absolute DAC2CON0.0; + DAC2REF : byte absolute $011B; + DAC2REF_DACR4 : bit absolute DAC2REF.4; + DAC2REF_DACR3 : bit absolute DAC2REF.3; + DAC2REF_DACR2 : bit absolute DAC2REF.2; + DAC2REF_DACR1 : bit absolute DAC2REF.1; + DAC2REF_DACR0 : bit absolute DAC2REF.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS7 : bit absolute COG1RIS.7; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM7 : bit absolute COG1RSIM.7; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS7 : bit absolute COG1FIS.7; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM7 : bit absolute COG1FSIM.7; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11C:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, DAC2CON0, DAC2REF, ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // PIR3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7F'} // PIE3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:BD'} // DAC2CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:1F'} // CLC4SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:1F'} // CLC4SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:1F'} // CLC4SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:1F'} // CLC4SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR + // Pin 2 : RA0/AN0/C1IN0-/C2IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/OPA1OUT + // Pin 4 : RA2/AN2/Vref-/C1IN0+/C2IN0+/DAC1OUT1 + // Pin 5 : RA3/AN3/Vref+/C1IN1+ + // Pin 6 : RA4/OPA1IN+ + // Pin 7 : RA5/AN4/OPA1IN-/DAC2OUT1 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO + // Pin 12 : RC1/SOSCI + // Pin 13 : RC2/AN14 + // Pin 14 : RC3/AN15 + // Pin 15 : RC4/AN16 + // Pin 16 : RC5/AN17 + // Pin 17 : RC6/AN18 + // Pin 18 : RC7/AN19 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/ZCD + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN- + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/OPA2IN+ + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13 + // Pin 27 : RB6/ICSPCLK + // Pin 28 : RB7/DAC1OUT2/DAC2OUT2/ICSPDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input if LVP bit is also 0. + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR and can be enabled with ZCDSEN bit. + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is always enabled. + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1716.pas b/devices17/PIC16F1716.pas new file mode 100644 index 00000000..52b91aff --- /dev/null +++ b/devices17/PIC16F1716.pas @@ -0,0 +1,1858 @@ +unit PIC16F1716; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1716'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_NCOIF : bit absolute PIR3.6; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_NCOIE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + DAC2CON0 : byte absolute $011A; + DAC2CON0_EN : bit absolute DAC2CON0.7; + DAC2CON0_OE1 : bit absolute DAC2CON0.5; + DAC2CON0_OE2 : bit absolute DAC2CON0.4; + DAC2CON0_PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_PSS0 : bit absolute DAC2CON0.2; + DAC2CON0_NSS : bit absolute DAC2CON0.0; + DAC2REF : byte absolute $011B; + DAC2REF_DACR4 : bit absolute DAC2REF.4; + DAC2REF_DACR3 : bit absolute DAC2REF.3; + DAC2REF_DACR2 : bit absolute DAC2REF.2; + DAC2REF_DACR1 : bit absolute DAC2REF.1; + DAC2REF_DACR0 : bit absolute DAC2REF.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS7 : bit absolute COG1RIS.7; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM7 : bit absolute COG1RSIM.7; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS7 : bit absolute COG1FIS.7; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM7 : bit absolute COG1FSIM.7; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11C:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, DAC2CON0, DAC2REF, ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // PIR3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7F'} // PIE3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:BD'} // DAC2CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:1F'} // CLC4SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:1F'} // CLC4SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:1F'} // CLC4SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:1F'} // CLC4SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR + // Pin 2 : RA0/AN0/C1IN0-/C2IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/OPA1OUT + // Pin 4 : RA2/AN2/Vref-/C1IN0+/C2IN0+/DAC1OUT1 + // Pin 5 : RA3/AN3/Vref+/C1IN1+ + // Pin 6 : RA4/OPA1IN+ + // Pin 7 : RA5/AN4/OPA1IN-/DAC2OUT1 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO + // Pin 12 : RC1/SOSCI + // Pin 13 : RC2/AN14 + // Pin 14 : RC3/AN15 + // Pin 15 : RC4/AN16 + // Pin 16 : RC5/AN17 + // Pin 17 : RC6/AN18 + // Pin 18 : RC7/AN19 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/ZCD + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN- + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/OPA2IN+ + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13 + // Pin 27 : RB6/ICSPCLK + // Pin 28 : RB7/DAC1OUT2/DAC2OUT2/ICSPDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input if LVP bit is also 0. + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 03FFh write protected, 0400h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR and can be enabled with ZCDSEN bit. + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is always enabled. + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1717.pas b/devices17/PIC16F1717.pas new file mode 100644 index 00000000..aa71af1d --- /dev/null +++ b/devices17/PIC16F1717.pas @@ -0,0 +1,2045 @@ +unit PIC16F1717; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1717'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_NCOIF : bit absolute PIR3.6; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_NCOIE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + DAC2CON0 : byte absolute $011A; + DAC2CON0_EN : bit absolute DAC2CON0.7; + DAC2CON0_OE1 : bit absolute DAC2CON0.5; + DAC2CON0_OE2 : bit absolute DAC2CON0.4; + DAC2CON0_PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_PSS0 : bit absolute DAC2CON0.2; + DAC2CON0_NSS : bit absolute DAC2CON0.0; + DAC2REF : byte absolute $011B; + DAC2REF_DACR4 : bit absolute DAC2REF.4; + DAC2REF_DACR3 : bit absolute DAC2REF.3; + DAC2REF_DACR2 : bit absolute DAC2REF.2; + DAC2REF_DACR1 : bit absolute DAC2REF.1; + DAC2REF_DACR0 : bit absolute DAC2REF.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODD7 : bit absolute ODCOND.7; + ODCOND_ODD6 : bit absolute ODCOND.6; + ODCOND_ODD5 : bit absolute ODCOND.5; + ODCOND_ODD4 : bit absolute ODCOND.4; + ODCOND_ODD3 : bit absolute ODCOND.3; + ODCOND_ODD2 : bit absolute ODCOND.2; + ODCOND_ODD1 : bit absolute ODCOND.1; + ODCOND_ODD0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODE2 : bit absolute ODCONE.2; + ODCONE_ODE1 : bit absolute ODCONE.1; + ODCONE_ODE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS7 : bit absolute COG1RIS.7; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM7 : bit absolute COG1RSIM.7; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS7 : bit absolute COG1FIS.7; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM7 : bit absolute COG1FSIM.7; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0EA8; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0EA9; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0EAA; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0EAB; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0EAC; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0EAD; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0EAE; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0EAF; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0EB0; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0EB1; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0EB2; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-013:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-093:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11C:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, DAC2CON0, DAC2REF, ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-293:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-310:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-EB2:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // PIR3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7F'} // PIE3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:BD'} // DAC2CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA8:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB0:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:1F'} // CLC4SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:1F'} // CLC4SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:1F'} // CLC4SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:1F'} // CLC4SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR + // Pin 2 : RA0/AN0/C1IN0-/C2IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/OPA1OUT + // Pin 4 : RA2/AN2/Vref-/C1IN0+/C2IN0+/DAC1OUT1 + // Pin 5 : RA3/AN3/Vref+/C1IN1+ + // Pin 6 : RA4/OPA1IN+ + // Pin 7 : RA5/AN4/OPA1IN-/DAC2OUT1 + // Pin 8 : RE0/AN5 + // Pin 9 : RE1/AN6 + // Pin 10 : RE2/AN7 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN + // Pin 14 : RA6/OSC2/CLKOUT + // Pin 15 : RC0/SOSCO + // Pin 16 : RC1/SOSCI + // Pin 17 : RC2/AN14 + // Pin 18 : RC3/AN15 + // Pin 19 : RD0/AN20 + // Pin 20 : RD1/AN21 + // Pin 21 : RD2/AN22 + // Pin 22 : RD3/AN23 + // Pin 23 : RC4/AN16 + // Pin 24 : RC5/AN17 + // Pin 25 : RC6/AN18 + // Pin 26 : RC7/AN19 + // Pin 27 : RD4/AN24 + // Pin 28 : RD5/AN25 + // Pin 29 : RD6/AN26 + // Pin 30 : RD7/AN27 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/C2IN1+/ZCD + // Pin 34 : RB1/AN10/C1IN3-/C2IN3-/OPA2OUT + // Pin 35 : RB2/AN8/OPA2IN- + // Pin 36 : RB3/AN9/C1IN2-/C2IN2-/OPA2IN+ + // Pin 37 : RB4/AN11 + // Pin 38 : RB5/AN13 + // Pin 39 : RB6/ICSPCLK + // Pin 40 : RB7/DAC1OUT2/DAC2OUT2/ICSPDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input if LVP bit is also 0. + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 03FFh write protected, 0400h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR and can be enabled with ZCDSEN bit. + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is always enabled. + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1718.pas b/devices17/PIC16F1718.pas new file mode 100644 index 00000000..7d434774 --- /dev/null +++ b/devices17/PIC16F1718.pas @@ -0,0 +1,1871 @@ +unit PIC16F1718; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1718'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_NCOIF : bit absolute PIR3.6; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_NCOIE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + DAC2CON0 : byte absolute $011A; + DAC2CON0_EN : bit absolute DAC2CON0.7; + DAC2CON0_OE1 : bit absolute DAC2CON0.5; + DAC2CON0_OE2 : bit absolute DAC2CON0.4; + DAC2CON0_PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_PSS0 : bit absolute DAC2CON0.2; + DAC2CON0_NSS : bit absolute DAC2CON0.0; + DAC2REF : byte absolute $011B; + DAC2REF_DACR4 : bit absolute DAC2REF.4; + DAC2REF_DACR3 : bit absolute DAC2REF.3; + DAC2REF_DACR2 : bit absolute DAC2REF.2; + DAC2REF_DACR1 : bit absolute DAC2REF.1; + DAC2REF_DACR0 : bit absolute DAC2REF.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS7 : bit absolute COG1RIS.7; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM7 : bit absolute COG1RSIM.7; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS7 : bit absolute COG1FIS.7; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM7 : bit absolute COG1FSIM.7; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11C:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, DAC2CON0, DAC2REF, ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // PIR3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7F'} // PIE3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:BD'} // DAC2CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:1F'} // CLC4SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:1F'} // CLC4SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:1F'} // CLC4SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:1F'} // CLC4SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR + // Pin 2 : RA0/AN0/C1IN0-/C2IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/OPA1OUT + // Pin 4 : RA2/AN2/Vref-/C1IN0+/C2IN0+/DAC1OUT1 + // Pin 5 : RA3/AN3/Vref+/C1IN1+ + // Pin 6 : RA4/OPA1IN+ + // Pin 7 : RA5/AN4/OPA1IN-/DAC2OUT1 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN + // Pin 10 : RA6/OSC2/CLKOUT + // Pin 11 : RC0/SOSCO + // Pin 12 : RC1/SOSCI + // Pin 13 : RC2/AN14 + // Pin 14 : RC3/AN15 + // Pin 15 : RC4/AN16 + // Pin 16 : RC5/AN17 + // Pin 17 : RC6/AN18 + // Pin 18 : RC7/AN19 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/ZCD + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN- + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/OPA2IN+ + // Pin 25 : RB4/AN11 + // Pin 26 : RB5/AN13 + // Pin 27 : RB6/ICSPCLK + // Pin 28 : RB7/DAC1OUT2/DAC2OUT2/ICSPDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input if LVP bit is also 0. + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 03FFh write protected, 0400h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR and can be enabled with ZCDSEN bit. + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is always enabled. + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1719.pas b/devices17/PIC16F1719.pas new file mode 100644 index 00000000..dc04a970 --- /dev/null +++ b/devices17/PIC16F1719.pas @@ -0,0 +1,2058 @@ +unit PIC16F1719; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1719'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_TMR6IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_NCOIF : bit absolute PIR3.6; + PIR3_COGIF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_TMR6IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_NCOIE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + DAC2CON0 : byte absolute $011A; + DAC2CON0_EN : bit absolute DAC2CON0.7; + DAC2CON0_OE1 : bit absolute DAC2CON0.5; + DAC2CON0_OE2 : bit absolute DAC2CON0.4; + DAC2CON0_PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_PSS0 : bit absolute DAC2CON0.2; + DAC2CON0_NSS : bit absolute DAC2CON0.0; + DAC2REF : byte absolute $011B; + DAC2REF_DACR4 : bit absolute DAC2REF.4; + DAC2REF_DACR3 : bit absolute DAC2REF.3; + DAC2REF_DACR2 : bit absolute DAC2REF.2; + DAC2REF_DACR1 : bit absolute DAC2REF.1; + DAC2REF_DACR0 : bit absolute DAC2REF.0; + ZCD1CON : byte absolute $011C; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_Reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODD7 : bit absolute ODCOND.7; + ODCOND_ODD6 : bit absolute ODCOND.6; + ODCOND_ODD5 : bit absolute ODCOND.5; + ODCOND_ODD4 : bit absolute ODCOND.4; + ODCOND_ODD3 : bit absolute ODCOND.3; + ODCOND_ODD2 : bit absolute ODCOND.2; + ODCOND_ODD1 : bit absolute ODCOND.1; + ODCOND_ODD0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODE2 : bit absolute ODCONE.2; + ODCONE_ODE1 : bit absolute ODCONE.1; + ODCONE_ODE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1UG : bit absolute OPA1CON.4; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0515; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2UG : bit absolute OPA2CON.4; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_PWM3DCL1 : bit absolute PWM3DCL.7; + PWM3DCL_PWM3DCL0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM3CON_PWM3EN : bit absolute PWM3CON.7; + PWM3CON_PWM3OUT : bit absolute PWM3CON.5; + PWM3CON_PWM3POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $061A; + PWM4DCL_PWM4DCL1 : bit absolute PWM4DCL.7; + PWM4DCL_PWM4DCL0 : bit absolute PWM4DCL.6; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + PWM4CON_PWM4EN : bit absolute PWM4CON.7; + PWM4CON_PWM4OUT : bit absolute PWM4CON.5; + PWM4CON_PWM4POL : bit absolute PWM4CON.4; + COG1PHR : byte absolute $0691; + COG1PHR_G1PHR5 : bit absolute COG1PHR.5; + COG1PHR_G1PHR4 : bit absolute COG1PHR.4; + COG1PHR_G1PHR3 : bit absolute COG1PHR.3; + COG1PHR_G1PHR2 : bit absolute COG1PHR.2; + COG1PHR_G1PHR1 : bit absolute COG1PHR.1; + COG1PHR_G1PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $0692; + COG1PHF_G1PHF5 : bit absolute COG1PHF.5; + COG1PHF_G1PHF4 : bit absolute COG1PHF.4; + COG1PHF_G1PHF3 : bit absolute COG1PHF.3; + COG1PHF_G1PHF2 : bit absolute COG1PHF.2; + COG1PHF_G1PHF1 : bit absolute COG1PHF.1; + COG1PHF_G1PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $0693; + COG1BLKR_G1BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_G1BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_G1BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_G1BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_G1BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_G1BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0694; + COG1BLKF_G1BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_G1BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_G1BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_G1BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_G1BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_G1BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0695; + COG1DBR_G1DBR5 : bit absolute COG1DBR.5; + COG1DBR_G1DBR4 : bit absolute COG1DBR.4; + COG1DBR_G1DBR3 : bit absolute COG1DBR.3; + COG1DBR_G1DBR2 : bit absolute COG1DBR.2; + COG1DBR_G1DBR1 : bit absolute COG1DBR.1; + COG1DBR_G1DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0696; + COG1DBF_G1DBF5 : bit absolute COG1DBF.5; + COG1DBF_G1DBF4 : bit absolute COG1DBF.4; + COG1DBF_G1DBF3 : bit absolute COG1DBF.3; + COG1DBF_G1DBF2 : bit absolute COG1DBF.2; + COG1DBF_G1DBF1 : bit absolute COG1DBF.1; + COG1DBF_G1DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0697; + COG1CON0_G1EN : bit absolute COG1CON0.7; + COG1CON0_G1LD : bit absolute COG1CON0.6; + COG1CON0_G1CS1 : bit absolute COG1CON0.4; + COG1CON0_G1CS0 : bit absolute COG1CON0.3; + COG1CON0_G1MD2 : bit absolute COG1CON0.2; + COG1CON0_G1MD1 : bit absolute COG1CON0.1; + COG1CON0_G1MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0698; + COG1CON1_G1RDBS : bit absolute COG1CON1.7; + COG1CON1_G1FDBS : bit absolute COG1CON1.6; + COG1CON1_G1POLD : bit absolute COG1CON1.3; + COG1CON1_G1POLC : bit absolute COG1CON1.2; + COG1CON1_G1POLB : bit absolute COG1CON1.1; + COG1CON1_G1POLA : bit absolute COG1CON1.0; + COG1RIS : byte absolute $0699; + COG1RIS_G1RIS7 : bit absolute COG1RIS.7; + COG1RIS_G1RIS6 : bit absolute COG1RIS.6; + COG1RIS_G1RIS5 : bit absolute COG1RIS.5; + COG1RIS_G1RIS4 : bit absolute COG1RIS.4; + COG1RIS_G1RIS3 : bit absolute COG1RIS.3; + COG1RIS_G1RIS2 : bit absolute COG1RIS.2; + COG1RIS_G1RIS1 : bit absolute COG1RIS.1; + COG1RIS_G1RIS0 : bit absolute COG1RIS.0; + COG1RSIM : byte absolute $069A; + COG1RSIM_G1RSIM7 : bit absolute COG1RSIM.7; + COG1RSIM_G1RSIM6 : bit absolute COG1RSIM.6; + COG1RSIM_G1RSIM5 : bit absolute COG1RSIM.5; + COG1RSIM_G1RSIM4 : bit absolute COG1RSIM.4; + COG1RSIM_G1RSIM3 : bit absolute COG1RSIM.3; + COG1RSIM_G1RSIM2 : bit absolute COG1RSIM.2; + COG1RSIM_G1RSIM1 : bit absolute COG1RSIM.1; + COG1RSIM_G1RSIM0 : bit absolute COG1RSIM.0; + COG1FIS : byte absolute $069B; + COG1FIS_G1FIS7 : bit absolute COG1FIS.7; + COG1FIS_G1FIS6 : bit absolute COG1FIS.6; + COG1FIS_G1FIS5 : bit absolute COG1FIS.5; + COG1FIS_G1FIS4 : bit absolute COG1FIS.4; + COG1FIS_G1FIS3 : bit absolute COG1FIS.3; + COG1FIS_G1FIS2 : bit absolute COG1FIS.2; + COG1FIS_G1FIS1 : bit absolute COG1FIS.1; + COG1FIS_G1FIS0 : bit absolute COG1FIS.0; + COG1FSIM : byte absolute $069C; + COG1FSIM_G1FSIM7 : bit absolute COG1FSIM.7; + COG1FSIM_G1FSIM6 : bit absolute COG1FSIM.6; + COG1FSIM_G1FSIM5 : bit absolute COG1FSIM.5; + COG1FSIM_G1FSIM4 : bit absolute COG1FSIM.4; + COG1FSIM_G1FSIM3 : bit absolute COG1FSIM.3; + COG1FSIM_G1FSIM2 : bit absolute COG1FSIM.2; + COG1FSIM_G1FSIM1 : bit absolute COG1FSIM.1; + COG1FSIM_G1FSIM0 : bit absolute COG1FSIM.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_G1ASE : bit absolute COG1ASD0.7; + COG1ASD0_G1ARSEN : bit absolute COG1ASD0.6; + COG1ASD0_G1ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_G1ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_G1ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_G1ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_G1AS3E : bit absolute COG1ASD1.3; + COG1ASD1_G1AS2E : bit absolute COG1ASD1.2; + COG1ASD1_G1AS1E : bit absolute COG1ASD1.1; + COG1ASD1_G1AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_G1SDATD : bit absolute COG1STR.7; + COG1STR_G1SDATC : bit absolute COG1STR.6; + COG1STR_G1SDATB : bit absolute COG1STR.5; + COG1STR_G1SDATA : bit absolute COG1STR.4; + COG1STR_G1STRD : bit absolute COG1STR.3; + COG1STR_G1STRC : bit absolute COG1STR.2; + COG1STR_G1STRB : bit absolute COG1STR.1; + COG1STR_G1STRA : bit absolute COG1STR.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COGINPPS : byte absolute $0E17; + COGINPPS_COGINPPS4 : bit absolute COGINPPS.4; + COGINPPS_COGINPPS3 : bit absolute COGINPPS.3; + COGINPPS_COGINPPS2 : bit absolute COGINPPS.2; + COGINPPS_COGINPPS1 : bit absolute COGINPPS.1; + COGINPPS_COGINPPS0 : bit absolute COGINPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0EA8; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0EA9; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0EAA; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0EAB; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0EAC; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0EAD; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0EAE; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0EAF; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0EB0; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0EB1; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0EB2; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-013:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-093:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09F:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11C:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, DAC2CON0, DAC2REF, ZCD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-293:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-310:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '691-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS, COG1RSIM, COG1FIS, COG1FSIM, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E17-E17:SFR'} // Bank 28 : COGINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-EB2:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7F'} // PIR3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7F'} // PIE3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F0'} // ADCON2 bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:BD'} // DAC2CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '195:7F'} // PMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:D3'} // OPA1CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:D3'} // OPA2CON bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '69E:0F'} // COG1ASD1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COGINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // RA3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // RA6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // RA7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:1F'} // RB0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:1F'} // RB1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:1F'} // RB2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:1F'} // RB3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA8:1F'} // RD0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // RD1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // RD2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // RD3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // RD4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:1F'} // RD5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:1F'} // RD6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:1F'} // RD7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB0:1F'} // RE0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // RE1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // RE2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:1F'} // CLC4SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:1F'} // CLC4SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:1F'} // CLC4SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:1F'} // CLC4SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // PMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR + // Pin 2 : RA0/AN0/C1IN0-/C2IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/OPA1OUT + // Pin 4 : RA2/AN2/Vref-/C1IN0+/C2IN0+/DAC1OUT1 + // Pin 5 : RA3/AN3/Vref+/C1IN1+ + // Pin 6 : RA4/OPA1IN+ + // Pin 7 : RA5/AN4/OPA1IN-/DAC2OUT1 + // Pin 8 : RE0/AN5 + // Pin 9 : RE1/AN6 + // Pin 10 : RE2/AN7 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN + // Pin 14 : RA6/OSC2/CLKOUT + // Pin 15 : RC0/SOSCO + // Pin 16 : RC1/SOSCI + // Pin 17 : RC2/AN14 + // Pin 18 : RC3/AN15 + // Pin 19 : RD0/AN20 + // Pin 20 : RD1/AN21 + // Pin 21 : RD2/AN22 + // Pin 22 : RD3/AN23 + // Pin 23 : RC4/AN16 + // Pin 24 : RC5/AN17 + // Pin 25 : RC6/AN18 + // Pin 26 : RC7/AN19 + // Pin 27 : RD4/AN24 + // Pin 28 : RD5/AN25 + // Pin 29 : RD6/AN26 + // Pin 30 : RD7/AN27 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/C2IN1+/ZCD + // Pin 34 : RB1/AN10/C1IN3-/C2IN3-/OPA2OUT + // Pin 35 : RB2/AN8/OPA2IN- + // Pin 36 : RB3/AN9/C1IN2-/C2IN2-/OPA2IN+ + // Pin 37 : RB4/AN11 + // Pin 38 : RB5/AN13 + // Pin 39 : RB6/ICSPCLK + // Pin 40 : RB7/DAC1OUT2/DAC2OUT2/ICSPDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input if LVP bit is also 0. + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 03FFh write protected, 0400h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_ON = $3FFF} // Zero-cross detect circuit is disabled at POR and can be enabled with ZCDSEN bit. + {$define _ZCDDIS_OFF = $3F7F} // Zero-cross detect circuit is always enabled. + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1764.pas b/devices17/PIC16F1764.pas new file mode 100644 index 00000000..28cc4f09 --- /dev/null +++ b/devices17/PIC16F1764.pas @@ -0,0 +1,1685 @@ +unit PIC16F1764; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1764'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR3 : byte absolute $0013; + PIR3_PWM5IF : bit absolute PIR3.6; + PIR3_COG1IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE3 : byte absolute $0093; + PIE3_PWM5IE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $010F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0110; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0111; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0112; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0113; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0114; + CM2CON1 : byte absolute $0115; + CM2NSEL : byte absolute $0116; + CM2PSEL : byte absolute $0117; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + BORCON : byte absolute $021D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $021E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $021F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPTMRS : byte absolute $029E; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + MD1CON0 : byte absolute $039B; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $039C; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $039D; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $039E; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $039F; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3GCON : byte absolute $0496; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5GCON : byte absolute $049D; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + DACLD : byte absolute $0590; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $0591; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $0592; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0593; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC3CON0 : byte absolute $0597; + DAC3CON0_NSS : bit absolute DAC3CON0.0; + DAC3REF : byte absolute $0598; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + PRG1RTSS : byte absolute $0794; + PRG1FTSS : byte absolute $0795; + PRG1INS : byte absolute $0796; + PRG1CON0 : byte absolute $0797; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON0_GO : bit absolute PRG1CON0.0; + PRG1CON1 : byte absolute $0798; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0799; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM5EN : bit absolute PWMEN.4; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM5LD : bit absolute PWMLD.4; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.4; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + COG1INPPS : byte absolute $0E16; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + T2INPPS : byte absolute $0E19; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T3CKIPPS : byte absolute $0E1A; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1B; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4INPPS : byte absolute $0E1C; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T5CKIPPS : byte absolute $0E1D; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1E; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6INPPS : byte absolute $0E1F; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + PRG1RPPS : byte absolute $0E2C; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2D; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + MD1CHPPS : byte absolute $0E30; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1CLPPS : byte absolute $0E31; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1MODPPS : byte absolute $0E32; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-09F:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-117:SFR'} // Bank 2 : LATC, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21D-21F:SFR'} // Bank 4 : BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39B-39F:SFR'} // Bank 7 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '50F-512:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS + {$SET_STATE_RAM '590-593:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH + {$SET_STATE_RAM '597-598:SFR'} // Bank 11 : DAC3CON0, DAC3REF + {$SET_STATE_RAM '617-619:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '794-799:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2 + {$SET_STATE_RAM 'D8E-DA0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON + {$SET_STATE_RAM 'E0F-E14:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS + {$SET_STATE_RAM 'E16-E16:SFR'} // Bank 28 : COG1INPPS + {$SET_STATE_RAM 'E19-E22:SFR'} // Bank 28 : T2INPPS, T3CKIPPS, T3GPPS, T4INPPS, T5CKIPPS, T5GPPS, T6INPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2D:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, PRG1RPPS, PRG1FPPS + {$SET_STATE_RAM 'E30-E32:SFR'} // Bank 28 : MD1CHPPS, MD1CLPPS, MD1MODPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:E8'} // PIR2 bits 4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:77'} // PIR3 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:E8'} // PIE2 bits 4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:77'} // PIE3 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:33'} // CCPTMRS bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '590:01'} // DACLD bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:ED'} // DAC1CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:AD'} // DAC3CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '598:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:7F'} // COG1RIS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:7F'} // COG1RSIM1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1FIS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:10'} // PWMEN bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:10'} // PWMLD bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:10'} // PWMOUT bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:80'} // PWM5LDCON bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:10'} // PWM5OFCON bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // COG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // PRG1RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // PRG1FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:1F'} // MD1CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:1F'} // MD1CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:1F'} // MD1MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/OSC1/CLKIN + // Pin 3 : RA4/AN3/SOSCO/OSC2/CLKOUT + // Pin 4 : RA3/Vpp/nMCLR/nICD/MCLR + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC2/AN6/OPA1OUT/C1IN2-/C2IN2-/PRG1IN0 + // Pin 9 : RC1/AN5/OPA1IN-/C1IN1-/C2IN1- + // Pin 10 : RC0/AN4/OPA1IN+/C2IN0+ + // Pin 11 : RA2/AN2/ZCD + // Pin 12 : RA1/AN1/Vref+/DAC1Ref+/DAC3Ref+/C1IN0-/C2IN0-/ICSPCLK + // Pin 13 : RA0/AN0/Vref-/DAC1Ref-/DAC3Ref-/DAC1OUT1/DAC3OUT1/C1IN0+/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1765.pas b/devices17/PIC16F1765.pas new file mode 100644 index 00000000..3c2aab51 --- /dev/null +++ b/devices17/PIC16F1765.pas @@ -0,0 +1,1691 @@ +unit PIC16F1765; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1765'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR3 : byte absolute $0013; + PIR3_PWM5IF : bit absolute PIR3.6; + PIR3_COG1IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE3 : byte absolute $0093; + PIE3_PWM5IE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $010F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0110; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0111; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0112; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0113; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0114; + CM2CON1 : byte absolute $0115; + CM2NSEL : byte absolute $0116; + CM2PSEL : byte absolute $0117; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + BORCON : byte absolute $021D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $021E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $021F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPTMRS : byte absolute $029E; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + MD1CON0 : byte absolute $039B; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $039C; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $039D; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $039E; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $039F; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3GCON : byte absolute $0496; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5GCON : byte absolute $049D; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + DACLD : byte absolute $0590; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $0591; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $0592; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0593; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC3CON0 : byte absolute $0597; + DAC3CON0_NSS : bit absolute DAC3CON0.0; + DAC3REF : byte absolute $0598; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + PRG1RTSS : byte absolute $0794; + PRG1FTSS : byte absolute $0795; + PRG1INS : byte absolute $0796; + PRG1CON0 : byte absolute $0797; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON0_GO : bit absolute PRG1CON0.0; + PRG1CON1 : byte absolute $0798; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0799; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM5EN : bit absolute PWMEN.4; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM5LD : bit absolute PWMLD.4; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.4; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + COG1INPPS : byte absolute $0E16; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + T2INPPS : byte absolute $0E19; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T3CKIPPS : byte absolute $0E1A; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1B; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4INPPS : byte absolute $0E1C; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T5CKIPPS : byte absolute $0E1D; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1E; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6INPPS : byte absolute $0E1F; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + PRG1RPPS : byte absolute $0E2C; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2D; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + MD1CHPPS : byte absolute $0E30; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1CLPPS : byte absolute $0E31; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1MODPPS : byte absolute $0E32; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-09F:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-117:SFR'} // Bank 2 : LATC, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21D-21F:SFR'} // Bank 4 : BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-399:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39B-39F:SFR'} // Bank 7 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-512:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '590-593:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH + {$SET_STATE_RAM '597-598:SFR'} // Bank 11 : DAC3CON0, DAC3REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-619:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '794-799:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2 + {$SET_STATE_RAM 'D8E-DA0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON + {$SET_STATE_RAM 'E0F-E14:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS + {$SET_STATE_RAM 'E16-E16:SFR'} // Bank 28 : COG1INPPS + {$SET_STATE_RAM 'E19-E22:SFR'} // Bank 28 : T2INPPS, T3CKIPPS, T3GPPS, T4INPPS, T5CKIPPS, T5GPPS, T6INPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E2D:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, PRG1RPPS, PRG1FPPS + {$SET_STATE_RAM 'E30-E32:SFR'} // Bank 28 : MD1CHPPS, MD1CLPPS, MD1MODPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:E8'} // PIR2 bits 4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:77'} // PIR3 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:E8'} // PIE2 bits 4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:77'} // PIE3 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:33'} // CCPTMRS bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '590:01'} // DACLD bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:ED'} // DAC1CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:AD'} // DAC3CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '598:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:7F'} // COG1RIS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:7F'} // COG1RSIM1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69A:7F'} // COG1FIS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69C:7F'} // COG1FSIM1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:10'} // PWMEN bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:10'} // PWMLD bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:10'} // PWMOUT bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:80'} // PWM5LDCON bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:10'} // PWM5OFCON bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // COG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // PRG1RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // PRG1FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:1F'} // MD1CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:1F'} // MD1CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:1F'} // MD1MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/OSC1/CLKIN + // Pin 3 : RA4/AN3/SOSCO/OSC2/CLKOUT + // Pin 4 : RA3/Vpp/nMCLR/nICD/MCLR + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/C1IN3-/C2IN3- + // Pin 8 : RC2/AN6/OPA1OUT/C1IN2-/C2IN2-/PRG1IN0 + // Pin 9 : RC1/AN5/OPA1IN-/C1IN1-/C2IN1- + // Pin 10 : RC0/AN4/OPA1IN+/C2IN0+ + // Pin 11 : RA2/AN2/ZCD + // Pin 12 : RA1/AN1/Vref+/DAC1Ref+/DAC3Ref+/C1IN0-/C2IN0-/ICSPCLK + // Pin 13 : RA0/AN0/Vref-/DAC1Ref-/DAC3Ref-/DAC1OUT1/DAC3OUT1/C1IN0+/ICSPDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1768.pas b/devices17/PIC16F1768.pas new file mode 100644 index 00000000..d2d056f4 --- /dev/null +++ b/devices17/PIC16F1768.pas @@ -0,0 +1,1991 @@ +unit PIC16F1768; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1768'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_PWM6IF : bit absolute PIR3.7; + PIR3_PWM5IF : bit absolute PIR3.6; + PIR3_COG1IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_COG2IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_PWM6IE : bit absolute PIE3.7; + PIE3_PWM5IE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_COG2IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $010F; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0110; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0111; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0112; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0113; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0114; + CM2CON1 : byte absolute $0115; + CM2NSEL : byte absolute $0116; + CM2PSEL : byte absolute $0117; + CM3CON0 : byte absolute $0118; + CM3CON1 : byte absolute $0119; + CM3NSEL : byte absolute $011A; + CM3PSEL : byte absolute $011B; + CM4CON0 : byte absolute $011C; + CM4CON1 : byte absolute $011D; + CM4NSEL : byte absolute $011E; + CM4PSEL : byte absolute $011F; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + BORCON : byte absolute $021D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $021E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $021F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + MD2CON0 : byte absolute $031B; + MD2CON0_OPOL : bit absolute MD2CON0.4; + MD2CON0_BIT : bit absolute MD2CON0.0; + MD2CON1 : byte absolute $031C; + MD2CON1_CHPOL : bit absolute MD2CON1.5; + MD2CON1_CHSYNC : bit absolute MD2CON1.4; + MD2CON1_CLPOL : bit absolute MD2CON1.1; + MD2CON1_CLSYNC : bit absolute MD2CON1.0; + MD2SRC : byte absolute $031D; + MD2SRC_MS4 : bit absolute MD2SRC.4; + MD2SRC_MS3 : bit absolute MD2SRC.3; + MD2SRC_MS2 : bit absolute MD2SRC.2; + MD2SRC_MS1 : bit absolute MD2SRC.1; + MD2SRC_MS0 : bit absolute MD2SRC.0; + MD2CARL : byte absolute $031E; + MD2CARL_CL3 : bit absolute MD2CARL.3; + MD2CARL_CL2 : bit absolute MD2CARL.2; + MD2CARL_CL1 : bit absolute MD2CARL.1; + MD2CARL_CL0 : bit absolute MD2CARL.0; + MD2CARH : byte absolute $031F; + MD2CARH_CH3 : bit absolute MD2CARH.3; + MD2CARH_CH2 : bit absolute MD2CARH.2; + MD2CARH_CH1 : bit absolute MD2CARH.1; + MD2CARH_CH0 : bit absolute MD2CARH.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + MD1CON0 : byte absolute $039B; + MD1CON1 : byte absolute $039C; + MD1SRC : byte absolute $039D; + MD1CARL : byte absolute $039E; + MD1CARH : byte absolute $039F; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3GCON : byte absolute $0496; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5GCON : byte absolute $049D; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + DACLD : byte absolute $0590; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $0591; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $0592; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0593; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0594; + DAC2REFL : byte absolute $0595; + DAC2REFH : byte absolute $0596; + DAC3CON0 : byte absolute $0597; + DAC3CON0_NSS : bit absolute DAC3CON0.0; + DAC3REF : byte absolute $0598; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0599; + DAC4REF : byte absolute $059A; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $0794; + PRG1FTSS : byte absolute $0795; + PRG1INS : byte absolute $0796; + PRG1CON0 : byte absolute $0797; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON0_GO : bit absolute PRG1CON0.0; + PRG1CON1 : byte absolute $0798; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0799; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PRG2RTSS : byte absolute $079A; + PRG2FTSS : byte absolute $079B; + PRG2INS : byte absolute $079C; + PRG2CON0 : byte absolute $079D; + PRG2CON1 : byte absolute $079E; + PRG2CON2 : byte absolute $079F; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM6EN : bit absolute PWMEN.5; + PWMEN_MPWM5EN : bit absolute PWMEN.4; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM6LD : bit absolute PWMLD.5; + PWMLD_MPWM5LD : bit absolute PWMLD.4; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.5; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.4; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COG1INPPS : byte absolute $0E16; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E17; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + T2INPPS : byte absolute $0E19; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T3CKIPPS : byte absolute $0E1A; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1B; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4INPPS : byte absolute $0E1C; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T5CKIPPS : byte absolute $0E1D; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1E; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6INPPS : byte absolute $0E1F; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + PRG1RPPS : byte absolute $0E2C; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2D; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2E; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E2F; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + MD1CHPPS : byte absolute $0E30; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1CLPPS : byte absolute $0E31; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1MODPPS : byte absolute $0E32; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CHPPS : byte absolute $0E33; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2CLPPS : byte absolute $0E34; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2MODPPS : byte absolute $0E35; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-09F:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : LATA, LATB, LATC, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL, CM4CON0, CM4CON1, CM4NSEL, CM4PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21D-21F:SFR'} // Bank 4 : BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39B-39F:SFR'} // Bank 7 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '50F-516:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS + {$SET_STATE_RAM '590-59A:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '794-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2 + {$SET_STATE_RAM 'D8E-DB0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, COG1INPPS, COG2INPPS + {$SET_STATE_RAM 'E19-E22:SFR'} // Bank 28 : T2INPPS, T3CKIPPS, T3GPPS, T4INPPS, T5CKIPPS, T5GPPS, T6INPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E35:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, MD1CHPPS, MD1CLPPS, MD1MODPPS, MD2CHPPS, MD2CLPPS, MD2MODPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:07'} // CM3NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:07'} // CM4NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:0F'} // MD2CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:0F'} // MD2CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '590:03'} // DACLD bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:ED'} // DAC1CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:ED'} // DAC2CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:AD'} // DAC3CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '598:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '599:AD'} // DAC4CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:30'} // PWMEN bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:30'} // PWMLD bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:30'} // PWMOUT bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C1'} // PWM5LDCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:71'} // PWM5OFCON bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C1'} // PWM6LDCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:71'} // PWM6OFCON bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // COG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COG2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // PRG1RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // PRG1FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // PRG2RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // PRG2FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:1F'} // MD1CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:1F'} // MD1CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:1F'} // MD1MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E33:1F'} // MD2CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E34:1F'} // MD2CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:1F'} // MD2MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/OSC1/CLKIN + // Pin 3 : RA4/AN3/SOSCO/OSC2/CLKOUT + // Pin 4 : RA3/Vpp/nMCLR/nICD/MCLR + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/OPA2OUT/OPA1IN1-/OPA1IN1+/C1IN3-/C2IN3-/C3IN3-/C4IN3-/PRG1IN1/PRG2IN0 + // Pin 8 : RC6/AN8/OPA2IN0- + // Pin 9 : RC7/AN9/OPA2IN0+ + // Pin 10 : RB7/C2IN1+/C4IN1+ + // Pin 11 : RB6/C1IN1+/C3IN1+ + // Pin 12 : RB5/AN11/OPA1IN0+ + // Pin 13 : RB4/AN10/OPA1IN0- + // Pin 14 : RC2/AN6/OPA1OUT/OPA2IN1-/OPA2IN1+/C1IN2-/C2IN2-/PRG1IN0/PRG2IN1 + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/C3IN1-/C4IN1- + // Pin 16 : RC0/AN4/C2IN0+/C4IN0+ + // Pin 17 : RA2/AN2/ZCD + // Pin 18 : RA1/AN1/Vref+/DAC1Ref+/DAC2Ref+/DAC3Ref+/DAC4Ref+/C1IN0-/C2IN0-/C3IN0-/C4IN0-/ICSPCLK + // Pin 19 : RA0/AN0/Vref-/DAC1Ref-/DAC2Ref-/DAC3Ref-/DAC4Ref-/DAC1OUT1/DAC2OUT1/DAC3OUT1/DAC4OUT1/C1IN0+/C3IN0+/ICSPDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1769.pas b/devices17/PIC16F1769.pas new file mode 100644 index 00000000..76641ae1 --- /dev/null +++ b/devices17/PIC16F1769.pas @@ -0,0 +1,1997 @@ +unit PIC16F1769; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1769'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_PWM6IF : bit absolute PIR3.7; + PIR3_PWM5IF : bit absolute PIR3.6; + PIR3_COG1IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_COG2IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + T2TMR : byte absolute $001A; + T2PR : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $001D; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $001E; + T2CLKCON_CS3 : bit absolute T2CLKCON.3; + T2CLKCON_CS2 : bit absolute T2CLKCON.2; + T2RST : byte absolute $001F; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_PWM6IE : bit absolute PIE3.7; + PIE3_PWM5IE : bit absolute PIE3.6; + PIE3_COGIE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_COG2IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL4 : bit absolute ADCON2.7; + ADCON2_TRIGSEL3 : bit absolute ADCON2.6; + ADCON2_TRIGSEL2 : bit absolute ADCON2.5; + ADCON2_TRIGSEL1 : bit absolute ADCON2.4; + ADCON2_TRIGSEL0 : bit absolute ADCON2.3; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $010F; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0110; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0111; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0112; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0113; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0114; + CM2CON1 : byte absolute $0115; + CM2NSEL : byte absolute $0116; + CM2PSEL : byte absolute $0117; + CM3CON0 : byte absolute $0118; + CM3CON1 : byte absolute $0119; + CM3NSEL : byte absolute $011A; + CM3PSEL : byte absolute $011B; + CM4CON0 : byte absolute $011C; + CM4CON1 : byte absolute $011D; + CM4NSEL : byte absolute $011E; + CM4PSEL : byte absolute $011F; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + BORCON : byte absolute $021D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $021E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $021F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + ODCONA : byte absolute $028C; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CAP : byte absolute $029B; + CCPTMRS : byte absolute $029E; + CCPTMRS_P4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_P4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_P3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_P3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + MD2CON0 : byte absolute $031B; + MD2CON0_OPOL : bit absolute MD2CON0.4; + MD2CON0_BIT : bit absolute MD2CON0.0; + MD2CON1 : byte absolute $031C; + MD2CON1_CHPOL : bit absolute MD2CON1.5; + MD2CON1_CHSYNC : bit absolute MD2CON1.4; + MD2CON1_CLPOL : bit absolute MD2CON1.1; + MD2CON1_CLSYNC : bit absolute MD2CON1.0; + MD2SRC : byte absolute $031D; + MD2SRC_MS4 : bit absolute MD2SRC.4; + MD2SRC_MS3 : bit absolute MD2SRC.3; + MD2SRC_MS2 : bit absolute MD2SRC.2; + MD2SRC_MS1 : bit absolute MD2SRC.1; + MD2SRC_MS0 : bit absolute MD2SRC.0; + MD2CARL : byte absolute $031E; + MD2CARL_CL3 : bit absolute MD2CARL.3; + MD2CARL_CL2 : bit absolute MD2CARL.2; + MD2CARL_CL1 : bit absolute MD2CARL.1; + MD2CARL_CL0 : bit absolute MD2CARL.0; + MD2CARH : byte absolute $031F; + MD2CARH_CH3 : bit absolute MD2CARH.3; + MD2CARH_CH2 : bit absolute MD2CARH.2; + MD2CARH_CH1 : bit absolute MD2CARH.1; + MD2CARH_CH0 : bit absolute MD2CARH.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + MD1CON0 : byte absolute $039B; + MD1CON1 : byte absolute $039C; + MD1SRC : byte absolute $039D; + MD1CARL : byte absolute $039E; + MD1CARH : byte absolute $039F; + HIDRVC : byte absolute $040E; + HIDRVC_HIDC5 : bit absolute HIDRVC.5; + HIDRVC_HIDC4 : bit absolute HIDRVC.4; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4HLT : byte absolute $0416; + T4CLKCON : byte absolute $0417; + T4RST : byte absolute $0418; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + TMR3L : byte absolute $0493; + TMR3H : byte absolute $0494; + T3CON : byte absolute $0495; + T3GCON : byte absolute $0496; + TMR5L : byte absolute $049A; + TMR5H : byte absolute $049B; + T5CON : byte absolute $049C; + T5GCON : byte absolute $049D; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + DACLD : byte absolute $0590; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $0591; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $0592; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0593; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0594; + DAC2REFL : byte absolute $0595; + DAC2REFH : byte absolute $0596; + DAC3CON0 : byte absolute $0597; + DAC3CON0_NSS : bit absolute DAC3CON0.0; + DAC3REF : byte absolute $0598; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0599; + DAC4REF : byte absolute $059A; + PWM3DCL : byte absolute $0617; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0618; + PWM3CON : byte absolute $0619; + PWM4DCL : byte absolute $061A; + PWM4DCH : byte absolute $061B; + PWM4CON : byte absolute $061C; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $0794; + PRG1FTSS : byte absolute $0795; + PRG1INS : byte absolute $0796; + PRG1CON0 : byte absolute $0797; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON0_GO : bit absolute PRG1CON0.0; + PRG1CON1 : byte absolute $0798; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0799; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PRG2RTSS : byte absolute $079A; + PRG2FTSS : byte absolute $079B; + PRG2INS : byte absolute $079C; + PRG2CON0 : byte absolute $079D; + PRG2CON1 : byte absolute $079E; + PRG2CON2 : byte absolute $079F; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM6EN : bit absolute PWMEN.5; + PWMEN_MPWM5EN : bit absolute PWMEN.4; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM6LD : bit absolute PWMLD.5; + PWMLD_MPWM5LD : bit absolute PWMLD.4; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.5; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.4; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + COG1INPPS : byte absolute $0E16; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E17; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + T2INPPS : byte absolute $0E19; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T3CKIPPS : byte absolute $0E1A; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E1B; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T4INPPS : byte absolute $0E1C; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T5CKIPPS : byte absolute $0E1D; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E1E; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T6INPPS : byte absolute $0E1F; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + SSPCLKPPS : byte absolute $0E20; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E21; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E22; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E25; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + PRG1RPPS : byte absolute $0E2C; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2D; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2E; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E2F; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + MD1CHPPS : byte absolute $0E30; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1CLPPS : byte absolute $0E31; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1MODPPS : byte absolute $0E32; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CHPPS : byte absolute $0E33; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2CLPPS : byte absolute $0E34; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2MODPPS : byte absolute $0E35; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-01F:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-09F:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : LATA, LATB, LATC, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL, CM4CON0, CM4CON1, CM4NSEL, CM4PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21D-21F:SFR'} // Bank 4 : BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-294:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP + {$SET_STATE_RAM '298-29B:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29E-29E:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-399:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39B-39F:SFR'} // Bank 7 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40E-40E:SFR'} // Bank 8 : HIDRVC + {$SET_STATE_RAM '413-418:SFR'} // Bank 8 : T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '493-496:SFR'} // Bank 9 : TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '49A-49D:SFR'} // Bank 9 : TMR5L, TMR5H, T5CON, T5GCON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-516:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '590-59A:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '794-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2 + {$SET_STATE_RAM 'D8E-DB0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON + {$SET_STATE_RAM 'E0F-E17:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, COG1INPPS, COG2INPPS + {$SET_STATE_RAM 'E19-E22:SFR'} // Bank 28 : T2INPPS, T3CKIPPS, T3GPPS, T4INPPS, T5CKIPPS, T5GPPS, T6INPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, CKPPS + {$SET_STATE_RAM 'E28-E35:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, MD1CHPPS, MD1CLPPS, MD1MODPPS, MD2CHPPS, MD2CLPPS, MD2MODPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F2D:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:EF'} // PIR2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // T2RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:EF'} // PIE2 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:F8'} // ADCON2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '10F:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:07'} // CM3NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:07'} // CM4NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:0F'} // MD2CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:0F'} // MD2CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39B:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '40E:30'} // HIDRVC bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:0F'} // T4RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:0F'} // T6RST bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '495:F5'} // T3CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:F5'} // T5CON bits 3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '590:03'} // DACLD bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:ED'} // DAC1CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:ED'} // DAC2CON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:AD'} // DAC3CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '598:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '599:AD'} // DAC4CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '59A:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:30'} // PWMEN bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:30'} // PWMLD bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:30'} // PWMOUT bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C1'} // PWM5LDCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:71'} // PWM5OFCON bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C1'} // PWM6LDCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:71'} // PWM6OFCON bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // COG1INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // COG2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSPCLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSPDATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSPSSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // PRG1RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // PRG1FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // PRG2RPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // PRG2FPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:1F'} // MD1CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:1F'} // MD1CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:1F'} // MD1MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E33:1F'} // MD2CHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E34:1F'} // MD2CLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:1F'} // MD2MODPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:07'} // CLCDATA bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:1F'} // CLC3SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:1F'} // CLC3SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:1F'} // CLC3SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:1F'} // CLC3SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/SOSCI/OSC1/CLKIN + // Pin 3 : RA4/AN3/SOSCO/OSC2/CLKOUT + // Pin 4 : RA3/Vpp/nMCLR/nICD/MCLR + // Pin 5 : RC5 + // Pin 6 : RC4 + // Pin 7 : RC3/AN7/OPA2OUT/OPA1IN1-/OPA1IN1+/C1IN3-/C2IN3-/C3IN3-/C4IN3-/PRG1IN1/PRG2IN0 + // Pin 8 : RC6/AN8/OPA2IN0- + // Pin 9 : RC7/AN9/OPA2IN0+ + // Pin 10 : RB7/C2IN1+/C4IN1+ + // Pin 11 : RB6/C1IN1+/C3IN1+ + // Pin 12 : RB5/AN11/OPA1IN0+ + // Pin 13 : RB4/AN10/OPA1IN0- + // Pin 14 : RC2/AN6/OPA1OUT/OPA2IN1-/OPA2IN1+/C1IN2-/C2IN2-/PRG1IN0/PRG2IN1 + // Pin 15 : RC1/AN5/C1IN1-/C2IN1-/C3IN1-/C4IN1- + // Pin 16 : RC0/AN4/C2IN0+/C4IN0+ + // Pin 17 : RA2/AN2/ZCD + // Pin 18 : RA1/AN1/Vref+/DAC1Ref+/DAC2Ref+/DAC3Ref+/DAC4Ref+/C1IN0-/C2IN0-/C3IN0-/C4IN0-/ICSPCLK + // Pin 19 : RA0/AN0/Vref-/DAC1Ref-/DAC2Ref-/DAC3Ref-/DAC4Ref-/DAC1OUT1/DAC2OUT1/DAC3OUT1/DAC4OUT1/C1IN0+/C3IN0+/ICSPDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1773.pas b/devices17/PIC16F1773.pas new file mode 100644 index 00000000..ebb6f068 --- /dev/null +++ b/devices17/PIC16F1773.pas @@ -0,0 +1,2510 @@ +unit PIC16F1773; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1773'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_COG1IF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COG2IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR8IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + PIR5 : byte absolute $0015; + PIR5_CCP7IF : bit absolute PIR5.6; + PIR5_COG3IF : bit absolute PIR5.4; + PIR5_C6IF : bit absolute PIR5.1; + PIR5_C5IF : bit absolute PIR5.0; + PIR6 : byte absolute $0016; + PIR6_PWM11IF : bit absolute PIR6.2; + PIR6_PWM6IF : bit absolute PIR6.1; + PIR6_PWM5IF : bit absolute PIR6.0; + TMR0 : byte absolute $0017; + TMR1L : byte absolute $0018; + TMR1H : byte absolute $0019; + T1CON : byte absolute $001A; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $001B; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + TMR3L : byte absolute $001C; + TMR3H : byte absolute $001D; + T3CON : byte absolute $001E; + T3GCON : byte absolute $001F; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_COGIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COG2IE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR8IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + PIE5 : byte absolute $0095; + PIE5_CCP7IE : bit absolute PIE5.6; + PIE5_COG3IE : bit absolute PIE5.4; + PIE5_C6IE : bit absolute PIE5.1; + PIE5_C5IE : bit absolute PIE5.0; + PIE6 : byte absolute $0096; + PIE6_PWM11IE : bit absolute PIE6.2; + PIE6_PWM6IE : bit absolute PIE6.1; + PIE6_PWM5IE : bit absolute PIE6.0; + OPTION_REG : byte absolute $0097; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0098; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0099; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $009A; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $009B; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009C; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + BORCON : byte absolute $009D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $009E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $009F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $0111; + CMOUT_MC6OUT : bit absolute CMOUT.5; + CMOUT_MC5OUT : bit absolute CMOUT.4; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0112; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0113; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0114; + CM1NSEL_NCH3 : bit absolute CM1NSEL.3; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0115; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0116; + CM2CON1 : byte absolute $0117; + CM2NSEL : byte absolute $0118; + CM2PSEL : byte absolute $0119; + CM3CON0 : byte absolute $011A; + CM3CON1 : byte absolute $011B; + CM3NSEL : byte absolute $011C; + CM3PSEL : byte absolute $011D; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + MD3CON0 : byte absolute $021B; + MD3CON0_EN : bit absolute MD3CON0.7; + MD3CON0_OPOL : bit absolute MD3CON0.4; + MD3CON0_BIT : bit absolute MD3CON0.0; + MD3CON1 : byte absolute $021C; + MD3CON1_CHPOL : bit absolute MD3CON1.5; + MD3CON1_CHSYNC : bit absolute MD3CON1.4; + MD3CON1_CLPOL : bit absolute MD3CON1.1; + MD3CON1_CLSYNC : bit absolute MD3CON1.0; + MD3SRC : byte absolute $021D; + MD3SRC_MS4 : bit absolute MD3SRC.4; + MD3SRC_MS3 : bit absolute MD3SRC.3; + MD3SRC_MS2 : bit absolute MD3SRC.2; + MD3SRC_MS1 : bit absolute MD3SRC.1; + MD3SRC_MS0 : bit absolute MD3SRC.0; + MD3CARL : byte absolute $021E; + MD3CARL_CL4 : bit absolute MD3CARL.4; + MD3CARL_CL3 : bit absolute MD3CARL.3; + MD3CARL_CL2 : bit absolute MD3CARL.2; + MD3CARL_CL1 : bit absolute MD3CARL.1; + MD3CARL_CL0 : bit absolute MD3CARL.0; + MD3CARH : byte absolute $021F; + MD3CARH_CH4 : bit absolute MD3CARH.4; + MD3CARH_CH3 : bit absolute MD3CARH.3; + MD3CARH_CH2 : bit absolute MD3CARH.2; + MD3CARH_CH1 : bit absolute MD3CARH.1; + MD3CARH_CH0 : bit absolute MD3CARH.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CON_MODE3 : bit absolute CCP1CON.3; + CCP1CON_MODE2 : bit absolute CCP1CON.2; + CCP1CON_MODE1 : bit absolute CCP1CON.1; + CCP1CON_MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CAP : byte absolute $0298; + CCPR7L : byte absolute $0299; + CCPR7H : byte absolute $029A; + CCP7CON : byte absolute $029B; + CCP7CAP : byte absolute $029C; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C2TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C2TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C1TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C1TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_P9TSEL1 : bit absolute CCPTMRS2.5; + CCPTMRS2_P9TSEL0 : bit absolute CCPTMRS2.4; + CCPTMRS2_P4TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_P4TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_P3TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_P3TSEL0 : bit absolute CCPTMRS2.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + MD1CON0 : byte absolute $0315; + MD1CON1 : byte absolute $0316; + MD1SRC : byte absolute $0317; + MD1CARL : byte absolute $0318; + MD1CARH : byte absolute $0319; + MD2CON0 : byte absolute $031B; + MD2CON1 : byte absolute $031C; + MD2SRC : byte absolute $031D; + MD2CARL : byte absolute $031E; + MD2CARH : byte absolute $031F; + INLVLA : byte absolute $038C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVB3 : bit absolute INLVLB.3; + INLVLB_INLVB2 : bit absolute INLVLB.2; + INLVLB_INLVB1 : bit absolute INLVLB.1; + INLVLB_INLVB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVE : byte absolute $0390; + INLVE_INLVE3 : bit absolute INLVE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + HIDRVB_HIDB0 : bit absolute HIDRVB.0; + TMR5L : byte absolute $040F; + TMR5H : byte absolute $0410; + T5CON : byte absolute $0411; + T5GCON : byte absolute $0412; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4CON_CKPS2 : bit absolute T4CON.6; + T4CON_OUTPS3 : bit absolute T4CON.3; + T4CON_OUTPS2 : bit absolute T4CON.2; + T4CON_OUTPS1 : bit absolute T4CON.1; + T4CON_OUTPS0 : bit absolute T4CON.0; + T4HLT : byte absolute $0416; + T4HLT_PSYNC : bit absolute T4HLT.7; + T4HLT_CKPOL : bit absolute T4HLT.6; + T4HLT_CKSYNC : bit absolute T4HLT.5; + T4HLT_MODE4 : bit absolute T4HLT.4; + T4CLKCON : byte absolute $0417; + T4CLKCON_CS3 : bit absolute T4CLKCON.3; + T4CLKCON_CS2 : bit absolute T4CLKCON.2; + T4RST : byte absolute $0418; + T4RST_RSEL4 : bit absolute T4RST.4; + T4RST_RSEL3 : bit absolute T4RST.3; + T4RST_RSEL2 : bit absolute T4RST.2; + T4RST_RSEL1 : bit absolute T4RST.1; + T4RST_RSEL0 : bit absolute T4RST.0; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + ADRESL : byte absolute $048E; + ADRESH : byte absolute $048F; + ADCON0 : byte absolute $0490; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $0491; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $0492; + ADCON2_TRIGSEL5 : bit absolute ADCON2.5; + ADCON2_TRIGSEL4 : bit absolute ADCON2.4; + ADCON2_TRIGSEL3 : bit absolute ADCON2.3; + ADCON2_TRIGSEL2 : bit absolute ADCON2.2; + ADCON2_TRIGSEL1 : bit absolute ADCON2.1; + ADCON2_TRIGSEL0 : bit absolute ADCON2.0; + T2TMR : byte absolute $0493; + T2PR : byte absolute $0494; + T2CON : byte absolute $0495; + T2HLT : byte absolute $0496; + T2CLKCON : byte absolute $0497; + T2RST : byte absolute $0498; + T8TMR : byte absolute $049A; + T8PR : byte absolute $049B; + T8CON : byte absolute $049C; + T8HLT : byte absolute $049D; + T8CLKCON : byte absolute $049E; + T8RST : byte absolute $049F; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + OPA3NCHS : byte absolute $0517; + OPA3PCHS : byte absolute $0518; + OPA3CON : byte absolute $0519; + OPA3CON_SP : bit absolute OPA3CON.6; + OPA3ORS : byte absolute $051A; + DACLD : byte absolute $058D; + DACLD_DAC5LD : bit absolute DACLD.4; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $058E; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $058F; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0590; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0591; + DAC2REFL : byte absolute $0592; + DAC2REFH : byte absolute $0593; + DAC3CON0 : byte absolute $0594; + DAC3REF : byte absolute $0595; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0596; + DAC4REF : byte absolute $0597; + DAC5CON0 : byte absolute $0598; + DAC5REFL : byte absolute $0599; + DAC5REFH : byte absolute $059A; + DAC7CON0 : byte absolute $059E; + DAC7REF : byte absolute $059F; + PWM3DCL : byte absolute $0614; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0615; + PWM3CON : byte absolute $0616; + PWM4DCL : byte absolute $0617; + PWM4DCH : byte absolute $0618; + PWM4CON : byte absolute $0619; + PWM9DCL : byte absolute $061A; + PWM9DCH : byte absolute $061B; + PWM9CON : byte absolute $061C; + PWM9CON_OE : bit absolute PWM9CON.6; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $078E; + PRG1FTSS : byte absolute $078F; + PRG1INS : byte absolute $0790; + PRG1CON0 : byte absolute $0791; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON1 : byte absolute $0792; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0793; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PRG2RTSS : byte absolute $0794; + PRG2FTSS : byte absolute $0795; + PRG2INS : byte absolute $0796; + PRG2CON0 : byte absolute $0797; + PRG2CON1 : byte absolute $0798; + PRG2CON2 : byte absolute $0799; + PRG3RTSS : byte absolute $079A; + PRG3FTSS : byte absolute $079B; + PRG3INS : byte absolute $079C; + PRG3CON0 : byte absolute $079D; + PRG3CON1 : byte absolute $079E; + PRG3CON2 : byte absolute $079F; + COG3PHR : byte absolute $080D; + COG3PHF : byte absolute $080E; + COG3BLKR : byte absolute $080F; + COG3BLKF : byte absolute $0810; + COG3DBR : byte absolute $0811; + COG3DBF : byte absolute $0812; + COG3CON0 : byte absolute $0813; + COG3CON1 : byte absolute $0814; + COG3RIS0 : byte absolute $0815; + COG3RIS1 : byte absolute $0816; + COG3RSIM0 : byte absolute $0817; + COG3RSIM1 : byte absolute $0818; + COG3FIS0 : byte absolute $0819; + COG3FIS1 : byte absolute $081A; + COG3FSIM0 : byte absolute $081B; + COG3FSIM1 : byte absolute $081C; + COG3ASD0 : byte absolute $081D; + COG3ASD1 : byte absolute $081E; + COG3STR : byte absolute $081F; + CM4CON0 : byte absolute $090C; + CM4CON1 : byte absolute $090D; + CM4NSEL : byte absolute $090E; + CM4PSEL : byte absolute $090F; + CM5CON0 : byte absolute $0910; + CM5CON1 : byte absolute $0911; + CM5NSEL : byte absolute $0912; + CM5PSEL : byte absolute $0913; + CM6CON0 : byte absolute $0914; + CM6CON1 : byte absolute $0915; + CM6NSEL : byte absolute $0916; + CM6PSEL : byte absolute $0917; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM11EN : bit absolute PWMEN.2; + PWMEN_MPWM6EN : bit absolute PWMEN.1; + PWMEN_MPWM5EN : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM11LD : bit absolute PWMLD.2; + PWMLD_MPWM6LD : bit absolute PWMLD.1; + PWMLD_MPWM5LD : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM11OUT : bit absolute PWMOUT.2; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.1; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.0; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PWM11PHL : byte absolute $0DB1; + PWM11PHH : byte absolute $0DB2; + PWM11DCL : byte absolute $0DB3; + PWM11DCH : byte absolute $0DB4; + PWM11PRL : byte absolute $0DB5; + PWM11PRH : byte absolute $0DB6; + PWM11OFL : byte absolute $0DB7; + PWM11OFH : byte absolute $0DB8; + PWM11TMRL : byte absolute $0DB9; + PWM11TMRH : byte absolute $0DBA; + PWM11CON : byte absolute $0DBB; + PWM11INTE : byte absolute $0DBC; + PWM11INTF : byte absolute $0DBD; + PWM11CLKCON : byte absolute $0DBE; + PWM11LDCON : byte absolute $0DBF; + PWM11OFCON : byte absolute $0DC0; + PPSLOCK : byte absolute $0E0C; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E0D; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E0E; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E0F; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E10; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E11; + T3CKIPPS_T3CKIPPS5 : bit absolute T3CKIPPS.5; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E12; + T3GPPS_T3GPPS5 : bit absolute T3GPPS.5; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E13; + T5CKIPPS_T5CKIPPS5 : bit absolute T5CKIPPS.5; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E14; + T5GPPS_T5GPPS5 : bit absolute T5GPPS.5; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $0E15; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $0E16; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $0E17; + T6INPPS_T6INPPS5 : bit absolute T6INPPS.5; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + T8INPPS : byte absolute $0E18; + T8INPPS_T8INPPS5 : bit absolute T8INPPS.5; + T8INPPS_T8INPPS4 : bit absolute T8INPPS.4; + T8INPPS_T8INPPS3 : bit absolute T8INPPS.3; + T8INPPS_T8INPPS2 : bit absolute T8INPPS.2; + T8INPPS_T8INPPS1 : bit absolute T8INPPS.1; + T8INPPS_T8INPPS0 : bit absolute T8INPPS.0; + CCP1PPS : byte absolute $0E19; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E1A; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP7PPS : byte absolute $0E1B; + CCP7PPS_CCP7PPS5 : bit absolute CCP7PPS.5; + CCP7PPS_CCP7PPS4 : bit absolute CCP7PPS.4; + CCP7PPS_CCP7PPS3 : bit absolute CCP7PPS.3; + CCP7PPS_CCP7PPS2 : bit absolute CCP7PPS.2; + CCP7PPS_CCP7PPS1 : bit absolute CCP7PPS.1; + CCP7PPS_CCP7PPS0 : bit absolute CCP7PPS.0; + COG1INPPS : byte absolute $0E1D; + COG1INPPS_COG1INPPS5 : bit absolute COG1INPPS.5; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E1E; + COG2INPPS_COG2INPPS5 : bit absolute COG2INPPS.5; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + COG3INPPS : byte absolute $0E1F; + COG3INPPS_COG3INPPS5 : bit absolute COG3INPPS.5; + COG3INPPS_COG3INPPS4 : bit absolute COG3INPPS.4; + COG3INPPS_COG3INPPS3 : bit absolute COG3INPPS.3; + COG3INPPS_COG3INPPS2 : bit absolute COG3INPPS.2; + COG3INPPS_COG3INPPS1 : bit absolute COG3INPPS.1; + COG3INPPS_COG3INPPS0 : bit absolute COG3INPPS.0; + MD1CLPPS : byte absolute $0E21; + MD1CLPPS_MD1CLPPS5 : bit absolute MD1CLPPS.5; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1CHPPS : byte absolute $0E22; + MD1CHPPS_MD1CHPPS5 : bit absolute MD1CHPPS.5; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1MODPPS : byte absolute $0E23; + MD1MODPPS_MD1MODPPS5 : bit absolute MD1MODPPS.5; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CLPPS : byte absolute $0E24; + MD2CLPPS_MD2CLPPS5 : bit absolute MD2CLPPS.5; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2CHPPS : byte absolute $0E25; + MD2CHPPS_MD2CHPPS5 : bit absolute MD2CHPPS.5; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2MODPPS : byte absolute $0E26; + MD2MODPPS_MD2MODPPS5 : bit absolute MD2MODPPS.5; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + MD3CLPPS : byte absolute $0E27; + MD3CLPPS_MD3CLPPS5 : bit absolute MD3CLPPS.5; + MD3CLPPS_MD3CLPPS4 : bit absolute MD3CLPPS.4; + MD3CLPPS_MD3CLPPS3 : bit absolute MD3CLPPS.3; + MD3CLPPS_MD3CLPPS2 : bit absolute MD3CLPPS.2; + MD3CLPPS_MD3CLPPS1 : bit absolute MD3CLPPS.1; + MD3CLPPS_MD3CLPPS0 : bit absolute MD3CLPPS.0; + MD3CHPPS : byte absolute $0E28; + MD3CHPPS_MD3CHPPS5 : bit absolute MD3CHPPS.5; + MD3CHPPS_MD3CHPPS4 : bit absolute MD3CHPPS.4; + MD3CHPPS_MD3CHPPS3 : bit absolute MD3CHPPS.3; + MD3CHPPS_MD3CHPPS2 : bit absolute MD3CHPPS.2; + MD3CHPPS_MD3CHPPS1 : bit absolute MD3CHPPS.1; + MD3CHPPS_MD3CHPPS0 : bit absolute MD3CHPPS.0; + MD3MODPPS : byte absolute $0E29; + MD3MODPPS_MD3MODPPS5 : bit absolute MD3MODPPS.5; + MD3MODPPS_MD3MODPPS4 : bit absolute MD3MODPPS.4; + MD3MODPPS_MD3MODPPS3 : bit absolute MD3MODPPS.3; + MD3MODPPS_MD3MODPPS2 : bit absolute MD3MODPPS.2; + MD3MODPPS_MD3MODPPS1 : bit absolute MD3MODPPS.1; + MD3MODPPS_MD3MODPPS0 : bit absolute MD3MODPPS.0; + PRG1RPPS : byte absolute $0E2D; + PRG1RPPS_PRG1RPPS5 : bit absolute PRG1RPPS.5; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2E; + PRG1FPPS_PRG1FPPS5 : bit absolute PRG1FPPS.5; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2F; + PRG2RPPS_PRG2RPPS5 : bit absolute PRG2RPPS.5; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E30; + PRG2FPPS_PRG2FPPS5 : bit absolute PRG2FPPS.5; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + PRG3RPPS : byte absolute $0E31; + PRG3RPPS_PRG3RPPS5 : bit absolute PRG3RPPS.5; + PRG3RPPS_PRG3RPPS4 : bit absolute PRG3RPPS.4; + PRG3RPPS_PRG3RPPS3 : bit absolute PRG3RPPS.3; + PRG3RPPS_PRG3RPPS2 : bit absolute PRG3RPPS.2; + PRG3RPPS_PRG3RPPS1 : bit absolute PRG3RPPS.1; + PRG3RPPS_PRG3RPPS0 : bit absolute PRG3RPPS.0; + PRG3FPPS : byte absolute $0E32; + PRG3FPPS_PRG3FPPS5 : bit absolute PRG3FPPS.5; + PRG3FPPS_PRG3FPPS4 : bit absolute PRG3FPPS.4; + PRG3FPPS_PRG3FPPS3 : bit absolute PRG3FPPS.3; + PRG3FPPS_PRG3FPPS2 : bit absolute PRG3FPPS.2; + PRG3FPPS_PRG3FPPS1 : bit absolute PRG3FPPS.1; + PRG3FPPS_PRG3FPPS0 : bit absolute PRG3FPPS.0; + CLCIN0PPS : byte absolute $0E35; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E36; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E37; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E38; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0E39; + ADCACTPPS_ADCACTPPS5 : bit absolute ADCACTPPS.5; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSPCLKPPS : byte absolute $0E3A; + SSPCLKPPS_SSPCLKPPS5 : bit absolute SSPCLKPPS.5; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E3B; + SSPDATPPS_SSPDATPPS5 : bit absolute SSPDATPPS.5; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E3C; + SSPSSPPS_SSPSSPPS5 : bit absolute SSPSSPPS.5; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E3D; + RXPPS_RXPPS5 : bit absolute RXPPS.5; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E3E; + CKPPS_CKPPS5 : bit absolute CKPPS.5; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-09F:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11D:SFR'} // Bank 2 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21B-21F:SFR'} // Bank 4 : MD3CON0, MD3CON1, MD3SRC, MD3CARL, MD3CARH + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-29C:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR7L, CCPR7H, CCP7CON, CCP7CAP + {$SET_STATE_RAM '29E-29F:SFR'} // Bank 5 : CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '315-319:SFR'} // Bank 6 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '40F-418:SFR'} // Bank 8 : TMR5L, TMR5H, T5CON, T5GCON, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '48E-498:SFR'} // Bank 9 : ADRESL, ADRESH, ADCON0, ADCON1, ADCON2, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '49A-49F:SFR'} // Bank 9 : T8TMR, T8PR, T8CON, T8HLT, T8CLKCON, T8RST + {$SET_STATE_RAM '50F-51A:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS, OPA3NCHS, OPA3PCHS, OPA3CON, OPA3ORS + {$SET_STATE_RAM '58D-59A:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF, DAC5CON0, DAC5REFL, DAC5REFH + {$SET_STATE_RAM '59E-59F:SFR'} // Bank 11 : DAC7CON0, DAC7REF + {$SET_STATE_RAM '614-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON, PWM9DCL, PWM9DCH, PWM9CON + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '78E-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2, PRG3RTSS, PRG3FTSS, PRG3INS, PRG3CON0, PRG3CON1, PRG3CON2 + {$SET_STATE_RAM '80D-81F:SFR'} // Bank 16 : COG3PHR, COG3PHF, COG3BLKR, COG3BLKF, COG3DBR, COG3DBF, COG3CON0, COG3CON1, COG3RIS0, COG3RIS1, COG3RSIM0, COG3RSIM1, COG3FIS0, COG3FIS1, COG3FSIM0, COG3FSIM1, COG3ASD0, COG3ASD1, COG3STR + {$SET_STATE_RAM '90C-917:SFR'} // Bank 18 : CM4CON0, CM4CON1, CM4NSEL, CM4PSEL, CM5CON0, CM5CON1, CM5NSEL, CM5PSEL, CM6CON0, CM6CON1, CM6NSEL, CM6PSEL + {$SET_STATE_RAM 'D8E-DC0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON, PWM11PHL, PWM11PHH, PWM11DCL, PWM11DCH, PWM11PRL, PWM11PRH, PWM11OFL, PWM11OFH, PWM11TMRL, PWM11TMRH, PWM11CON, PWM11INTE, PWM11INTF, PWM11CLKCON, PWM11LDCON, PWM11OFCON + {$SET_STATE_RAM 'E0C-E1B:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS, T2INPPS, T4INPPS, T6INPPS, T8INPPS, CCP1PPS, CCP2PPS, CCP7PPS + {$SET_STATE_RAM 'E1D-E1F:SFR'} // Bank 28 : COG1INPPS, COG2INPPS, COG3INPPS + {$SET_STATE_RAM 'E21-E29:SFR'} // Bank 28 : MD1CLPPS, MD1CHPPS, MD1MODPPS, MD2CLPPS, MD2CHPPS, MD2MODPPS, MD3CLPPS, MD3CHPPS, MD3MODPPS + {$SET_STATE_RAM 'E2D-E32:SFR'} // Bank 28 : PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, PRG3RPPS, PRG3FPPS + {$SET_STATE_RAM 'E35-E3E:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, ADCACTPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, RXPPS, CKPPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:7F'} // PIR4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:53'} // PIR5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // PIR6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:7F'} // PIE4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:53'} // PIE5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:07'} // PIE6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:3F'} // CMOUT bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:0F'} // CM1NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:0F'} // CM2NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:0F'} // CM3NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:B1'} // MD3CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:33'} // MD3CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // MD3SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21E:1F'} // MD3CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:1F'} // MD3CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:BF'} // CCP7CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // CCP7CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:3F'} // CCPTMRS2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '315:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:1F'} // MD1CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '319:1F'} // MD1CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:1F'} // MD2CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:1F'} // MD2CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:03'} // HIDRVB bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '491:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '492:3F'} // ADCON2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:0F'} // T8CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:1F'} // T8RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '517:0F'} // OPA3NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:0F'} // OPA3PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:D7'} // OPA3CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:1F'} // OPA3ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58D:13'} // DACLD bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:BF'} // DAC3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:BF'} // DAC4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // DAC7CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '59F:1F'} // DAC7REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM9DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:F0'} // PWM9CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '78E:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '78F:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '790:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '792:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG3RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG3FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG3INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG3CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG3CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:3F'} // COG3PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80E:3F'} // COG3PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80F:3F'} // COG3BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:3F'} // COG3BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:3F'} // COG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:3F'} // COG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:DF'} // COG3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:CF'} // COG3CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:FA'} // COG3RIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:FA'} // COG3RSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:FA'} // COG3FIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:FA'} // COG3FSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:FC'} // COG3ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '90D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:0F'} // CM4NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '910:DF'} // CM5CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:03'} // CM5CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:0F'} // CM5NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:0F'} // CM5PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:DF'} // CM6CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:03'} // CM6CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:0F'} // CM6NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '917:0F'} // CM6PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:07'} // PWMEN bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:07'} // PWMLD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:07'} // PWMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM5LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM5OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM6LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM6OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:BC'} // PWM11CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM11INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM11INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM11CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM11LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM11OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0C:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0D:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0E:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:3F'} // T3CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:3F'} // T3GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:3F'} // T5CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:3F'} // T5GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:3F'} // T6INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:3F'} // T8INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:3F'} // CCP7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:3F'} // COG1INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:3F'} // COG2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:3F'} // COG3INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:3F'} // MD1CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:3F'} // MD1CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:3F'} // MD1MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:3F'} // MD2CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:3F'} // MD2CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:3F'} // MD2MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:3F'} // MD3CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:3F'} // MD3CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:3F'} // MD3MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:3F'} // PRG1RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:3F'} // PRG1FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:3F'} // PRG2RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:3F'} // PRG2FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:3F'} // PRG3RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:3F'} // PRG3FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E36:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E37:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E38:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E39:3F'} // ADCACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3A:3F'} // SSPCLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3B:3F'} // SSPDATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3C:3F'} // SSPSSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3D:3F'} // RXPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3E:3F'} // CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/C5IN0-/C6IN0-/IOCA0/RA0 + // Pin 3 : OPA1OUT/PRG1IN0/PRG2IN1/OPA2IN1+/OPA2IN1-/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/DAC1REF0-/DAC2REF0-/DAC3REF0-/DAC4REF0-/DAC5REF0-/DAC7REF0-/VREF-/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/C5IN0+/C6IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF0+/DAC2REF0+/DAC3REF0+/DAC4REF0+/DAC5REF0+/DAC7REF0+/VREF+/AN3/C1IN1+/IOCA3/RA3 + // Pin 6 : DAC4OUT1/OPA1IN0+/IOCA4/RA4 + // Pin 7 : DAC2OUT1/OPA1IN0-/AN4/IOCA5/RA5 + // Pin 8 : VSS + // Pin 9 : OSC1/CLKIN/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/C6IN1+/IOCA6/RA6 + // Pin 11 : SOSCO/DAC5OUT1/IOCC0/RC0 + // Pin 12 : SOSCI/DAC7OUT1/IOCC1/RC1 + // Pin 13 : AN14/C5IN2-/C6IN2-/IOCC2/RC2 + // Pin 14 : AN15/C1IN4-/C2IN4-/C3IN4-/C4IN4-/C5IN4-/C6IN4-/C7IN4-/C8IN4-/SCL/IOCC3/RC3 + // Pin 15 : AN16/C5IN3-/C6IN3-/SDA/IOCC4/RC4 + // Pin 16 : OPA3IN0+/AN17/IOCC5/RC5 + // Pin 17 : OPA3OUT/SLMP3IN0/AN18/C5IN1-/C6IN1-/IOCC6/RC6 + // Pin 18 : OPA3IN0-/AN19/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : AN12/ZCD/C2IN1+/IOCB0/HIB0/RB0 + // Pin 22 : OPA2OUT/PRG1IN1/OPA1IN1+/OPA1IN1-/PRG2IN0/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/IOCB1/HIB1/RB1 + // Pin 23 : DAC3OUT1/OPA2IN0-/AN8/IOCB2/RB2 + // Pin 24 : OPA2IN0+/AN9/C1IN2-/C2IN2-/C3IN2-/IOCB3/RB3 + // Pin 25 : AN11/C3IN1+/IOCB4/RB4 + // Pin 26 : DAC5REF1-/DAC7REF1-/AN13/C4IN2-/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/DAC5REF1+/DAC7REF1+/C4IN1+/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/DAC2OUT2/DAC5OUT2/DAC3OUT2/DAC4OUT2/DAC7OUT2/C5IN1+/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1776.pas b/devices17/PIC16F1776.pas new file mode 100644 index 00000000..e95ffee1 --- /dev/null +++ b/devices17/PIC16F1776.pas @@ -0,0 +1,2515 @@ +unit PIC16F1776; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1776'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_COG1IF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COG2IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR8IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + PIR5 : byte absolute $0015; + PIR5_CCP7IF : bit absolute PIR5.6; + PIR5_COG3IF : bit absolute PIR5.4; + PIR5_C6IF : bit absolute PIR5.1; + PIR5_C5IF : bit absolute PIR5.0; + PIR6 : byte absolute $0016; + PIR6_PWM11IF : bit absolute PIR6.2; + PIR6_PWM6IF : bit absolute PIR6.1; + PIR6_PWM5IF : bit absolute PIR6.0; + TMR0 : byte absolute $0017; + TMR1L : byte absolute $0018; + TMR1H : byte absolute $0019; + T1CON : byte absolute $001A; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $001B; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + TMR3L : byte absolute $001C; + TMR3H : byte absolute $001D; + T3CON : byte absolute $001E; + T3GCON : byte absolute $001F; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_COGIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COG2IE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR8IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + PIE5 : byte absolute $0095; + PIE5_CCP7IE : bit absolute PIE5.6; + PIE5_COG3IE : bit absolute PIE5.4; + PIE5_C6IE : bit absolute PIE5.1; + PIE5_C5IE : bit absolute PIE5.0; + PIE6 : byte absolute $0096; + PIE6_PWM11IE : bit absolute PIE6.2; + PIE6_PWM6IE : bit absolute PIE6.1; + PIE6_PWM5IE : bit absolute PIE6.0; + OPTION_REG : byte absolute $0097; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0098; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0099; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $009A; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $009B; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009C; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + BORCON : byte absolute $009D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $009E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $009F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $0111; + CMOUT_MC6OUT : bit absolute CMOUT.5; + CMOUT_MC5OUT : bit absolute CMOUT.4; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0112; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0113; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0114; + CM1NSEL_NCH3 : bit absolute CM1NSEL.3; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0115; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0116; + CM2CON1 : byte absolute $0117; + CM2NSEL : byte absolute $0118; + CM2PSEL : byte absolute $0119; + CM3CON0 : byte absolute $011A; + CM3CON1 : byte absolute $011B; + CM3NSEL : byte absolute $011C; + CM3PSEL : byte absolute $011D; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + MD3CON0 : byte absolute $021B; + MD3CON0_EN : bit absolute MD3CON0.7; + MD3CON0_OPOL : bit absolute MD3CON0.4; + MD3CON0_BIT : bit absolute MD3CON0.0; + MD3CON1 : byte absolute $021C; + MD3CON1_CHPOL : bit absolute MD3CON1.5; + MD3CON1_CHSYNC : bit absolute MD3CON1.4; + MD3CON1_CLPOL : bit absolute MD3CON1.1; + MD3CON1_CLSYNC : bit absolute MD3CON1.0; + MD3SRC : byte absolute $021D; + MD3SRC_MS4 : bit absolute MD3SRC.4; + MD3SRC_MS3 : bit absolute MD3SRC.3; + MD3SRC_MS2 : bit absolute MD3SRC.2; + MD3SRC_MS1 : bit absolute MD3SRC.1; + MD3SRC_MS0 : bit absolute MD3SRC.0; + MD3CARL : byte absolute $021E; + MD3CARL_CL4 : bit absolute MD3CARL.4; + MD3CARL_CL3 : bit absolute MD3CARL.3; + MD3CARL_CL2 : bit absolute MD3CARL.2; + MD3CARL_CL1 : bit absolute MD3CARL.1; + MD3CARL_CL0 : bit absolute MD3CARL.0; + MD3CARH : byte absolute $021F; + MD3CARH_CH4 : bit absolute MD3CARH.4; + MD3CARH_CH3 : bit absolute MD3CARH.3; + MD3CARH_CH2 : bit absolute MD3CARH.2; + MD3CARH_CH1 : bit absolute MD3CARH.1; + MD3CARH_CH0 : bit absolute MD3CARH.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CON_MODE3 : bit absolute CCP1CON.3; + CCP1CON_MODE2 : bit absolute CCP1CON.2; + CCP1CON_MODE1 : bit absolute CCP1CON.1; + CCP1CON_MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CAP : byte absolute $0298; + CCPR7L : byte absolute $0299; + CCPR7H : byte absolute $029A; + CCP7CON : byte absolute $029B; + CCP7CAP : byte absolute $029C; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C2TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C2TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C1TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C1TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_P9TSEL1 : bit absolute CCPTMRS2.5; + CCPTMRS2_P9TSEL0 : bit absolute CCPTMRS2.4; + CCPTMRS2_P4TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_P4TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_P3TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_P3TSEL0 : bit absolute CCPTMRS2.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + MD1CON0 : byte absolute $0315; + MD1CON1 : byte absolute $0316; + MD1SRC : byte absolute $0317; + MD1CARL : byte absolute $0318; + MD1CARH : byte absolute $0319; + MD2CON0 : byte absolute $031B; + MD2CON1 : byte absolute $031C; + MD2SRC : byte absolute $031D; + MD2CARL : byte absolute $031E; + MD2CARH : byte absolute $031F; + INLVLA : byte absolute $038C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVB3 : bit absolute INLVLB.3; + INLVLB_INLVB2 : bit absolute INLVLB.2; + INLVLB_INLVB1 : bit absolute INLVLB.1; + INLVLB_INLVB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVE : byte absolute $0390; + INLVE_INLVE3 : bit absolute INLVE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + HIDRVB_HIDB0 : bit absolute HIDRVB.0; + TMR5L : byte absolute $040F; + TMR5H : byte absolute $0410; + T5CON : byte absolute $0411; + T5GCON : byte absolute $0412; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4CON_CKPS2 : bit absolute T4CON.6; + T4CON_OUTPS3 : bit absolute T4CON.3; + T4CON_OUTPS2 : bit absolute T4CON.2; + T4CON_OUTPS1 : bit absolute T4CON.1; + T4CON_OUTPS0 : bit absolute T4CON.0; + T4HLT : byte absolute $0416; + T4HLT_PSYNC : bit absolute T4HLT.7; + T4HLT_CKPOL : bit absolute T4HLT.6; + T4HLT_CKSYNC : bit absolute T4HLT.5; + T4HLT_MODE4 : bit absolute T4HLT.4; + T4CLKCON : byte absolute $0417; + T4CLKCON_CS3 : bit absolute T4CLKCON.3; + T4CLKCON_CS2 : bit absolute T4CLKCON.2; + T4RST : byte absolute $0418; + T4RST_RSEL4 : bit absolute T4RST.4; + T4RST_RSEL3 : bit absolute T4RST.3; + T4RST_RSEL2 : bit absolute T4RST.2; + T4RST_RSEL1 : bit absolute T4RST.1; + T4RST_RSEL0 : bit absolute T4RST.0; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + ADRESL : byte absolute $048E; + ADRESH : byte absolute $048F; + ADCON0 : byte absolute $0490; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $0491; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $0492; + ADCON2_TRIGSEL5 : bit absolute ADCON2.5; + ADCON2_TRIGSEL4 : bit absolute ADCON2.4; + ADCON2_TRIGSEL3 : bit absolute ADCON2.3; + ADCON2_TRIGSEL2 : bit absolute ADCON2.2; + ADCON2_TRIGSEL1 : bit absolute ADCON2.1; + ADCON2_TRIGSEL0 : bit absolute ADCON2.0; + T2TMR : byte absolute $0493; + T2PR : byte absolute $0494; + T2CON : byte absolute $0495; + T2HLT : byte absolute $0496; + T2CLKCON : byte absolute $0497; + T2RST : byte absolute $0498; + T8TMR : byte absolute $049A; + T8PR : byte absolute $049B; + T8CON : byte absolute $049C; + T8HLT : byte absolute $049D; + T8CLKCON : byte absolute $049E; + T8RST : byte absolute $049F; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + OPA3NCHS : byte absolute $0517; + OPA3PCHS : byte absolute $0518; + OPA3CON : byte absolute $0519; + OPA3CON_SP : bit absolute OPA3CON.6; + OPA3ORS : byte absolute $051A; + DACLD : byte absolute $058D; + DACLD_DAC5LD : bit absolute DACLD.4; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $058E; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $058F; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0590; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0591; + DAC2REFL : byte absolute $0592; + DAC2REFH : byte absolute $0593; + DAC3CON0 : byte absolute $0594; + DAC3REF : byte absolute $0595; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0596; + DAC4REF : byte absolute $0597; + DAC5CON0 : byte absolute $0598; + DAC5REFL : byte absolute $0599; + DAC5REFH : byte absolute $059A; + DAC7CON0 : byte absolute $059E; + DAC7REF : byte absolute $059F; + PWM3DCL : byte absolute $0614; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0615; + PWM3CON : byte absolute $0616; + PWM4DCL : byte absolute $0617; + PWM4DCH : byte absolute $0618; + PWM4CON : byte absolute $0619; + PWM9DCL : byte absolute $061A; + PWM9DCH : byte absolute $061B; + PWM9CON : byte absolute $061C; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $078E; + PRG1FTSS : byte absolute $078F; + PRG1INS : byte absolute $0790; + PRG1CON0 : byte absolute $0791; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON1 : byte absolute $0792; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0793; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PRG2RTSS : byte absolute $0794; + PRG2FTSS : byte absolute $0795; + PRG2INS : byte absolute $0796; + PRG2CON0 : byte absolute $0797; + PRG2CON1 : byte absolute $0798; + PRG2CON2 : byte absolute $0799; + PRG3RTSS : byte absolute $079A; + PRG3FTSS : byte absolute $079B; + PRG3INS : byte absolute $079C; + PRG3CON0 : byte absolute $079D; + PRG3CON1 : byte absolute $079E; + PRG3CON2 : byte absolute $079F; + COG3PHR : byte absolute $080D; + COG3PHF : byte absolute $080E; + COG3BLKR : byte absolute $080F; + COG3BLKF : byte absolute $0810; + COG3DBR : byte absolute $0811; + COG3DBF : byte absolute $0812; + COG3CON0 : byte absolute $0813; + COG3CON1 : byte absolute $0814; + COG3RIS0 : byte absolute $0815; + COG3RIS1 : byte absolute $0816; + COG3RSIM0 : byte absolute $0817; + COG3RSIM1 : byte absolute $0818; + COG3FIS0 : byte absolute $0819; + COG3FIS1 : byte absolute $081A; + COG3FSIM0 : byte absolute $081B; + COG3FSIM1 : byte absolute $081C; + COG3ASD0 : byte absolute $081D; + COG3ASD1 : byte absolute $081E; + COG3STR : byte absolute $081F; + CM4CON0 : byte absolute $090C; + CM4CON1 : byte absolute $090D; + CM4NSEL : byte absolute $090E; + CM4PSEL : byte absolute $090F; + CM5CON0 : byte absolute $0910; + CM5CON1 : byte absolute $0911; + CM5NSEL : byte absolute $0912; + CM5PSEL : byte absolute $0913; + CM6CON0 : byte absolute $0914; + CM6CON1 : byte absolute $0915; + CM6NSEL : byte absolute $0916; + CM6PSEL : byte absolute $0917; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM11EN : bit absolute PWMEN.2; + PWMEN_MPWM6EN : bit absolute PWMEN.1; + PWMEN_MPWM5EN : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM11LD : bit absolute PWMLD.2; + PWMLD_MPWM6LD : bit absolute PWMLD.1; + PWMLD_MPWM5LD : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM11OUT : bit absolute PWMOUT.2; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.1; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.0; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PWM11PHL : byte absolute $0DB1; + PWM11PHH : byte absolute $0DB2; + PWM11DCL : byte absolute $0DB3; + PWM11DCH : byte absolute $0DB4; + PWM11PRL : byte absolute $0DB5; + PWM11PRH : byte absolute $0DB6; + PWM11OFL : byte absolute $0DB7; + PWM11OFH : byte absolute $0DB8; + PWM11TMRL : byte absolute $0DB9; + PWM11TMRH : byte absolute $0DBA; + PWM11CON : byte absolute $0DBB; + PWM11INTE : byte absolute $0DBC; + PWM11INTF : byte absolute $0DBD; + PWM11CLKCON : byte absolute $0DBE; + PWM11LDCON : byte absolute $0DBF; + PWM11OFCON : byte absolute $0DC0; + PPSLOCK : byte absolute $0E0C; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E0D; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E0E; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E0F; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E10; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E11; + T3CKIPPS_T3CKIPPS5 : bit absolute T3CKIPPS.5; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E12; + T3GPPS_T3GPPS5 : bit absolute T3GPPS.5; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E13; + T5CKIPPS_T5CKIPPS5 : bit absolute T5CKIPPS.5; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E14; + T5GPPS_T5GPPS5 : bit absolute T5GPPS.5; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $0E15; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $0E16; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $0E17; + T6INPPS_T6INPPS5 : bit absolute T6INPPS.5; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + T8INPPS : byte absolute $0E18; + T8INPPS_T8INPPS5 : bit absolute T8INPPS.5; + T8INPPS_T8INPPS4 : bit absolute T8INPPS.4; + T8INPPS_T8INPPS3 : bit absolute T8INPPS.3; + T8INPPS_T8INPPS2 : bit absolute T8INPPS.2; + T8INPPS_T8INPPS1 : bit absolute T8INPPS.1; + T8INPPS_T8INPPS0 : bit absolute T8INPPS.0; + CCP1PPS : byte absolute $0E19; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E1A; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP7PPS : byte absolute $0E1B; + CCP7PPS_CCP7PPS5 : bit absolute CCP7PPS.5; + CCP7PPS_CCP7PPS4 : bit absolute CCP7PPS.4; + CCP7PPS_CCP7PPS3 : bit absolute CCP7PPS.3; + CCP7PPS_CCP7PPS2 : bit absolute CCP7PPS.2; + CCP7PPS_CCP7PPS1 : bit absolute CCP7PPS.1; + CCP7PPS_CCP7PPS0 : bit absolute CCP7PPS.0; + COG1INPPS : byte absolute $0E1D; + COG1INPPS_COG1INPPS5 : bit absolute COG1INPPS.5; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E1E; + COG2INPPS_COG2INPPS5 : bit absolute COG2INPPS.5; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + COG3INPPS : byte absolute $0E1F; + COG3INPPS_COG3INPPS5 : bit absolute COG3INPPS.5; + COG3INPPS_COG3INPPS4 : bit absolute COG3INPPS.4; + COG3INPPS_COG3INPPS3 : bit absolute COG3INPPS.3; + COG3INPPS_COG3INPPS2 : bit absolute COG3INPPS.2; + COG3INPPS_COG3INPPS1 : bit absolute COG3INPPS.1; + COG3INPPS_COG3INPPS0 : bit absolute COG3INPPS.0; + MD1CLPPS : byte absolute $0E21; + MD1CLPPS_MD1CLPPS5 : bit absolute MD1CLPPS.5; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1CHPPS : byte absolute $0E22; + MD1CHPPS_MD1CHPPS5 : bit absolute MD1CHPPS.5; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1MODPPS : byte absolute $0E23; + MD1MODPPS_MD1MODPPS5 : bit absolute MD1MODPPS.5; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CLPPS : byte absolute $0E24; + MD2CLPPS_MD2CLPPS5 : bit absolute MD2CLPPS.5; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2CHPPS : byte absolute $0E25; + MD2CHPPS_MD2CHPPS5 : bit absolute MD2CHPPS.5; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2MODPPS : byte absolute $0E26; + MD2MODPPS_MD2MODPPS5 : bit absolute MD2MODPPS.5; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + MD3CLPPS : byte absolute $0E27; + MD3CLPPS_MD3CLPPS5 : bit absolute MD3CLPPS.5; + MD3CLPPS_MD3CLPPS4 : bit absolute MD3CLPPS.4; + MD3CLPPS_MD3CLPPS3 : bit absolute MD3CLPPS.3; + MD3CLPPS_MD3CLPPS2 : bit absolute MD3CLPPS.2; + MD3CLPPS_MD3CLPPS1 : bit absolute MD3CLPPS.1; + MD3CLPPS_MD3CLPPS0 : bit absolute MD3CLPPS.0; + MD3CHPPS : byte absolute $0E28; + MD3CHPPS_MD3CHPPS5 : bit absolute MD3CHPPS.5; + MD3CHPPS_MD3CHPPS4 : bit absolute MD3CHPPS.4; + MD3CHPPS_MD3CHPPS3 : bit absolute MD3CHPPS.3; + MD3CHPPS_MD3CHPPS2 : bit absolute MD3CHPPS.2; + MD3CHPPS_MD3CHPPS1 : bit absolute MD3CHPPS.1; + MD3CHPPS_MD3CHPPS0 : bit absolute MD3CHPPS.0; + MD3MODPPS : byte absolute $0E29; + MD3MODPPS_MD3MODPPS5 : bit absolute MD3MODPPS.5; + MD3MODPPS_MD3MODPPS4 : bit absolute MD3MODPPS.4; + MD3MODPPS_MD3MODPPS3 : bit absolute MD3MODPPS.3; + MD3MODPPS_MD3MODPPS2 : bit absolute MD3MODPPS.2; + MD3MODPPS_MD3MODPPS1 : bit absolute MD3MODPPS.1; + MD3MODPPS_MD3MODPPS0 : bit absolute MD3MODPPS.0; + PRG1RPPS : byte absolute $0E2D; + PRG1RPPS_PRG1RPPS5 : bit absolute PRG1RPPS.5; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2E; + PRG1FPPS_PRG1FPPS5 : bit absolute PRG1FPPS.5; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2F; + PRG2RPPS_PRG2RPPS5 : bit absolute PRG2RPPS.5; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E30; + PRG2FPPS_PRG2FPPS5 : bit absolute PRG2FPPS.5; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + PRG3RPPS : byte absolute $0E31; + PRG3RPPS_PRG3RPPS5 : bit absolute PRG3RPPS.5; + PRG3RPPS_PRG3RPPS4 : bit absolute PRG3RPPS.4; + PRG3RPPS_PRG3RPPS3 : bit absolute PRG3RPPS.3; + PRG3RPPS_PRG3RPPS2 : bit absolute PRG3RPPS.2; + PRG3RPPS_PRG3RPPS1 : bit absolute PRG3RPPS.1; + PRG3RPPS_PRG3RPPS0 : bit absolute PRG3RPPS.0; + PRG3FPPS : byte absolute $0E32; + PRG3FPPS_PRG3FPPS5 : bit absolute PRG3FPPS.5; + PRG3FPPS_PRG3FPPS4 : bit absolute PRG3FPPS.4; + PRG3FPPS_PRG3FPPS3 : bit absolute PRG3FPPS.3; + PRG3FPPS_PRG3FPPS2 : bit absolute PRG3FPPS.2; + PRG3FPPS_PRG3FPPS1 : bit absolute PRG3FPPS.1; + PRG3FPPS_PRG3FPPS0 : bit absolute PRG3FPPS.0; + CLCIN0PPS : byte absolute $0E35; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E36; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E37; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E38; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0E39; + ADCACTPPS_ADCACTPPS5 : bit absolute ADCACTPPS.5; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSPCLKPPS : byte absolute $0E3A; + SSPCLKPPS_SSPCLKPPS5 : bit absolute SSPCLKPPS.5; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E3B; + SSPDATPPS_SSPDATPPS5 : bit absolute SSPDATPPS.5; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E3C; + SSPSSPPS_SSPSSPPS5 : bit absolute SSPSSPPS.5; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E3D; + RXPPS_RXPPS5 : bit absolute RXPPS.5; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E3E; + CKPPS_CKPPS5 : bit absolute CKPPS.5; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-09F:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11D:SFR'} // Bank 2 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21B-21F:SFR'} // Bank 4 : MD3CON0, MD3CON1, MD3SRC, MD3CARL, MD3CARH + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-29C:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR7L, CCPR7H, CCP7CON, CCP7CAP + {$SET_STATE_RAM '29E-29F:SFR'} // Bank 5 : CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '315-319:SFR'} // Bank 6 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '40F-418:SFR'} // Bank 8 : TMR5L, TMR5H, T5CON, T5GCON, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48E-498:SFR'} // Bank 9 : ADRESL, ADRESH, ADCON0, ADCON1, ADCON2, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '49A-49F:SFR'} // Bank 9 : T8TMR, T8PR, T8CON, T8HLT, T8CLKCON, T8RST + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-51A:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS, OPA3NCHS, OPA3PCHS, OPA3CON, OPA3ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58D-59A:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF, DAC5CON0, DAC5REFL, DAC5REFH + {$SET_STATE_RAM '59E-59F:SFR'} // Bank 11 : DAC7CON0, DAC7REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '614-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON, PWM9DCL, PWM9DCH, PWM9CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '78E-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2, PRG3RTSS, PRG3FTSS, PRG3INS, PRG3CON0, PRG3CON1, PRG3CON2 + {$SET_STATE_RAM '80D-81F:SFR'} // Bank 16 : COG3PHR, COG3PHF, COG3BLKR, COG3BLKF, COG3DBR, COG3DBF, COG3CON0, COG3CON1, COG3RIS0, COG3RIS1, COG3RSIM0, COG3RSIM1, COG3FIS0, COG3FIS1, COG3FSIM0, COG3FSIM1, COG3ASD0, COG3ASD1, COG3STR + {$SET_STATE_RAM '90C-917:SFR'} // Bank 18 : CM4CON0, CM4CON1, CM4NSEL, CM4PSEL, CM5CON0, CM5CON1, CM5NSEL, CM5PSEL, CM6CON0, CM6CON1, CM6NSEL, CM6PSEL + {$SET_STATE_RAM 'D8E-DC0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON, PWM11PHL, PWM11PHH, PWM11DCL, PWM11DCH, PWM11PRL, PWM11PRH, PWM11OFL, PWM11OFH, PWM11TMRL, PWM11TMRH, PWM11CON, PWM11INTE, PWM11INTF, PWM11CLKCON, PWM11LDCON, PWM11OFCON + {$SET_STATE_RAM 'E0C-E1B:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS, T2INPPS, T4INPPS, T6INPPS, T8INPPS, CCP1PPS, CCP2PPS, CCP7PPS + {$SET_STATE_RAM 'E1D-E1F:SFR'} // Bank 28 : COG1INPPS, COG2INPPS, COG3INPPS + {$SET_STATE_RAM 'E21-E29:SFR'} // Bank 28 : MD1CLPPS, MD1CHPPS, MD1MODPPS, MD2CLPPS, MD2CHPPS, MD2MODPPS, MD3CLPPS, MD3CHPPS, MD3MODPPS + {$SET_STATE_RAM 'E2D-E32:SFR'} // Bank 28 : PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, PRG3RPPS, PRG3FPPS + {$SET_STATE_RAM 'E35-E3E:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, ADCACTPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, RXPPS, CKPPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:7F'} // PIR4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:53'} // PIR5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // PIR6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:7F'} // PIE4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:53'} // PIE5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:07'} // PIE6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:3F'} // CMOUT bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:0F'} // CM1NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:0F'} // CM2NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:0F'} // CM3NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:B1'} // MD3CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:33'} // MD3CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // MD3SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21E:1F'} // MD3CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:1F'} // MD3CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:BF'} // CCP7CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // CCP7CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:3F'} // CCPTMRS2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '315:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:1F'} // MD1CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '319:1F'} // MD1CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:1F'} // MD2CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:1F'} // MD2CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:03'} // HIDRVB bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '491:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '492:3F'} // ADCON2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:0F'} // T8CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:1F'} // T8RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '517:0F'} // OPA3NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:0F'} // OPA3PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:D7'} // OPA3CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:1F'} // OPA3ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58D:13'} // DACLD bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:BF'} // DAC3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:BF'} // DAC4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // DAC7CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '59F:1F'} // DAC7REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM9DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM9CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '78E:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '78F:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '790:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '792:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG3RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG3FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG3INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG3CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG3CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:3F'} // COG3PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80E:3F'} // COG3PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80F:3F'} // COG3BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:3F'} // COG3BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:3F'} // COG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:3F'} // COG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:DF'} // COG3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:CF'} // COG3CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:FA'} // COG3RIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:FA'} // COG3RSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:FA'} // COG3FIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:FA'} // COG3FSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:FC'} // COG3ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '90D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:0F'} // CM4NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '910:DF'} // CM5CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:03'} // CM5CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:0F'} // CM5NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:0F'} // CM5PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:DF'} // CM6CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:03'} // CM6CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:0F'} // CM6NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '917:0F'} // CM6PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:07'} // PWMEN bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:07'} // PWMLD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:07'} // PWMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM5LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM5OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM6LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM6OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:BC'} // PWM11CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM11INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM11INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM11CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM11LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM11OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0C:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0D:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0E:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:3F'} // T3CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:3F'} // T3GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:3F'} // T5CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:3F'} // T5GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:3F'} // T6INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:3F'} // T8INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:3F'} // CCP7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:3F'} // COG1INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:3F'} // COG2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:3F'} // COG3INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:3F'} // MD1CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:3F'} // MD1CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:3F'} // MD1MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:3F'} // MD2CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:3F'} // MD2CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:3F'} // MD2MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:3F'} // MD3CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:3F'} // MD3CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:3F'} // MD3MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:3F'} // PRG1RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:3F'} // PRG1FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:3F'} // PRG2RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:3F'} // PRG2FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:3F'} // PRG3RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:3F'} // PRG3FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E36:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E37:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E38:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E39:3F'} // ADCACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3A:3F'} // SSPCLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3B:3F'} // SSPDATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3C:3F'} // SSPSSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3D:3F'} // RXPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3E:3F'} // CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/C5IN0-/C6IN0-/IOCA0/RA0 + // Pin 2 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 3 : OPA1OUT/PRG1IN0/PRG2IN1/OPA2IN1+/OPA2IN1-/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/DAC1REF0-/DAC2REF0-/DAC3REF0-/DAC4REF0-/DAC5REF0-/DAC7REF0-/VREF-/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/C5IN0+/C6IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF0+/DAC2REF0+/DAC3REF0+/DAC4REF0+/DAC5REF0+/DAC7REF0+/VREF+/AN3/C1IN1+/IOCA3/RA3 + // Pin 6 : DAC4OUT1/OPA1IN0+/IOCA4/RA4 + // Pin 7 : DAC2OUT1/OPA1IN0-/AN4/IOCA5/RA5 + // Pin 8 : VSS + // Pin 9 : OSC1/CLKIN/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/C6IN1+/IOCA6/RA6 + // Pin 11 : SOSCO/DAC5OUT1/IOCC0/RC0 + // Pin 12 : SOSCI/DAC7OUT1/IOCC1/RC1 + // Pin 13 : AN14/C5IN2-/C6IN2-/IOCC2/RC2 + // Pin 14 : AN15/C1IN4-/C2IN4-/C3IN4-/C4IN4-/C5IN4-/C6IN4-/C7IN4-/C8IN4-/SCL/IOCC3/RC3 + // Pin 15 : AN16/C5IN3-/C6IN3-/SDA/IOCC4/RC4 + // Pin 16 : OPA3IN0+/AN17/IOCC5/RC5 + // Pin 17 : OPA3OUT/SLMP3IN0/AN18/C5IN1-/C6IN1-/IOCC6/RC6 + // Pin 18 : OPA3IN0-/AN19/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : AN12/ZCD/C2IN1+/IOCB0/HIB0/RB0 + // Pin 22 : OPA2OUT/PRG1IN1/OPA1IN1+/OPA1IN1-/PRG2IN0/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/IOCB1/HIB1/RB1 + // Pin 23 : DAC3OUT1/OPA2IN0-/AN8/IOCB2/RB2 + // Pin 24 : OPA2IN0+/AN9/C1IN2-/C2IN2-/C3IN2-/IOCB3/RB3 + // Pin 25 : AN11/C3IN1+/IOCB4/RB4 + // Pin 26 : DAC5REF1-/DAC7REF1-/AN13/C4IN2-/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/DAC5REF1+/DAC7REF1+/C4IN1+/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/DAC2OUT2/DAC5OUT2/DAC3OUT2/DAC4OUT2/DAC7OUT2/C5IN1+/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-2'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1777.pas b/devices17/PIC16F1777.pas new file mode 100644 index 00000000..3f6e0b59 --- /dev/null +++ b/devices17/PIC16F1777.pas @@ -0,0 +1,2897 @@ +unit PIC16F1777; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1777'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_COG1IF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COG2IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR8IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + PIR5 : byte absolute $0015; + PIR5_CCP8IF : bit absolute PIR5.7; + PIR5_CCP7IF : bit absolute PIR5.6; + PIR5_COG4IF : bit absolute PIR5.5; + PIR5_COG3IF : bit absolute PIR5.4; + PIR5_C8IF : bit absolute PIR5.3; + PIR5_C7IF : bit absolute PIR5.2; + PIR5_C6IF : bit absolute PIR5.1; + PIR5_C5IF : bit absolute PIR5.0; + PIR6 : byte absolute $0016; + PIR6_PWM12IF : bit absolute PIR6.3; + PIR6_PWM11IF : bit absolute PIR6.2; + PIR6_PWM6IF : bit absolute PIR6.1; + PIR6_PWM5IF : bit absolute PIR6.0; + TMR0 : byte absolute $0017; + TMR1L : byte absolute $0018; + TMR1H : byte absolute $0019; + T1CON : byte absolute $001A; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $001B; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + TMR3L : byte absolute $001C; + TMR3H : byte absolute $001D; + T3CON : byte absolute $001E; + T3GCON : byte absolute $001F; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_COGIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COG2IE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR8IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + PIE5 : byte absolute $0095; + PIE5_CCP8IE : bit absolute PIE5.7; + PIE5_CCP7IE : bit absolute PIE5.6; + PIE5_COG4IE : bit absolute PIE5.5; + PIE5_COG3IE : bit absolute PIE5.4; + PIE5_C8IE : bit absolute PIE5.3; + PIE5_C7IE : bit absolute PIE5.2; + PIE5_C6IE : bit absolute PIE5.1; + PIE5_C5IE : bit absolute PIE5.0; + PIE6 : byte absolute $0096; + PIE6_PWM12IE : bit absolute PIE6.3; + PIE6_PWM11IE : bit absolute PIE6.2; + PIE6_PWM6IE : bit absolute PIE6.1; + PIE6_PWM5IE : bit absolute PIE6.0; + OPTION_REG : byte absolute $0097; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0098; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0099; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $009A; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $009B; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009C; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + BORCON : byte absolute $009D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $009E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $009F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CMOUT : byte absolute $0111; + CMOUT_MC8OUT : bit absolute CMOUT.7; + CMOUT_MC7OUT : bit absolute CMOUT.6; + CMOUT_MC6OUT : bit absolute CMOUT.5; + CMOUT_MC5OUT : bit absolute CMOUT.4; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0112; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0113; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0114; + CM1NSEL_NCH3 : bit absolute CM1NSEL.3; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0115; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0116; + CM2CON1 : byte absolute $0117; + CM2NSEL : byte absolute $0118; + CM2PSEL : byte absolute $0119; + CM3CON0 : byte absolute $011A; + CM3CON1 : byte absolute $011B; + CM3NSEL : byte absolute $011C; + CM3PSEL : byte absolute $011D; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_reserved : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + MD3CON0 : byte absolute $021B; + MD3CON0_EN : bit absolute MD3CON0.7; + MD3CON0_OPOL : bit absolute MD3CON0.4; + MD3CON0_BIT : bit absolute MD3CON0.0; + MD3CON1 : byte absolute $021C; + MD3CON1_CHPOL : bit absolute MD3CON1.5; + MD3CON1_CHSYNC : bit absolute MD3CON1.4; + MD3CON1_CLPOL : bit absolute MD3CON1.1; + MD3CON1_CLSYNC : bit absolute MD3CON1.0; + MD3SRC : byte absolute $021D; + MD3SRC_MS4 : bit absolute MD3SRC.4; + MD3SRC_MS3 : bit absolute MD3SRC.3; + MD3SRC_MS2 : bit absolute MD3SRC.2; + MD3SRC_MS1 : bit absolute MD3SRC.1; + MD3SRC_MS0 : bit absolute MD3SRC.0; + MD3CARL : byte absolute $021E; + MD3CARL_CL4 : bit absolute MD3CARL.4; + MD3CARL_CL3 : bit absolute MD3CARL.3; + MD3CARL_CL2 : bit absolute MD3CARL.2; + MD3CARL_CL1 : bit absolute MD3CARL.1; + MD3CARL_CL0 : bit absolute MD3CARL.0; + MD3CARH : byte absolute $021F; + MD3CARH_CH4 : bit absolute MD3CARH.4; + MD3CARH_CH3 : bit absolute MD3CARH.3; + MD3CARH_CH2 : bit absolute MD3CARH.2; + MD3CARH_CH1 : bit absolute MD3CARH.1; + MD3CARH_CH0 : bit absolute MD3CARH.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODD7 : bit absolute ODCOND.7; + ODCOND_ODD6 : bit absolute ODCOND.6; + ODCOND_ODD5 : bit absolute ODCOND.5; + ODCOND_ODD4 : bit absolute ODCOND.4; + ODCOND_ODD3 : bit absolute ODCOND.3; + ODCOND_ODD2 : bit absolute ODCOND.2; + ODCOND_ODD1 : bit absolute ODCOND.1; + ODCOND_ODD0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODE2 : bit absolute ODCONE.2; + ODCONE_ODE1 : bit absolute ODCONE.1; + ODCONE_ODE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CON_MODE3 : bit absolute CCP1CON.3; + CCP1CON_MODE2 : bit absolute CCP1CON.2; + CCP1CON_MODE1 : bit absolute CCP1CON.1; + CCP1CON_MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CAP : byte absolute $0298; + CCPR7L : byte absolute $0299; + CCPR7H : byte absolute $029A; + CCP7CON : byte absolute $029B; + CCP7CAP : byte absolute $029C; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C8TSEL1 : bit absolute CCPTMRS1.7; + CCPTMRS1_C8TSEL0 : bit absolute CCPTMRS1.6; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C2TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C2TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C1TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C1TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_P10TSEL1 : bit absolute CCPTMRS2.7; + CCPTMRS2_P10TSEL0 : bit absolute CCPTMRS2.6; + CCPTMRS2_P9TSEL1 : bit absolute CCPTMRS2.5; + CCPTMRS2_P9TSEL0 : bit absolute CCPTMRS2.4; + CCPTMRS2_P4TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_P4TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_P3TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_P3TSEL0 : bit absolute CCPTMRS2.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + CCPR8L : byte absolute $0311; + CCPR8H : byte absolute $0312; + CCP8CON : byte absolute $0313; + CCP8CAP : byte absolute $0314; + MD1CON0 : byte absolute $0315; + MD1CON1 : byte absolute $0316; + MD1SRC : byte absolute $0317; + MD1CARL : byte absolute $0318; + MD1CARH : byte absolute $0319; + MD2CON0 : byte absolute $031B; + MD2CON1 : byte absolute $031C; + MD2SRC : byte absolute $031D; + MD2CARL : byte absolute $031E; + MD2CARH : byte absolute $031F; + INLVLA : byte absolute $038C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVB3 : bit absolute INLVLB.3; + INLVLB_INLVB2 : bit absolute INLVLB.2; + INLVLB_INLVB1 : bit absolute INLVLB.1; + INLVLB_INLVB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVE : byte absolute $0390; + INLVE_INLVE3 : bit absolute INLVE.3; + INLVE_INLVE2 : bit absolute INLVE.2; + INLVE_INLVE1 : bit absolute INLVE.1; + INLVE_INLVE0 : bit absolute INLVE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + HIDRVB_HIDB0 : bit absolute HIDRVB.0; + TMR5L : byte absolute $040F; + TMR5H : byte absolute $0410; + T5CON : byte absolute $0411; + T5GCON : byte absolute $0412; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4CON_CKPS2 : bit absolute T4CON.6; + T4CON_OUTPS3 : bit absolute T4CON.3; + T4CON_OUTPS2 : bit absolute T4CON.2; + T4CON_OUTPS1 : bit absolute T4CON.1; + T4CON_OUTPS0 : bit absolute T4CON.0; + T4HLT : byte absolute $0416; + T4HLT_PSYNC : bit absolute T4HLT.7; + T4HLT_CKPOL : bit absolute T4HLT.6; + T4HLT_CKSYNC : bit absolute T4HLT.5; + T4HLT_MODE4 : bit absolute T4HLT.4; + T4CLKCON : byte absolute $0417; + T4CLKCON_CS3 : bit absolute T4CLKCON.3; + T4CLKCON_CS2 : bit absolute T4CLKCON.2; + T4RST : byte absolute $0418; + T4RST_RSEL4 : bit absolute T4RST.4; + T4RST_RSEL3 : bit absolute T4RST.3; + T4RST_RSEL2 : bit absolute T4RST.2; + T4RST_RSEL1 : bit absolute T4RST.1; + T4RST_RSEL0 : bit absolute T4RST.0; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + ADRESL : byte absolute $048E; + ADRESH : byte absolute $048F; + ADCON0 : byte absolute $0490; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $0491; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $0492; + ADCON2_TRIGSEL5 : bit absolute ADCON2.5; + ADCON2_TRIGSEL4 : bit absolute ADCON2.4; + ADCON2_TRIGSEL3 : bit absolute ADCON2.3; + ADCON2_TRIGSEL2 : bit absolute ADCON2.2; + ADCON2_TRIGSEL1 : bit absolute ADCON2.1; + ADCON2_TRIGSEL0 : bit absolute ADCON2.0; + T2TMR : byte absolute $0493; + T2PR : byte absolute $0494; + T2CON : byte absolute $0495; + T2HLT : byte absolute $0496; + T2CLKCON : byte absolute $0497; + T2RST : byte absolute $0498; + T8TMR : byte absolute $049A; + T8PR : byte absolute $049B; + T8CON : byte absolute $049C; + T8HLT : byte absolute $049D; + T8CLKCON : byte absolute $049E; + T8RST : byte absolute $049F; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + OPA3NCHS : byte absolute $0517; + OPA3PCHS : byte absolute $0518; + OPA3CON : byte absolute $0519; + OPA3CON_SP : bit absolute OPA3CON.6; + OPA3ORS : byte absolute $051A; + OPA4NCHS : byte absolute $051B; + OPA4PCHS : byte absolute $051C; + OPA4CON : byte absolute $051D; + OPA4ORS : byte absolute $051E; + DACLD : byte absolute $058D; + DACLD_DAC6LD : bit absolute DACLD.5; + DACLD_DAC5LD : bit absolute DACLD.4; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $058E; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $058F; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0590; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0591; + DAC2REFL : byte absolute $0592; + DAC2REFH : byte absolute $0593; + DAC3CON0 : byte absolute $0594; + DAC3REF : byte absolute $0595; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0596; + DAC4REF : byte absolute $0597; + DAC5CON0 : byte absolute $0598; + DAC5REFL : byte absolute $0599; + DAC5REFH : byte absolute $059A; + DAC6CON0 : byte absolute $059B; + DAC6REFL : byte absolute $059C; + DAC6REFH : byte absolute $059D; + DAC7CON0 : byte absolute $059E; + DAC7REF : byte absolute $059F; + DAC8CON0 : byte absolute $060C; + DAC8REF : byte absolute $060D; + PRG4RTSS : byte absolute $060E; + PRG4FTSS : byte absolute $060F; + PRG4INS : byte absolute $0610; + PRG4CON0 : byte absolute $0611; + PRG4CON0_FEDG : bit absolute PRG4CON0.5; + PRG4CON0_REDG : bit absolute PRG4CON0.4; + PRG4CON0_OS : bit absolute PRG4CON0.1; + PRG4CON1 : byte absolute $0612; + PRG4CON1_RDY : bit absolute PRG4CON1.2; + PRG4CON1_FPOL : bit absolute PRG4CON1.1; + PRG4CON1_RPOL : bit absolute PRG4CON1.0; + PRG4CON2 : byte absolute $0613; + PRG4CON2_ISET4 : bit absolute PRG4CON2.4; + PRG4CON2_ISET3 : bit absolute PRG4CON2.3; + PRG4CON2_ISET2 : bit absolute PRG4CON2.2; + PRG4CON2_ISET1 : bit absolute PRG4CON2.1; + PRG4CON2_ISET0 : bit absolute PRG4CON2.0; + PWM3DCL : byte absolute $0614; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0615; + PWM3CON : byte absolute $0616; + PWM4DCL : byte absolute $0617; + PWM4DCH : byte absolute $0618; + PWM4CON : byte absolute $0619; + PWM9DCL : byte absolute $061A; + PWM9DCH : byte absolute $061B; + PWM9CON : byte absolute $061C; + PWM10DCL : byte absolute $061D; + PWM10DCH : byte absolute $061E; + PWM10CON : byte absolute $061F; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $078E; + PRG1FTSS : byte absolute $078F; + PRG1INS : byte absolute $0790; + PRG1CON0 : byte absolute $0791; + PRG1CON1 : byte absolute $0792; + PRG1CON2 : byte absolute $0793; + PRG2RTSS : byte absolute $0794; + PRG2FTSS : byte absolute $0795; + PRG2INS : byte absolute $0796; + PRG2CON0 : byte absolute $0797; + PRG2CON1 : byte absolute $0798; + PRG2CON2 : byte absolute $0799; + PRG3RTSS : byte absolute $079A; + PRG3FTSS : byte absolute $079B; + PRG3INS : byte absolute $079C; + PRG3CON0 : byte absolute $079D; + PRG3CON1 : byte absolute $079E; + PRG3CON2 : byte absolute $079F; + COG3PHR : byte absolute $080D; + COG3PHF : byte absolute $080E; + COG3BLKR : byte absolute $080F; + COG3BLKF : byte absolute $0810; + COG3DBR : byte absolute $0811; + COG3DBF : byte absolute $0812; + COG3CON0 : byte absolute $0813; + COG3CON1 : byte absolute $0814; + COG3RIS0 : byte absolute $0815; + COG3RIS1 : byte absolute $0816; + COG3RSIM0 : byte absolute $0817; + COG3RSIM1 : byte absolute $0818; + COG3FIS0 : byte absolute $0819; + COG3FIS1 : byte absolute $081A; + COG3FSIM0 : byte absolute $081B; + COG3FSIM1 : byte absolute $081C; + COG3ASD0 : byte absolute $081D; + COG3ASD1 : byte absolute $081E; + COG3STR : byte absolute $081F; + COG4PHR : byte absolute $088D; + COG4PHF : byte absolute $088E; + COG4BLKR : byte absolute $088F; + COG4BLKF : byte absolute $0890; + COG4DBR : byte absolute $0891; + COG4DBF : byte absolute $0892; + COG4CON0 : byte absolute $0893; + COG4CON1 : byte absolute $0894; + COG4RIS0 : byte absolute $0895; + COG4RIS1 : byte absolute $0896; + COG4RSIM0 : byte absolute $0897; + COG4RSIM1 : byte absolute $0898; + COG4FIS0 : byte absolute $0899; + COG4FIS1 : byte absolute $089A; + COG4FSIM0 : byte absolute $089B; + COG4FSIM1 : byte absolute $089C; + COG4ASD0 : byte absolute $089D; + COG4ASD1 : byte absolute $089E; + COG4STR : byte absolute $089F; + CM4CON0 : byte absolute $090C; + CM4CON1 : byte absolute $090D; + CM4NSEL : byte absolute $090E; + CM4PSEL : byte absolute $090F; + CM5CON0 : byte absolute $0910; + CM5CON1 : byte absolute $0911; + CM5NSEL : byte absolute $0912; + CM5PSEL : byte absolute $0913; + CM6CON0 : byte absolute $0914; + CM6CON1 : byte absolute $0915; + CM6NSEL : byte absolute $0916; + CM6PSEL : byte absolute $0917; + CM7CON0 : byte absolute $0918; + CM7CON1 : byte absolute $0919; + CM7NSEL : byte absolute $091A; + CM7PSEL : byte absolute $091B; + CM8CON0 : byte absolute $091C; + CM8CON1 : byte absolute $091D; + CM8NSEL : byte absolute $091E; + CM8PSEL : byte absolute $091F; + MD4CON0 : byte absolute $0D1B; + MD4CON1 : byte absolute $0D1C; + MD4SRC : byte absolute $0D1D; + MD4CARL : byte absolute $0D1E; + MD4CARH : byte absolute $0D1F; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM12EN : bit absolute PWMEN.3; + PWMEN_MPWM11EN : bit absolute PWMEN.2; + PWMEN_MPWM6EN : bit absolute PWMEN.1; + PWMEN_MPWM5EN : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM12LD : bit absolute PWMLD.3; + PWMLD_MPWM11LD : bit absolute PWMLD.2; + PWMLD_MPWM6LD : bit absolute PWMLD.1; + PWMLD_MPWM5LD : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM12OUT : bit absolute PWMOUT.3; + PWMOUT_MPWM11OUT : bit absolute PWMOUT.2; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.1; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.0; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PWM11PHL : byte absolute $0DB1; + PWM11PHH : byte absolute $0DB2; + PWM11DCL : byte absolute $0DB3; + PWM11DCH : byte absolute $0DB4; + PWM11PRL : byte absolute $0DB5; + PWM11PRH : byte absolute $0DB6; + PWM11OFL : byte absolute $0DB7; + PWM11OFH : byte absolute $0DB8; + PWM11TMRL : byte absolute $0DB9; + PWM11TMRH : byte absolute $0DBA; + PWM11CON : byte absolute $0DBB; + PWM11INTE : byte absolute $0DBC; + PWM11INTF : byte absolute $0DBD; + PWM11CLKCON : byte absolute $0DBE; + PWM11LDCON : byte absolute $0DBF; + PWM11OFCON : byte absolute $0DC0; + PWM12PHL : byte absolute $0DC1; + PWM12PHH : byte absolute $0DC2; + PWM12DCL : byte absolute $0DC3; + PWM12DCH : byte absolute $0DC4; + PWM12PRL : byte absolute $0DC5; + PWM12PRH : byte absolute $0DC6; + PWM12OFL : byte absolute $0DC7; + PWM12OFH : byte absolute $0DC8; + PWM12TMRL : byte absolute $0DC9; + PWM12TMRH : byte absolute $0DCA; + PWM12CON : byte absolute $0DCB; + PWM12INTE : byte absolute $0DCC; + PWM12INTF : byte absolute $0DCD; + PWM12CLKCON : byte absolute $0DCE; + PWM12LDCON : byte absolute $0DCF; + PWM12OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0C; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E0D; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E0E; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E0F; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E10; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E11; + T3CKIPPS_T3CKIPPS5 : bit absolute T3CKIPPS.5; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E12; + T3GPPS_T3GPPS5 : bit absolute T3GPPS.5; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E13; + T5CKIPPS_T5CKIPPS5 : bit absolute T5CKIPPS.5; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E14; + T5GPPS_T5GPPS5 : bit absolute T5GPPS.5; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $0E15; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $0E16; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $0E17; + T6INPPS_T6INPPS5 : bit absolute T6INPPS.5; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + T8INPPS : byte absolute $0E18; + T8INPPS_T8INPPS5 : bit absolute T8INPPS.5; + T8INPPS_T8INPPS4 : bit absolute T8INPPS.4; + T8INPPS_T8INPPS3 : bit absolute T8INPPS.3; + T8INPPS_T8INPPS2 : bit absolute T8INPPS.2; + T8INPPS_T8INPPS1 : bit absolute T8INPPS.1; + T8INPPS_T8INPPS0 : bit absolute T8INPPS.0; + CCP1PPS : byte absolute $0E19; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E1A; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP7PPS : byte absolute $0E1B; + CCP7PPS_CCP7PPS5 : bit absolute CCP7PPS.5; + CCP7PPS_CCP7PPS4 : bit absolute CCP7PPS.4; + CCP7PPS_CCP7PPS3 : bit absolute CCP7PPS.3; + CCP7PPS_CCP7PPS2 : bit absolute CCP7PPS.2; + CCP7PPS_CCP7PPS1 : bit absolute CCP7PPS.1; + CCP7PPS_CCP7PPS0 : bit absolute CCP7PPS.0; + CCP8PPS : byte absolute $0E1C; + CCP8PPS_CCP8PPS5 : bit absolute CCP8PPS.5; + CCP8PPS_CCP8PPS4 : bit absolute CCP8PPS.4; + CCP8PPS_CCP8PPS3 : bit absolute CCP8PPS.3; + CCP8PPS_CCP8PPS2 : bit absolute CCP8PPS.2; + CCP8PPS_CCP8PPS1 : bit absolute CCP8PPS.1; + CCP8PPS_CCP8PPS0 : bit absolute CCP8PPS.0; + COG1INPPS : byte absolute $0E1D; + COG1INPPS_COG1INPPS5 : bit absolute COG1INPPS.5; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E1E; + COG2INPPS_COG2INPPS5 : bit absolute COG2INPPS.5; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + COG3INPPS : byte absolute $0E1F; + COG3INPPS_COG3INPPS5 : bit absolute COG3INPPS.5; + COG3INPPS_COG3INPPS4 : bit absolute COG3INPPS.4; + COG3INPPS_COG3INPPS3 : bit absolute COG3INPPS.3; + COG3INPPS_COG3INPPS2 : bit absolute COG3INPPS.2; + COG3INPPS_COG3INPPS1 : bit absolute COG3INPPS.1; + COG3INPPS_COG3INPPS0 : bit absolute COG3INPPS.0; + COG4INPPS : byte absolute $0E20; + COG4INPPS_COG4INPPS5 : bit absolute COG4INPPS.5; + COG4INPPS_COG4INPPS4 : bit absolute COG4INPPS.4; + COG4INPPS_COG4INPPS3 : bit absolute COG4INPPS.3; + COG4INPPS_COG4INPPS2 : bit absolute COG4INPPS.2; + COG4INPPS_COG4INPPS1 : bit absolute COG4INPPS.1; + COG4INPPS_COG4INPPS0 : bit absolute COG4INPPS.0; + MD1CLPPS : byte absolute $0E21; + MD1CLPPS_MD1CLPPS5 : bit absolute MD1CLPPS.5; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1CHPPS : byte absolute $0E22; + MD1CHPPS_MD1CHPPS5 : bit absolute MD1CHPPS.5; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1MODPPS : byte absolute $0E23; + MD1MODPPS_MD1MODPPS5 : bit absolute MD1MODPPS.5; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CLPPS : byte absolute $0E24; + MD2CLPPS_MD2CLPPS5 : bit absolute MD2CLPPS.5; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2CHPPS : byte absolute $0E25; + MD2CHPPS_MD2CHPPS5 : bit absolute MD2CHPPS.5; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2MODPPS : byte absolute $0E26; + MD2MODPPS_MD2MODPPS5 : bit absolute MD2MODPPS.5; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + MD3CLPPS : byte absolute $0E27; + MD3CLPPS_MD3CLPPS5 : bit absolute MD3CLPPS.5; + MD3CLPPS_MD3CLPPS4 : bit absolute MD3CLPPS.4; + MD3CLPPS_MD3CLPPS3 : bit absolute MD3CLPPS.3; + MD3CLPPS_MD3CLPPS2 : bit absolute MD3CLPPS.2; + MD3CLPPS_MD3CLPPS1 : bit absolute MD3CLPPS.1; + MD3CLPPS_MD3CLPPS0 : bit absolute MD3CLPPS.0; + MD3CHPPS : byte absolute $0E28; + MD3CHPPS_MD3CHPPS5 : bit absolute MD3CHPPS.5; + MD3CHPPS_MD3CHPPS4 : bit absolute MD3CHPPS.4; + MD3CHPPS_MD3CHPPS3 : bit absolute MD3CHPPS.3; + MD3CHPPS_MD3CHPPS2 : bit absolute MD3CHPPS.2; + MD3CHPPS_MD3CHPPS1 : bit absolute MD3CHPPS.1; + MD3CHPPS_MD3CHPPS0 : bit absolute MD3CHPPS.0; + MD3MODPPS : byte absolute $0E29; + MD3MODPPS_MD3MODPPS5 : bit absolute MD3MODPPS.5; + MD3MODPPS_MD3MODPPS4 : bit absolute MD3MODPPS.4; + MD3MODPPS_MD3MODPPS3 : bit absolute MD3MODPPS.3; + MD3MODPPS_MD3MODPPS2 : bit absolute MD3MODPPS.2; + MD3MODPPS_MD3MODPPS1 : bit absolute MD3MODPPS.1; + MD3MODPPS_MD3MODPPS0 : bit absolute MD3MODPPS.0; + MD4CLPPS : byte absolute $0E2A; + MD4CLPPS_MD4CLPPS5 : bit absolute MD4CLPPS.5; + MD4CLPPS_MD4CLPPS4 : bit absolute MD4CLPPS.4; + MD4CLPPS_MD4CLPPS3 : bit absolute MD4CLPPS.3; + MD4CLPPS_MD4CLPPS2 : bit absolute MD4CLPPS.2; + MD4CLPPS_MD4CLPPS1 : bit absolute MD4CLPPS.1; + MD4CLPPS_MD4CLPPS0 : bit absolute MD4CLPPS.0; + MD4CHPPS : byte absolute $0E2B; + MD4CHPPS_MD4CHPPS5 : bit absolute MD4CHPPS.5; + MD4CHPPS_MD4CHPPS4 : bit absolute MD4CHPPS.4; + MD4CHPPS_MD4CHPPS3 : bit absolute MD4CHPPS.3; + MD4CHPPS_MD4CHPPS2 : bit absolute MD4CHPPS.2; + MD4CHPPS_MD4CHPPS1 : bit absolute MD4CHPPS.1; + MD4CHPPS_MD4CHPPS0 : bit absolute MD4CHPPS.0; + MD4MODPPS : byte absolute $0E2C; + MD4MODPPS_MD4MODPPS5 : bit absolute MD4MODPPS.5; + MD4MODPPS_MD4MODPPS4 : bit absolute MD4MODPPS.4; + MD4MODPPS_MD4MODPPS3 : bit absolute MD4MODPPS.3; + MD4MODPPS_MD4MODPPS2 : bit absolute MD4MODPPS.2; + MD4MODPPS_MD4MODPPS1 : bit absolute MD4MODPPS.1; + MD4MODPPS_MD4MODPPS0 : bit absolute MD4MODPPS.0; + PRG1RPPS : byte absolute $0E2D; + PRG1RPPS_PRG1RPPS5 : bit absolute PRG1RPPS.5; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2E; + PRG1FPPS_PRG1FPPS5 : bit absolute PRG1FPPS.5; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2F; + PRG2RPPS_PRG2RPPS5 : bit absolute PRG2RPPS.5; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E30; + PRG2FPPS_PRG2FPPS5 : bit absolute PRG2FPPS.5; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + PRG3RPPS : byte absolute $0E31; + PRG3RPPS_PRG3RPPS5 : bit absolute PRG3RPPS.5; + PRG3RPPS_PRG3RPPS4 : bit absolute PRG3RPPS.4; + PRG3RPPS_PRG3RPPS3 : bit absolute PRG3RPPS.3; + PRG3RPPS_PRG3RPPS2 : bit absolute PRG3RPPS.2; + PRG3RPPS_PRG3RPPS1 : bit absolute PRG3RPPS.1; + PRG3RPPS_PRG3RPPS0 : bit absolute PRG3RPPS.0; + PRG3FPPS : byte absolute $0E32; + PRG3FPPS_PRG3FPPS5 : bit absolute PRG3FPPS.5; + PRG3FPPS_PRG3FPPS4 : bit absolute PRG3FPPS.4; + PRG3FPPS_PRG3FPPS3 : bit absolute PRG3FPPS.3; + PRG3FPPS_PRG3FPPS2 : bit absolute PRG3FPPS.2; + PRG3FPPS_PRG3FPPS1 : bit absolute PRG3FPPS.1; + PRG3FPPS_PRG3FPPS0 : bit absolute PRG3FPPS.0; + PRG4RPPS : byte absolute $0E33; + PRG4RPPS_PRG4RPPS5 : bit absolute PRG4RPPS.5; + PRG4RPPS_PRG4RPPS4 : bit absolute PRG4RPPS.4; + PRG4RPPS_PRG4RPPS3 : bit absolute PRG4RPPS.3; + PRG4RPPS_PRG4RPPS2 : bit absolute PRG4RPPS.2; + PRG4RPPS_PRG4RPPS1 : bit absolute PRG4RPPS.1; + PRG4RPPS_PRG4RPPS0 : bit absolute PRG4RPPS.0; + PRG4FPPS : byte absolute $0E34; + PRG4FPPS_PRG4FPPS5 : bit absolute PRG4FPPS.5; + PRG4FPPS_PRG4FPPS4 : bit absolute PRG4FPPS.4; + PRG4FPPS_PRG4FPPS3 : bit absolute PRG4FPPS.3; + PRG4FPPS_PRG4FPPS2 : bit absolute PRG4FPPS.2; + PRG4FPPS_PRG4FPPS1 : bit absolute PRG4FPPS.1; + PRG4FPPS_PRG4FPPS0 : bit absolute PRG4FPPS.0; + CLCIN0PPS : byte absolute $0E35; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E36; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E37; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E38; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0E39; + ADCACTPPS_ADCACTPPS5 : bit absolute ADCACTPPS.5; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSPCLKPPS : byte absolute $0E3A; + SSPCLKPPS_SSPCLKPPS5 : bit absolute SSPCLKPPS.5; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E3B; + SSPDATPPS_SSPDATPPS5 : bit absolute SSPDATPPS.5; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E3C; + SSPSSPPS_SSPSSPPS5 : bit absolute SSPSSPPS.5; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E3D; + RXPPS_RXPPS5 : bit absolute RXPPS.5; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E3E; + CKPPS_CKPPS5 : bit absolute CKPPS.5; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0EA8; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0EA9; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0EAA; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0EAB; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0EAC; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0EAD; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0EAE; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0EAF; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0EB0; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0EB1; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0EB2; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01F:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11D:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21B-21F:SFR'} // Bank 4 : MD3CON0, MD3CON1, MD3SRC, MD3CARL, MD3CARH + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29C:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR7L, CCPR7H, CCP7CON, CCP7CAP + {$SET_STATE_RAM '29E-29F:SFR'} // Bank 5 : CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-319:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE, CCPR8L, CCPR8H, CCP8CON, CCP8CAP, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '40F-418:SFR'} // Bank 8 : TMR5L, TMR5H, T5CON, T5GCON, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48E-498:SFR'} // Bank 9 : ADRESL, ADRESH, ADCON0, ADCON1, ADCON2, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '49A-49F:SFR'} // Bank 9 : T8TMR, T8PR, T8CON, T8HLT, T8CLKCON, T8RST + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-51E:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS, OPA3NCHS, OPA3PCHS, OPA3CON, OPA3ORS, OPA4NCHS, OPA4PCHS, OPA4CON, OPA4ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58D-59F:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF, DAC5CON0, DAC5REFL, DAC5REFH, DAC6CON0, DAC6REFL, DAC6REFH, DAC7CON0, DAC7REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-61F:SFR'} // Bank 12 : DAC8CON0, DAC8REF, PRG4RTSS, PRG4FTSS, PRG4INS, PRG4CON0, PRG4CON1, PRG4CON2, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON, PWM9DCL, PWM9DCH, PWM9CON, PWM10DCL, PWM10DCH, PWM10CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '78E-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2, PRG3RTSS, PRG3FTSS, PRG3INS, PRG3CON0, PRG3CON1, PRG3CON2 + {$SET_STATE_RAM '80D-81F:SFR'} // Bank 16 : COG3PHR, COG3PHF, COG3BLKR, COG3BLKF, COG3DBR, COG3DBF, COG3CON0, COG3CON1, COG3RIS0, COG3RIS1, COG3RSIM0, COG3RSIM1, COG3FIS0, COG3FIS1, COG3FSIM0, COG3FSIM1, COG3ASD0, COG3ASD1, COG3STR + {$SET_STATE_RAM '88D-89F:SFR'} // Bank 17 : COG4PHR, COG4PHF, COG4BLKR, COG4BLKF, COG4DBR, COG4DBF, COG4CON0, COG4CON1, COG4RIS0, COG4RIS1, COG4RSIM0, COG4RSIM1, COG4FIS0, COG4FIS1, COG4FSIM0, COG4FSIM1, COG4ASD0, COG4ASD1, COG4STR + {$SET_STATE_RAM '90C-91F:SFR'} // Bank 18 : CM4CON0, CM4CON1, CM4NSEL, CM4PSEL, CM5CON0, CM5CON1, CM5NSEL, CM5PSEL, CM6CON0, CM6CON1, CM6NSEL, CM6PSEL, CM7CON0, CM7CON1, CM7NSEL, CM7PSEL, CM8CON0, CM8CON1, CM8NSEL, CM8PSEL + {$SET_STATE_RAM 'D1B-D1F:SFR'} // Bank 26 : MD4CON0, MD4CON1, MD4SRC, MD4CARL, MD4CARH + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON, PWM11PHL, PWM11PHH, PWM11DCL, PWM11DCH, PWM11PRL, PWM11PRH, PWM11OFL, PWM11OFH, PWM11TMRL, PWM11TMRH, PWM11CON, PWM11INTE, PWM11INTF, PWM11CLKCON, PWM11LDCON, PWM11OFCON, PWM12PHL, PWM12PHH, PWM12DCL, PWM12DCH, PWM12PRL, PWM12PRH, PWM12OFL, PWM12OFH, PWM12TMRL, PWM12TMRH, PWM12CON, PWM12INTE, PWM12INTF, PWM12CLKCON, PWM12LDCON, PWM12OFCON + {$SET_STATE_RAM 'E0C-E3E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS, T2INPPS, T4INPPS, T6INPPS, T8INPPS, CCP1PPS, CCP2PPS, CCP7PPS, CCP8PPS, COG1INPPS, COG2INPPS, COG3INPPS, COG4INPPS, MD1CLPPS, MD1CHPPS, MD1MODPPS, MD2CLPPS, MD2CHPPS, MD2MODPPS, MD3CLPPS, MD3CHPPS, MD3MODPPS, MD4CLPPS, MD4CHPPS, MD4MODPPS, PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, PRG3RPPS, PRG3FPPS, PRG4RPPS, PRG4FPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, ADCACTPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, RXPPS, CKPPS + {$SET_STATE_RAM 'E90-EB2:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:7F'} // PIR4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:7F'} // PIE4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:0F'} // CM1NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:0F'} // CM2NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:0F'} // CM3NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:B1'} // MD3CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:33'} // MD3CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // MD3SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21E:1F'} // MD3CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:1F'} // MD3CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:BF'} // CCP7CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // CCP7CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP8CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP8CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '315:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:1F'} // MD1CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '319:1F'} // MD1CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:1F'} // MD2CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:1F'} // MD2CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:03'} // HIDRVB bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '491:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '492:3F'} // ADCON2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:0F'} // T8CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:1F'} // T8RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '517:0F'} // OPA3NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:0F'} // OPA3PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:D7'} // OPA3CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:1F'} // OPA3ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:0F'} // OPA4NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:0F'} // OPA4PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:D7'} // OPA4CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '58D:33'} // DACLD bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:BF'} // DAC3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:BF'} // DAC4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // DAC7CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '59F:1F'} // DAC7REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:BF'} // DAC8CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:1F'} // DAC8REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:0F'} // PRG4RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:0F'} // PRG4FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:0F'} // PRG4INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:BF'} // PRG4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:07'} // PRG4CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // PRG4CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM9DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM9CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:C0'} // PWM10DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:B0'} // PWM10CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '78E:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '78F:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '790:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '792:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG3RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG3FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG3INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG3CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG3CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:3F'} // COG3PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80E:3F'} // COG3PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80F:3F'} // COG3BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:3F'} // COG3BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:3F'} // COG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:3F'} // COG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:DF'} // COG3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:CF'} // COG3CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:FA'} // COG3RIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:FA'} // COG3RSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:FA'} // COG3FIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:FA'} // COG3FSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:FC'} // COG3ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:3F'} // COG4PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:3F'} // COG4PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:3F'} // COG4BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:3F'} // COG4BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:3F'} // COG4DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // COG4DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:DF'} // COG4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CF'} // COG4CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89D:FC'} // COG4ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '90D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:0F'} // CM4NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '910:DF'} // CM5CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:03'} // CM5CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:0F'} // CM5NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:0F'} // CM5PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:DF'} // CM6CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:03'} // CM6CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:0F'} // CM6NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '917:0F'} // CM6PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:DF'} // CM7CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:03'} // CM7CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:0F'} // CM7NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:0F'} // CM7PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DF'} // CM8CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:03'} // CM8CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:0F'} // CM8NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // CM8PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1B:B1'} // MD4CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1C:33'} // MD4CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1D:1F'} // MD4SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1E:1F'} // MD4CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1F:1F'} // MD4CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM5LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM5OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM6LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM6OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:BC'} // PWM11CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM11INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM11INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM11CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM11LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM11OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:BC'} // PWM12CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM12INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM12INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM12CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM12LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM12OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0C:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0D:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0E:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:3F'} // T3CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:3F'} // T3GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:3F'} // T5CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:3F'} // T5GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:3F'} // T6INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:3F'} // T8INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:3F'} // CCP7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:3F'} // CCP8PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:3F'} // COG1INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:3F'} // COG2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:3F'} // COG3INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:3F'} // COG4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:3F'} // MD1CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:3F'} // MD1CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:3F'} // MD1MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:3F'} // MD2CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:3F'} // MD2CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:3F'} // MD2MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:3F'} // MD3CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:3F'} // MD3CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:3F'} // MD3MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:3F'} // MD4CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:3F'} // MD4CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:3F'} // MD4MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:3F'} // PRG1RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:3F'} // PRG1FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:3F'} // PRG2RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:3F'} // PRG2FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:3F'} // PRG3RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:3F'} // PRG3FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E33:3F'} // PRG4RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E34:3F'} // PRG4FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E36:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E37:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E38:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E39:3F'} // ADCACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3A:3F'} // SSPCLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3B:3F'} // SSPDATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3C:3F'} // SSPSSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3D:3F'} // RXPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3E:3F'} // CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA8:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB0:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/C5IN0-/C6IN0-/C7IN0-/C8IN0-/IOCA0/RA0 + // Pin 3 : OPA1OUT/PRG1IN0/PRG2IN1/OPA2IN1+/OPA2IN1-/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/DAC1REF0-/DAC2REF0-/DAC3REF0-/DAC4REF0-/DAC5REF0-/DAC6REF0-/DAC7REF0-/DAC8REF0-/VREF-/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/C5IN0+/C6IN0+/C7IN0+/C8IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF0+/DAC2REF0+/DAC3REF0+/DAC4REF0+/DAC5REF0+/DAC6REF0+/DAC7REF0+/DAC8REF0+/VREF+/AN3/C1IN1+/IOCA3/RA3 + // Pin 6 : OPA1IN0+/IOCA4/RA4 + // Pin 7 : DAC2OUT1/OPA1IN0-/AN4/IOCA5/RA5 + // Pin 8 : DAC6REF1+/DAC8REF1+/AN5/RE0 + // Pin 9 : DAC6OUT1/DAC6REF1-/DAC8REF1-/AN6/RE1 + // Pin 10 : DAC8OUT1/AN7/RE2 + // Pin 11 : AVDD + // Pin 12 : AVSS + // Pin 13 : OSC1/CLKIN/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/C6IN1+/IOCA6/RA6 + // Pin 15 : SOSCO/DAC5OUT1/IOCC0/RC0 + // Pin 16 : SOSCI/DAC7OUT1/IOCC1/RC1 + // Pin 17 : AN14/C5IN2-/C6IN2-/IOCC2/RC2 + // Pin 18 : AN15/SCL/IOCC3/RC3 + // Pin 19 : OPA4IN0+/AN20/RD0 + // Pin 20 : OPA4OUT/OPA3IN1+/OPA3IN1-/PRG3IN1/PRG4IN0/AN21/C1IN4-/C2IN4-/C3IN4-/C4IN4-/C5IN4-/C6IN4-/C7IN4-/C8IN4-/RD1 + // Pin 21 : DAC4OUT1/OPA4IN0-/AN22/RD2 + // Pin 22 : AN23/C8IN2-/RD3 + // Pin 23 : AN16/C5IN3-/C6IN3-/SDA/IOCC4/RC4 + // Pin 24 : OPA3IN0+/AN17/IOCC5/RC5 + // Pin 25 : OPA3OUT/PRG3IN0/OPA4IN1+/OPA4IN1-/PRG4IN1/AN18/C5IN1-/C6IN1-/C7IN1-/C8IN1-/IOCC6/RC6 + // Pin 26 : OPA3IN0-/AN19/IOCC7/RC7 + // Pin 27 : AN24/C7IN2-/RD4 + // Pin 28 : AN25/C7IN3-/C8IN3-/RD5 + // Pin 29 : AN26/C7IN1+/RD6 + // Pin 30 : AN27/C8IN1+/RD7 + // Pin 31 : VSS + // Pin 32 : VDD + // Pin 33 : AN12/ZCD/C2IN1+/IOCB0/HIB0/RB0 + // Pin 34 : OPA2OUT/PRG1IN1/OPA1IN1+/OPA1IN1-/PRG2IN0/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/IOCB1/HIB1/RB1 + // Pin 35 : DAC3OUT1/OPA2IN0-/AN8/IOCB2/RB2 + // Pin 36 : OPA2IN0+/AN9/C1IN2-/C2IN2-/C3IN2-/IOCB3/RB3 + // Pin 37 : AN11/C3IN1+/IOCB4/RB4 + // Pin 38 : DAC5REF1-/DAC7REF1-/AN13/C4IN2-/IOCB5/RB5 + // Pin 39 : ICSPCLK/ICDCLK/DAC5REF1+/DAC7REF1+/C4IN1+/IOCB6/RB6 + // Pin 40 : ICSPDAT/ICDDAT/DAC1OUT2/DAC2OUT2/DAC5OUT2/DAC6OUT2/DAC3OUT2/DAC4OUT2/DAC7OUT2/DAC8OUT2/C5IN1+/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1778.pas b/devices17/PIC16F1778.pas new file mode 100644 index 00000000..8377c2e7 --- /dev/null +++ b/devices17/PIC16F1778.pas @@ -0,0 +1,2531 @@ +unit PIC16F1778; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1778'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_COG1IF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COG2IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR8IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + PIR5 : byte absolute $0015; + PIR5_CCP7IF : bit absolute PIR5.6; + PIR5_COG3IF : bit absolute PIR5.4; + PIR5_C6IF : bit absolute PIR5.1; + PIR5_C5IF : bit absolute PIR5.0; + PIR6 : byte absolute $0016; + PIR6_PWM11IF : bit absolute PIR6.2; + PIR6_PWM6IF : bit absolute PIR6.1; + PIR6_PWM5IF : bit absolute PIR6.0; + TMR0 : byte absolute $0017; + TMR1L : byte absolute $0018; + TMR1H : byte absolute $0019; + T1CON : byte absolute $001A; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $001B; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + TMR3L : byte absolute $001C; + TMR3H : byte absolute $001D; + T3CON : byte absolute $001E; + T3GCON : byte absolute $001F; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_COGIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COG2IE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR8IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + PIE5 : byte absolute $0095; + PIE5_CCP7IE : bit absolute PIE5.6; + PIE5_COG3IE : bit absolute PIE5.4; + PIE5_C6IE : bit absolute PIE5.1; + PIE5_C5IE : bit absolute PIE5.0; + PIE6 : byte absolute $0096; + PIE6_PWM11IE : bit absolute PIE6.2; + PIE6_PWM6IE : bit absolute PIE6.1; + PIE6_PWM5IE : bit absolute PIE6.0; + OPTION_REG : byte absolute $0097; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0098; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0099; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $009A; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $009B; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009C; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + BORCON : byte absolute $009D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $009E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $009F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CMOUT : byte absolute $0111; + CMOUT_MC6OUT : bit absolute CMOUT.5; + CMOUT_MC5OUT : bit absolute CMOUT.4; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0112; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0113; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0114; + CM1NSEL_NCH3 : bit absolute CM1NSEL.3; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0115; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0116; + CM2CON1 : byte absolute $0117; + CM2NSEL : byte absolute $0118; + CM2PSEL : byte absolute $0119; + CM3CON0 : byte absolute $011A; + CM3CON1 : byte absolute $011B; + CM3NSEL : byte absolute $011C; + CM3PSEL : byte absolute $011D; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + MD3CON0 : byte absolute $021B; + MD3CON0_EN : bit absolute MD3CON0.7; + MD3CON0_OPOL : bit absolute MD3CON0.4; + MD3CON0_BIT : bit absolute MD3CON0.0; + MD3CON1 : byte absolute $021C; + MD3CON1_CHPOL : bit absolute MD3CON1.5; + MD3CON1_CHSYNC : bit absolute MD3CON1.4; + MD3CON1_CLPOL : bit absolute MD3CON1.1; + MD3CON1_CLSYNC : bit absolute MD3CON1.0; + MD3SRC : byte absolute $021D; + MD3SRC_MS4 : bit absolute MD3SRC.4; + MD3SRC_MS3 : bit absolute MD3SRC.3; + MD3SRC_MS2 : bit absolute MD3SRC.2; + MD3SRC_MS1 : bit absolute MD3SRC.1; + MD3SRC_MS0 : bit absolute MD3SRC.0; + MD3CARL : byte absolute $021E; + MD3CARL_CL4 : bit absolute MD3CARL.4; + MD3CARL_CL3 : bit absolute MD3CARL.3; + MD3CARL_CL2 : bit absolute MD3CARL.2; + MD3CARL_CL1 : bit absolute MD3CARL.1; + MD3CARL_CL0 : bit absolute MD3CARL.0; + MD3CARH : byte absolute $021F; + MD3CARH_CH4 : bit absolute MD3CARH.4; + MD3CARH_CH3 : bit absolute MD3CARH.3; + MD3CARH_CH2 : bit absolute MD3CARH.2; + MD3CARH_CH1 : bit absolute MD3CARH.1; + MD3CARH_CH0 : bit absolute MD3CARH.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CON_MODE3 : bit absolute CCP1CON.3; + CCP1CON_MODE2 : bit absolute CCP1CON.2; + CCP1CON_MODE1 : bit absolute CCP1CON.1; + CCP1CON_MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CAP : byte absolute $0298; + CCPR7L : byte absolute $0299; + CCPR7H : byte absolute $029A; + CCP7CON : byte absolute $029B; + CCP7CAP : byte absolute $029C; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C2TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C2TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C1TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C1TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_P9TSEL1 : bit absolute CCPTMRS2.5; + CCPTMRS2_P9TSEL0 : bit absolute CCPTMRS2.4; + CCPTMRS2_P4TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_P4TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_P3TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_P3TSEL0 : bit absolute CCPTMRS2.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + MD1CON0 : byte absolute $0315; + MD1CON1 : byte absolute $0316; + MD1SRC : byte absolute $0317; + MD1CARL : byte absolute $0318; + MD1CARH : byte absolute $0319; + MD2CON0 : byte absolute $031B; + MD2CON1 : byte absolute $031C; + MD2SRC : byte absolute $031D; + MD2CARL : byte absolute $031E; + MD2CARH : byte absolute $031F; + INLVLA : byte absolute $038C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVB3 : bit absolute INLVLB.3; + INLVLB_INLVB2 : bit absolute INLVLB.2; + INLVLB_INLVB1 : bit absolute INLVLB.1; + INLVLB_INLVB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVE : byte absolute $0390; + INLVE_INLVE3 : bit absolute INLVE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + HIDRVB_HIDB0 : bit absolute HIDRVB.0; + TMR5L : byte absolute $040F; + TMR5H : byte absolute $0410; + T5CON : byte absolute $0411; + T5GCON : byte absolute $0412; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4CON_CKPS2 : bit absolute T4CON.6; + T4CON_OUTPS3 : bit absolute T4CON.3; + T4CON_OUTPS2 : bit absolute T4CON.2; + T4CON_OUTPS1 : bit absolute T4CON.1; + T4CON_OUTPS0 : bit absolute T4CON.0; + T4HLT : byte absolute $0416; + T4HLT_PSYNC : bit absolute T4HLT.7; + T4HLT_CKPOL : bit absolute T4HLT.6; + T4HLT_CKSYNC : bit absolute T4HLT.5; + T4HLT_MODE4 : bit absolute T4HLT.4; + T4CLKCON : byte absolute $0417; + T4CLKCON_CS3 : bit absolute T4CLKCON.3; + T4CLKCON_CS2 : bit absolute T4CLKCON.2; + T4RST : byte absolute $0418; + T4RST_RSEL4 : bit absolute T4RST.4; + T4RST_RSEL3 : bit absolute T4RST.3; + T4RST_RSEL2 : bit absolute T4RST.2; + T4RST_RSEL1 : bit absolute T4RST.1; + T4RST_RSEL0 : bit absolute T4RST.0; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + ADRESL : byte absolute $048E; + ADRESH : byte absolute $048F; + ADCON0 : byte absolute $0490; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $0491; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $0492; + ADCON2_TRIGSEL5 : bit absolute ADCON2.5; + ADCON2_TRIGSEL4 : bit absolute ADCON2.4; + ADCON2_TRIGSEL3 : bit absolute ADCON2.3; + ADCON2_TRIGSEL2 : bit absolute ADCON2.2; + ADCON2_TRIGSEL1 : bit absolute ADCON2.1; + ADCON2_TRIGSEL0 : bit absolute ADCON2.0; + T2TMR : byte absolute $0493; + T2PR : byte absolute $0494; + T2CON : byte absolute $0495; + T2HLT : byte absolute $0496; + T2CLKCON : byte absolute $0497; + T2RST : byte absolute $0498; + T8TMR : byte absolute $049A; + T8PR : byte absolute $049B; + T8CON : byte absolute $049C; + T8HLT : byte absolute $049D; + T8CLKCON : byte absolute $049E; + T8RST : byte absolute $049F; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + OPA3NCHS : byte absolute $0517; + OPA3PCHS : byte absolute $0518; + OPA3CON : byte absolute $0519; + OPA3CON_SP : bit absolute OPA3CON.6; + OPA3ORS : byte absolute $051A; + DACLD : byte absolute $058D; + DACLD_DAC5LD : bit absolute DACLD.4; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $058E; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $058F; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0590; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0591; + DAC2REFL : byte absolute $0592; + DAC2REFH : byte absolute $0593; + DAC3CON0 : byte absolute $0594; + DAC3REF : byte absolute $0595; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0596; + DAC4REF : byte absolute $0597; + DAC5CON0 : byte absolute $0598; + DAC5REFL : byte absolute $0599; + DAC5REFH : byte absolute $059A; + DAC7CON0 : byte absolute $059E; + DAC7REF : byte absolute $059F; + PWM3DCL : byte absolute $0614; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0615; + PWM3CON : byte absolute $0616; + PWM4DCL : byte absolute $0617; + PWM4DCH : byte absolute $0618; + PWM4CON : byte absolute $0619; + PWM9DCL : byte absolute $061A; + PWM9DCH : byte absolute $061B; + PWM9CON : byte absolute $061C; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $078E; + PRG1FTSS : byte absolute $078F; + PRG1INS : byte absolute $0790; + PRG1CON0 : byte absolute $0791; + PRG1CON0_FEDG : bit absolute PRG1CON0.5; + PRG1CON0_REDG : bit absolute PRG1CON0.4; + PRG1CON0_OS : bit absolute PRG1CON0.1; + PRG1CON1 : byte absolute $0792; + PRG1CON1_RDY : bit absolute PRG1CON1.2; + PRG1CON1_FPOL : bit absolute PRG1CON1.1; + PRG1CON1_RPOL : bit absolute PRG1CON1.0; + PRG1CON2 : byte absolute $0793; + PRG1CON2_ISET4 : bit absolute PRG1CON2.4; + PRG1CON2_ISET3 : bit absolute PRG1CON2.3; + PRG1CON2_ISET2 : bit absolute PRG1CON2.2; + PRG1CON2_ISET1 : bit absolute PRG1CON2.1; + PRG1CON2_ISET0 : bit absolute PRG1CON2.0; + PRG2RTSS : byte absolute $0794; + PRG2FTSS : byte absolute $0795; + PRG2INS : byte absolute $0796; + PRG2CON0 : byte absolute $0797; + PRG2CON1 : byte absolute $0798; + PRG2CON2 : byte absolute $0799; + PRG3RTSS : byte absolute $079A; + PRG3FTSS : byte absolute $079B; + PRG3INS : byte absolute $079C; + PRG3CON0 : byte absolute $079D; + PRG3CON1 : byte absolute $079E; + PRG3CON2 : byte absolute $079F; + COG3PHR : byte absolute $080D; + COG3PHF : byte absolute $080E; + COG3BLKR : byte absolute $080F; + COG3BLKF : byte absolute $0810; + COG3DBR : byte absolute $0811; + COG3DBF : byte absolute $0812; + COG3CON0 : byte absolute $0813; + COG3CON1 : byte absolute $0814; + COG3RIS0 : byte absolute $0815; + COG3RIS1 : byte absolute $0816; + COG3RSIM0 : byte absolute $0817; + COG3RSIM1 : byte absolute $0818; + COG3FIS0 : byte absolute $0819; + COG3FIS1 : byte absolute $081A; + COG3FSIM0 : byte absolute $081B; + COG3FSIM1 : byte absolute $081C; + COG3ASD0 : byte absolute $081D; + COG3ASD1 : byte absolute $081E; + COG3STR : byte absolute $081F; + CM4CON0 : byte absolute $090C; + CM4CON1 : byte absolute $090D; + CM4NSEL : byte absolute $090E; + CM4PSEL : byte absolute $090F; + CM5CON0 : byte absolute $0910; + CM5CON1 : byte absolute $0911; + CM5NSEL : byte absolute $0912; + CM5PSEL : byte absolute $0913; + CM6CON0 : byte absolute $0914; + CM6CON1 : byte absolute $0915; + CM6NSEL : byte absolute $0916; + CM6PSEL : byte absolute $0917; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM11EN : bit absolute PWMEN.2; + PWMEN_MPWM6EN : bit absolute PWMEN.1; + PWMEN_MPWM5EN : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM11LD : bit absolute PWMLD.2; + PWMLD_MPWM6LD : bit absolute PWMLD.1; + PWMLD_MPWM5LD : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM11OUT : bit absolute PWMOUT.2; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.1; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.0; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PWM11PHL : byte absolute $0DB1; + PWM11PHH : byte absolute $0DB2; + PWM11DCL : byte absolute $0DB3; + PWM11DCH : byte absolute $0DB4; + PWM11PRL : byte absolute $0DB5; + PWM11PRH : byte absolute $0DB6; + PWM11OFL : byte absolute $0DB7; + PWM11OFH : byte absolute $0DB8; + PWM11TMRL : byte absolute $0DB9; + PWM11TMRH : byte absolute $0DBA; + PWM11CON : byte absolute $0DBB; + PWM11INTE : byte absolute $0DBC; + PWM11INTF : byte absolute $0DBD; + PWM11CLKCON : byte absolute $0DBE; + PWM11LDCON : byte absolute $0DBF; + PWM11OFCON : byte absolute $0DC0; + PPSLOCK : byte absolute $0E0C; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E0D; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E0E; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E0F; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E10; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E11; + T3CKIPPS_T3CKIPPS5 : bit absolute T3CKIPPS.5; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E12; + T3GPPS_T3GPPS5 : bit absolute T3GPPS.5; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E13; + T5CKIPPS_T5CKIPPS5 : bit absolute T5CKIPPS.5; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E14; + T5GPPS_T5GPPS5 : bit absolute T5GPPS.5; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $0E15; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $0E16; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $0E17; + T6INPPS_T6INPPS5 : bit absolute T6INPPS.5; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + T8INPPS : byte absolute $0E18; + T8INPPS_T8INPPS5 : bit absolute T8INPPS.5; + T8INPPS_T8INPPS4 : bit absolute T8INPPS.4; + T8INPPS_T8INPPS3 : bit absolute T8INPPS.3; + T8INPPS_T8INPPS2 : bit absolute T8INPPS.2; + T8INPPS_T8INPPS1 : bit absolute T8INPPS.1; + T8INPPS_T8INPPS0 : bit absolute T8INPPS.0; + CCP1PPS : byte absolute $0E19; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E1A; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP7PPS : byte absolute $0E1B; + CCP7PPS_CCP7PPS5 : bit absolute CCP7PPS.5; + CCP7PPS_CCP7PPS4 : bit absolute CCP7PPS.4; + CCP7PPS_CCP7PPS3 : bit absolute CCP7PPS.3; + CCP7PPS_CCP7PPS2 : bit absolute CCP7PPS.2; + CCP7PPS_CCP7PPS1 : bit absolute CCP7PPS.1; + CCP7PPS_CCP7PPS0 : bit absolute CCP7PPS.0; + COG1INPPS : byte absolute $0E1D; + COG1INPPS_COG1INPPS5 : bit absolute COG1INPPS.5; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E1E; + COG2INPPS_COG2INPPS5 : bit absolute COG2INPPS.5; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + COG3INPPS : byte absolute $0E1F; + COG3INPPS_COG3INPPS5 : bit absolute COG3INPPS.5; + COG3INPPS_COG3INPPS4 : bit absolute COG3INPPS.4; + COG3INPPS_COG3INPPS3 : bit absolute COG3INPPS.3; + COG3INPPS_COG3INPPS2 : bit absolute COG3INPPS.2; + COG3INPPS_COG3INPPS1 : bit absolute COG3INPPS.1; + COG3INPPS_COG3INPPS0 : bit absolute COG3INPPS.0; + MD1CLPPS : byte absolute $0E21; + MD1CLPPS_MD1CLPPS5 : bit absolute MD1CLPPS.5; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1CHPPS : byte absolute $0E22; + MD1CHPPS_MD1CHPPS5 : bit absolute MD1CHPPS.5; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1MODPPS : byte absolute $0E23; + MD1MODPPS_MD1MODPPS5 : bit absolute MD1MODPPS.5; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CLPPS : byte absolute $0E24; + MD2CLPPS_MD2CLPPS5 : bit absolute MD2CLPPS.5; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2CHPPS : byte absolute $0E25; + MD2CHPPS_MD2CHPPS5 : bit absolute MD2CHPPS.5; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2MODPPS : byte absolute $0E26; + MD2MODPPS_MD2MODPPS5 : bit absolute MD2MODPPS.5; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + MD3CLPPS : byte absolute $0E27; + MD3CLPPS_MD3CLPPS5 : bit absolute MD3CLPPS.5; + MD3CLPPS_MD3CLPPS4 : bit absolute MD3CLPPS.4; + MD3CLPPS_MD3CLPPS3 : bit absolute MD3CLPPS.3; + MD3CLPPS_MD3CLPPS2 : bit absolute MD3CLPPS.2; + MD3CLPPS_MD3CLPPS1 : bit absolute MD3CLPPS.1; + MD3CLPPS_MD3CLPPS0 : bit absolute MD3CLPPS.0; + MD3CHPPS : byte absolute $0E28; + MD3CHPPS_MD3CHPPS5 : bit absolute MD3CHPPS.5; + MD3CHPPS_MD3CHPPS4 : bit absolute MD3CHPPS.4; + MD3CHPPS_MD3CHPPS3 : bit absolute MD3CHPPS.3; + MD3CHPPS_MD3CHPPS2 : bit absolute MD3CHPPS.2; + MD3CHPPS_MD3CHPPS1 : bit absolute MD3CHPPS.1; + MD3CHPPS_MD3CHPPS0 : bit absolute MD3CHPPS.0; + MD3MODPPS : byte absolute $0E29; + MD3MODPPS_MD3MODPPS5 : bit absolute MD3MODPPS.5; + MD3MODPPS_MD3MODPPS4 : bit absolute MD3MODPPS.4; + MD3MODPPS_MD3MODPPS3 : bit absolute MD3MODPPS.3; + MD3MODPPS_MD3MODPPS2 : bit absolute MD3MODPPS.2; + MD3MODPPS_MD3MODPPS1 : bit absolute MD3MODPPS.1; + MD3MODPPS_MD3MODPPS0 : bit absolute MD3MODPPS.0; + PRG1RPPS : byte absolute $0E2D; + PRG1RPPS_PRG1RPPS5 : bit absolute PRG1RPPS.5; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2E; + PRG1FPPS_PRG1FPPS5 : bit absolute PRG1FPPS.5; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2F; + PRG2RPPS_PRG2RPPS5 : bit absolute PRG2RPPS.5; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E30; + PRG2FPPS_PRG2FPPS5 : bit absolute PRG2FPPS.5; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + PRG3RPPS : byte absolute $0E31; + PRG3RPPS_PRG3RPPS5 : bit absolute PRG3RPPS.5; + PRG3RPPS_PRG3RPPS4 : bit absolute PRG3RPPS.4; + PRG3RPPS_PRG3RPPS3 : bit absolute PRG3RPPS.3; + PRG3RPPS_PRG3RPPS2 : bit absolute PRG3RPPS.2; + PRG3RPPS_PRG3RPPS1 : bit absolute PRG3RPPS.1; + PRG3RPPS_PRG3RPPS0 : bit absolute PRG3RPPS.0; + PRG3FPPS : byte absolute $0E32; + PRG3FPPS_PRG3FPPS5 : bit absolute PRG3FPPS.5; + PRG3FPPS_PRG3FPPS4 : bit absolute PRG3FPPS.4; + PRG3FPPS_PRG3FPPS3 : bit absolute PRG3FPPS.3; + PRG3FPPS_PRG3FPPS2 : bit absolute PRG3FPPS.2; + PRG3FPPS_PRG3FPPS1 : bit absolute PRG3FPPS.1; + PRG3FPPS_PRG3FPPS0 : bit absolute PRG3FPPS.0; + CLCIN0PPS : byte absolute $0E35; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E36; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E37; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E38; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0E39; + ADCACTPPS_ADCACTPPS5 : bit absolute ADCACTPPS.5; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSPCLKPPS : byte absolute $0E3A; + SSPCLKPPS_SSPCLKPPS5 : bit absolute SSPCLKPPS.5; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E3B; + SSPDATPPS_SSPDATPPS5 : bit absolute SSPDATPPS.5; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E3C; + SSPSSPPS_SSPSSPPS5 : bit absolute SSPSSPPS.5; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E3D; + RXPPS_RXPPS5 : bit absolute RXPPS.5; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E3E; + CKPPS_CKPPS5 : bit absolute CKPPS.5; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-09F:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11D:SFR'} // Bank 2 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21B-21F:SFR'} // Bank 4 : MD3CON0, MD3CON1, MD3SRC, MD3CARL, MD3CARH + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-29C:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR7L, CCPR7H, CCP7CON, CCP7CAP + {$SET_STATE_RAM '29E-29F:SFR'} // Bank 5 : CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '315-319:SFR'} // Bank 6 : MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '40F-418:SFR'} // Bank 8 : TMR5L, TMR5H, T5CON, T5GCON, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48E-498:SFR'} // Bank 9 : ADRESL, ADRESH, ADCON0, ADCON1, ADCON2, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '49A-49F:SFR'} // Bank 9 : T8TMR, T8PR, T8CON, T8HLT, T8CLKCON, T8RST + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-51A:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS, OPA3NCHS, OPA3PCHS, OPA3CON, OPA3ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58D-59A:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF, DAC5CON0, DAC5REFL, DAC5REFH + {$SET_STATE_RAM '59E-59F:SFR'} // Bank 11 : DAC7CON0, DAC7REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '614-61C:SFR'} // Bank 12 : PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON, PWM9DCL, PWM9DCH, PWM9CON + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '78E-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2, PRG3RTSS, PRG3FTSS, PRG3INS, PRG3CON0, PRG3CON1, PRG3CON2 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80D-81F:SFR'} // Bank 16 : COG3PHR, COG3PHF, COG3BLKR, COG3BLKF, COG3DBR, COG3DBF, COG3CON0, COG3CON1, COG3RIS0, COG3RIS1, COG3RSIM0, COG3RSIM1, COG3FIS0, COG3FIS1, COG3FSIM0, COG3FSIM1, COG3ASD0, COG3ASD1, COG3STR + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-917:SFR'} // Bank 18 : CM4CON0, CM4CON1, CM4NSEL, CM4PSEL, CM5CON0, CM5CON1, CM5NSEL, CM5PSEL, CM6CON0, CM6CON1, CM6NSEL, CM6PSEL + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'D8E-DC0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON, PWM11PHL, PWM11PHH, PWM11DCL, PWM11DCH, PWM11PRL, PWM11PRH, PWM11OFL, PWM11OFH, PWM11TMRL, PWM11TMRH, PWM11CON, PWM11INTE, PWM11INTF, PWM11CLKCON, PWM11LDCON, PWM11OFCON + {$SET_STATE_RAM 'E0C-E1B:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS, T2INPPS, T4INPPS, T6INPPS, T8INPPS, CCP1PPS, CCP2PPS, CCP7PPS + {$SET_STATE_RAM 'E1D-E1F:SFR'} // Bank 28 : COG1INPPS, COG2INPPS, COG3INPPS + {$SET_STATE_RAM 'E21-E29:SFR'} // Bank 28 : MD1CLPPS, MD1CHPPS, MD1MODPPS, MD2CLPPS, MD2CHPPS, MD2MODPPS, MD3CLPPS, MD3CHPPS, MD3MODPPS + {$SET_STATE_RAM 'E2D-E32:SFR'} // Bank 28 : PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, PRG3RPPS, PRG3FPPS + {$SET_STATE_RAM 'E35-E3E:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, ADCACTPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, RXPPS, CKPPS + {$SET_STATE_RAM 'E90-EA7:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:7F'} // PIR4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:53'} // PIR5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // PIR6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:7F'} // PIE4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '095:53'} // PIE5 bits 7,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:07'} // PIE6 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:3F'} // CMOUT bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:0F'} // CM1NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:0F'} // CM2NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:0F'} // CM3NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:B1'} // MD3CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:33'} // MD3CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // MD3SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21E:1F'} // MD3CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:1F'} // MD3CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:BF'} // CCP7CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // CCP7CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29E:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:3F'} // CCPTMRS2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '315:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:1F'} // MD1CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '319:1F'} // MD1CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:1F'} // MD2CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:1F'} // MD2CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:03'} // HIDRVB bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '491:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '492:3F'} // ADCON2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:0F'} // T8CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:1F'} // T8RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '517:0F'} // OPA3NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:0F'} // OPA3PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:D7'} // OPA3CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:1F'} // OPA3ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58D:13'} // DACLD bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:BF'} // DAC3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:BF'} // DAC4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // DAC7CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '59F:1F'} // DAC7REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM9DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM9CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '78E:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '78F:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '790:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '792:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG3RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG3FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG3INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG3CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG3CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:3F'} // COG3PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80E:3F'} // COG3PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80F:3F'} // COG3BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:3F'} // COG3BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:3F'} // COG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:3F'} // COG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:DF'} // COG3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:CF'} // COG3CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:FA'} // COG3RIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:FA'} // COG3RSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:FA'} // COG3FIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:FA'} // COG3FSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:FC'} // COG3ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '90D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:0F'} // CM4NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '910:DF'} // CM5CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:03'} // CM5CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:0F'} // CM5NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:0F'} // CM5PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:DF'} // CM6CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:03'} // CM6CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:0F'} // CM6NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '917:0F'} // CM6PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:07'} // PWMEN bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:07'} // PWMLD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:07'} // PWMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM5LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM5OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM6LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM6OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:BC'} // PWM11CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM11INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM11INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM11CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM11LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM11OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0C:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0D:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0E:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:3F'} // T3CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:3F'} // T3GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:3F'} // T5CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:3F'} // T5GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:3F'} // T6INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:3F'} // T8INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:3F'} // CCP7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:3F'} // COG1INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:3F'} // COG2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:3F'} // COG3INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:3F'} // MD1CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:3F'} // MD1CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:3F'} // MD1MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:3F'} // MD2CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:3F'} // MD2CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:3F'} // MD2MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:3F'} // MD3CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:3F'} // MD3CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:3F'} // MD3MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:3F'} // PRG1RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:3F'} // PRG1FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:3F'} // PRG2RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:3F'} // PRG2FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:3F'} // PRG3RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:3F'} // PRG3FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E36:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E37:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E38:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E39:3F'} // ADCACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3A:3F'} // SSPCLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3B:3F'} // SSPDATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3C:3F'} // SSPSSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3D:3F'} // RXPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3E:3F'} // CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/RE3 + // Pin 2 : AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/C5IN0-/C6IN0-/RA0 + // Pin 3 : OPA1OUT/PRG1IN0/PRG2IN1/OPA2IN1+/OPA2IN1-/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/RA1 + // Pin 4 : DAC1OUT1/DAC1REF0-/DAC2REF0-/DAC3REF0-/DAC4REF0-/DAC5REF0-/DAC7REF0-/VREF-/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/C5IN0+/C6IN0+/RA2 + // Pin 5 : DAC1REF0+/DAC2REF0+/DAC3REF0+/DAC4REF0+/DAC5REF0+/DAC7REF0+/VREF+/AN3/C1IN1+/RA3 + // Pin 6 : DAC4OUT1/OPA1IN0+/RA4 + // Pin 7 : DAC2OUT1/OPA1IN0-/AN4/RA5 + // Pin 8 : AVSS + // Pin 9 : OSC1/CLKIN/RA7 + // Pin 10 : OSC2/CLKOUT/C6IN1+/RA6 + // Pin 11 : SOSCO/DAC5OUT1/RC0 + // Pin 12 : SOSCI/DAC7OUT1/RC1 + // Pin 13 : AN14/C5IN2-/C6IN2-/RC2 + // Pin 14 : AN15/C1IN4-/C2IN4-/C3IN4-/C4IN4-/C5IN4-/C6IN4-/C7IN4-/C8IN4-/SCL/RC3 + // Pin 15 : AN16/C5IN3-/C6IN3-/RC4 + // Pin 16 : OPA3IN0+/AN17/RC5 + // Pin 17 : OPA3OUT/PRG3IN0/AN18/C5IN1-/C6IN1-/RC6 + // Pin 18 : OPA3IN0-/AN19/RC7 + // Pin 19 : VSS + // Pin 20 : VDD + // Pin 21 : AN12/ZCD/C2IN1+/HIB0/RB0 + // Pin 22 : OPA2OUT/PRG1IN1/OPA1IN1+/OPA1IN1-/PRG2IN0/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/HIB1/RB1 + // Pin 23 : DAC3OUT1/OPA2IN0-/AN8/RB2 + // Pin 24 : OPA2IN0+/AN9/C1IN2-/C2IN2-/C3IN2-/RB3 + // Pin 25 : AN11/C3IN1+/RB4 + // Pin 26 : DAC5REF1-/DAC7REF1-/AN13/C4IN2-/RB5 + // Pin 27 : ICSPCLK/DAC5REF1+/DAC7REF1+/C4IN1+/RB6 + // Pin 28 : ICSPDAT/DAC1OUT2/DAC2OUT2/DAC5OUT2/DAC3OUT2/DAC4OUT2/DAC7OUT2/C5IN1+/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1779.pas b/devices17/PIC16F1779.pas new file mode 100644 index 00000000..dfdbebed --- /dev/null +++ b/devices17/PIC16F1779.pas @@ -0,0 +1,2909 @@ +unit PIC16F1779; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1779'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_COG1IF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_COG2IF : bit absolute PIR3.5; + PIR3_ZCDIF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_TMR8IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR3GIF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR6IF : bit absolute PIR4.1; + PIR4_TMR4IF : bit absolute PIR4.0; + PIR5 : byte absolute $0015; + PIR5_CCP8IF : bit absolute PIR5.7; + PIR5_CCP7IF : bit absolute PIR5.6; + PIR5_COG4IF : bit absolute PIR5.5; + PIR5_COG3IF : bit absolute PIR5.4; + PIR5_C8IF : bit absolute PIR5.3; + PIR5_C7IF : bit absolute PIR5.2; + PIR5_C6IF : bit absolute PIR5.1; + PIR5_C5IF : bit absolute PIR5.0; + PIR6 : byte absolute $0016; + PIR6_PWM12IF : bit absolute PIR6.3; + PIR6_PWM11IF : bit absolute PIR6.2; + PIR6_PWM6IF : bit absolute PIR6.1; + PIR6_PWM5IF : bit absolute PIR6.0; + TMR0 : byte absolute $0017; + TMR1L : byte absolute $0018; + TMR1H : byte absolute $0019; + T1CON : byte absolute $001A; + T1CON_CS1 : bit absolute T1CON.7; + T1CON_CS0 : bit absolute T1CON.6; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_OSCEN : bit absolute T1CON.3; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $001B; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GCON_GSS1 : bit absolute T1GCON.1; + T1GCON_GSS0 : bit absolute T1GCON.0; + TMR3L : byte absolute $001C; + TMR3H : byte absolute $001D; + T3CON : byte absolute $001E; + T3GCON : byte absolute $001F; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_COGIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_COG2IE : bit absolute PIE3.5; + PIE3_ZCDIE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_TMR8IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR3GIE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR6IE : bit absolute PIE4.1; + PIE4_TMR4IE : bit absolute PIE4.0; + PIE5 : byte absolute $0095; + PIE5_CCP8IE : bit absolute PIE5.7; + PIE5_CCP7IE : bit absolute PIE5.6; + PIE5_COG4IE : bit absolute PIE5.5; + PIE5_COG3IE : bit absolute PIE5.4; + PIE5_C8IE : bit absolute PIE5.3; + PIE5_C7IE : bit absolute PIE5.2; + PIE5_C6IE : bit absolute PIE5.1; + PIE5_C5IE : bit absolute PIE5.0; + PIE6 : byte absolute $0096; + PIE6_PWM12IE : bit absolute PIE6.3; + PIE6_PWM11IE : bit absolute PIE6.2; + PIE6_PWM6IE : bit absolute PIE6.1; + PIE6_PWM5IE : bit absolute PIE6.0; + OPTION_REG : byte absolute $0097; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0098; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0099; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $009A; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $009B; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009C; + OSCSTAT_SOSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + BORCON : byte absolute $009D; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $009E; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + ZCD1CON : byte absolute $009F; + ZCD1CON_ZCD1EN : bit absolute ZCD1CON.7; + ZCD1CON_ZCD1OUT : bit absolute ZCD1CON.5; + ZCD1CON_ZCD1POL : bit absolute ZCD1CON.4; + ZCD1CON_ZCD1INTP : bit absolute ZCD1CON.1; + ZCD1CON_ZCD1INTN : bit absolute ZCD1CON.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CMOUT : byte absolute $0111; + CMOUT_MC8OUT : bit absolute CMOUT.7; + CMOUT_MC7OUT : bit absolute CMOUT.6; + CMOUT_MC6OUT : bit absolute CMOUT.5; + CMOUT_MC5OUT : bit absolute CMOUT.4; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0112; + CM1CON0_OUT : bit absolute CM1CON0.6; + CM1CON0_POL : bit absolute CM1CON0.4; + CM1CON0_ZLF : bit absolute CM1CON0.3; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON0_SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0113; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0114; + CM1NSEL_NCH3 : bit absolute CM1NSEL.3; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0115; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0116; + CM2CON1 : byte absolute $0117; + CM2NSEL : byte absolute $0118; + CM2PSEL : byte absolute $0119; + CM3CON0 : byte absolute $011A; + CM3CON1 : byte absolute $011B; + CM3NSEL : byte absolute $011C; + CM3PSEL : byte absolute $011D; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + PMADRL : byte absolute $0191; + PMADRH : byte absolute $0192; + PMADRH_PMADRH6 : bit absolute PMADRH.6; + PMADRH_PMADRH5 : bit absolute PMADRH.5; + PMADRH_PMADRH4 : bit absolute PMADRH.4; + PMADRH_PMADRH3 : bit absolute PMADRH.3; + PMADRH_PMADRH2 : bit absolute PMADRH.2; + PMADRH_PMADRH1 : bit absolute PMADRH.1; + PMADRH_PMADRH0 : bit absolute PMADRH.0; + PMDATL : byte absolute $0193; + PMDATH : byte absolute $0194; + PMDATH_PMDATH5 : bit absolute PMDATH.5; + PMDATH_PMDATH4 : bit absolute PMDATH.4; + PMDATH_PMDATH3 : bit absolute PMDATH.3; + PMDATH_PMDATH2 : bit absolute PMDATH.2; + PMDATH_PMDATH1 : bit absolute PMDATH.1; + PMDATH_PMDATH0 : bit absolute PMDATH.0; + PMCON1 : byte absolute $0195; + PMCON1_CFGS : bit absolute PMCON1.6; + PMCON1_LWLO : bit absolute PMCON1.5; + PMCON1_FREE : bit absolute PMCON1.4; + PMCON1_WRERR : bit absolute PMCON1.3; + PMCON1_WREN : bit absolute PMCON1.2; + PMCON1_WR : bit absolute PMCON1.1; + PMCON1_RD : bit absolute PMCON1.0; + PMCON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + MD3CON0 : byte absolute $021B; + MD3CON0_EN : bit absolute MD3CON0.7; + MD3CON0_OPOL : bit absolute MD3CON0.4; + MD3CON0_BIT : bit absolute MD3CON0.0; + MD3CON1 : byte absolute $021C; + MD3CON1_CHPOL : bit absolute MD3CON1.5; + MD3CON1_CHSYNC : bit absolute MD3CON1.4; + MD3CON1_CLPOL : bit absolute MD3CON1.1; + MD3CON1_CLSYNC : bit absolute MD3CON1.0; + MD3SRC : byte absolute $021D; + MD3SRC_MS4 : bit absolute MD3SRC.4; + MD3SRC_MS3 : bit absolute MD3SRC.3; + MD3SRC_MS2 : bit absolute MD3SRC.2; + MD3SRC_MS1 : bit absolute MD3SRC.1; + MD3SRC_MS0 : bit absolute MD3SRC.0; + MD3CARL : byte absolute $021E; + MD3CARL_CL4 : bit absolute MD3CARL.4; + MD3CARL_CL3 : bit absolute MD3CARL.3; + MD3CARL_CL2 : bit absolute MD3CARL.2; + MD3CARL_CL1 : bit absolute MD3CARL.1; + MD3CARL_CL0 : bit absolute MD3CARL.0; + MD3CARH : byte absolute $021F; + MD3CARH_CH4 : bit absolute MD3CARH.4; + MD3CARH_CH3 : bit absolute MD3CARH.3; + MD3CARH_CH2 : bit absolute MD3CARH.2; + MD3CARH_CH1 : bit absolute MD3CARH.1; + MD3CARH_CH0 : bit absolute MD3CARH.0; + ODCONA : byte absolute $028C; + ODCONA_ODA7 : bit absolute ODCONA.7; + ODCONA_ODA6 : bit absolute ODCONA.6; + ODCONA_ODA5 : bit absolute ODCONA.5; + ODCONA_ODA4 : bit absolute ODCONA.4; + ODCONA_ODA3 : bit absolute ODCONA.3; + ODCONA_ODA2 : bit absolute ODCONA.2; + ODCONA_ODA1 : bit absolute ODCONA.1; + ODCONA_ODA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODB7 : bit absolute ODCONB.7; + ODCONB_ODB6 : bit absolute ODCONB.6; + ODCONB_ODB5 : bit absolute ODCONB.5; + ODCONB_ODB4 : bit absolute ODCONB.4; + ODCONB_ODB3 : bit absolute ODCONB.3; + ODCONB_ODB2 : bit absolute ODCONB.2; + ODCONB_ODB1 : bit absolute ODCONB.1; + ODCONB_ODB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODC7 : bit absolute ODCONC.7; + ODCONC_ODC6 : bit absolute ODCONC.6; + ODCONC_ODC5 : bit absolute ODCONC.5; + ODCONC_ODC4 : bit absolute ODCONC.4; + ODCONC_ODC3 : bit absolute ODCONC.3; + ODCONC_ODC2 : bit absolute ODCONC.2; + ODCONC_ODC1 : bit absolute ODCONC.1; + ODCONC_ODC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODD7 : bit absolute ODCOND.7; + ODCOND_ODD6 : bit absolute ODCOND.6; + ODCOND_ODD5 : bit absolute ODCOND.5; + ODCOND_ODD4 : bit absolute ODCOND.4; + ODCOND_ODD3 : bit absolute ODCOND.3; + ODCOND_ODD2 : bit absolute ODCOND.2; + ODCOND_ODD1 : bit absolute ODCOND.1; + ODCOND_ODD0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODE2 : bit absolute ODCONE.2; + ODCONE_ODE1 : bit absolute ODCONE.1; + ODCONE_ODE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CON_MODE3 : bit absolute CCP1CON.3; + CCP1CON_MODE2 : bit absolute CCP1CON.2; + CCP1CON_MODE1 : bit absolute CCP1CON.1; + CCP1CON_MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CAP : byte absolute $0298; + CCPR7L : byte absolute $0299; + CCPR7H : byte absolute $029A; + CCP7CON : byte absolute $029B; + CCP7CAP : byte absolute $029C; + CCPTMRS1 : byte absolute $029E; + CCPTMRS1_C8TSEL1 : bit absolute CCPTMRS1.7; + CCPTMRS1_C8TSEL0 : bit absolute CCPTMRS1.6; + CCPTMRS1_C7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_C7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_C2TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_C2TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C1TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C1TSEL0 : bit absolute CCPTMRS1.0; + CCPTMRS2 : byte absolute $029F; + CCPTMRS2_P10TSEL1 : bit absolute CCPTMRS2.7; + CCPTMRS2_P10TSEL0 : bit absolute CCPTMRS2.6; + CCPTMRS2_P9TSEL1 : bit absolute CCPTMRS2.5; + CCPTMRS2_P9TSEL0 : bit absolute CCPTMRS2.4; + CCPTMRS2_P4TSEL1 : bit absolute CCPTMRS2.3; + CCPTMRS2_P4TSEL0 : bit absolute CCPTMRS2.2; + CCPTMRS2_P3TSEL1 : bit absolute CCPTMRS2.1; + CCPTMRS2_P3TSEL0 : bit absolute CCPTMRS2.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + CCPR8L : byte absolute $0311; + CCPR8H : byte absolute $0312; + CCP8CON : byte absolute $0313; + CCP8CAP : byte absolute $0314; + MD1CON0 : byte absolute $0315; + MD1CON1 : byte absolute $0316; + MD1SRC : byte absolute $0317; + MD1CARL : byte absolute $0318; + MD1CARH : byte absolute $0319; + MD2CON0 : byte absolute $031B; + MD2CON1 : byte absolute $031C; + MD2SRC : byte absolute $031D; + MD2CARL : byte absolute $031E; + MD2CARH : byte absolute $031F; + INLVLA : byte absolute $038C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVB3 : bit absolute INLVLB.3; + INLVLB_INLVB2 : bit absolute INLVLB.2; + INLVLB_INLVB1 : bit absolute INLVLB.1; + INLVLB_INLVB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVE : byte absolute $0390; + INLVE_INLVE3 : bit absolute INLVE.3; + INLVE_INLVE2 : bit absolute INLVE.2; + INLVE_INLVE1 : bit absolute INLVE.1; + INLVE_INLVE0 : bit absolute INLVE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + HIDRVB_HIDB0 : bit absolute HIDRVB.0; + TMR5L : byte absolute $040F; + TMR5H : byte absolute $0410; + T5CON : byte absolute $0411; + T5GCON : byte absolute $0412; + T4TMR : byte absolute $0413; + T4PR : byte absolute $0414; + T4CON : byte absolute $0415; + T4CON_CKPS2 : bit absolute T4CON.6; + T4CON_OUTPS3 : bit absolute T4CON.3; + T4CON_OUTPS2 : bit absolute T4CON.2; + T4CON_OUTPS1 : bit absolute T4CON.1; + T4CON_OUTPS0 : bit absolute T4CON.0; + T4HLT : byte absolute $0416; + T4HLT_PSYNC : bit absolute T4HLT.7; + T4HLT_CKPOL : bit absolute T4HLT.6; + T4HLT_CKSYNC : bit absolute T4HLT.5; + T4HLT_MODE4 : bit absolute T4HLT.4; + T4CLKCON : byte absolute $0417; + T4CLKCON_CS3 : bit absolute T4CLKCON.3; + T4CLKCON_CS2 : bit absolute T4CLKCON.2; + T4RST : byte absolute $0418; + T4RST_RSEL4 : bit absolute T4RST.4; + T4RST_RSEL3 : bit absolute T4RST.3; + T4RST_RSEL2 : bit absolute T4RST.2; + T4RST_RSEL1 : bit absolute T4RST.1; + T4RST_RSEL0 : bit absolute T4RST.0; + T6TMR : byte absolute $041A; + T6PR : byte absolute $041B; + T6CON : byte absolute $041C; + T6HLT : byte absolute $041D; + T6CLKCON : byte absolute $041E; + T6RST : byte absolute $041F; + ADRESL : byte absolute $048E; + ADRESH : byte absolute $048F; + ADCON0 : byte absolute $0490; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $0491; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $0492; + ADCON2_TRIGSEL5 : bit absolute ADCON2.5; + ADCON2_TRIGSEL4 : bit absolute ADCON2.4; + ADCON2_TRIGSEL3 : bit absolute ADCON2.3; + ADCON2_TRIGSEL2 : bit absolute ADCON2.2; + ADCON2_TRIGSEL1 : bit absolute ADCON2.1; + ADCON2_TRIGSEL0 : bit absolute ADCON2.0; + T2TMR : byte absolute $0493; + T2PR : byte absolute $0494; + T2CON : byte absolute $0495; + T2HLT : byte absolute $0496; + T2CLKCON : byte absolute $0497; + T2RST : byte absolute $0498; + T8TMR : byte absolute $049A; + T8PR : byte absolute $049B; + T8CON : byte absolute $049C; + T8HLT : byte absolute $049D; + T8CLKCON : byte absolute $049E; + T8RST : byte absolute $049F; + OPA1NCHS : byte absolute $050F; + OPA1PCHS : byte absolute $0510; + OPA1CON : byte absolute $0511; + OPA1CON_UG : bit absolute OPA1CON.4; + OPA1CON_ORPOL : bit absolute OPA1CON.2; + OPA1CON_ORM1 : bit absolute OPA1CON.1; + OPA1CON_ORM0 : bit absolute OPA1CON.0; + OPA1ORS : byte absolute $0512; + OPA2NCHS : byte absolute $0513; + OPA2PCHS : byte absolute $0514; + OPA2CON : byte absolute $0515; + OPA2ORS : byte absolute $0516; + OPA3NCHS : byte absolute $0517; + OPA3PCHS : byte absolute $0518; + OPA3CON : byte absolute $0519; + OPA3CON_SP : bit absolute OPA3CON.6; + OPA3ORS : byte absolute $051A; + OPA4NCHS : byte absolute $051B; + OPA4PCHS : byte absolute $051C; + OPA4CON : byte absolute $051D; + OPA4ORS : byte absolute $051E; + DACLD : byte absolute $058D; + DACLD_DAC6LD : bit absolute DACLD.5; + DACLD_DAC5LD : bit absolute DACLD.4; + DACLD_DAC2LD : bit absolute DACLD.1; + DACLD_DAC1LD : bit absolute DACLD.0; + DAC1CON0 : byte absolute $058E; + DAC1CON0_FM : bit absolute DAC1CON0.6; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS1 : bit absolute DAC1CON0.1; + DAC1CON0_NSS0 : bit absolute DAC1CON0.0; + DAC1REFL : byte absolute $058F; + DAC1REFL_REF7 : bit absolute DAC1REFL.7; + DAC1REFL_REF6 : bit absolute DAC1REFL.6; + DAC1REFL_REF5 : bit absolute DAC1REFL.5; + DAC1REFL_REF4 : bit absolute DAC1REFL.4; + DAC1REFL_REF3 : bit absolute DAC1REFL.3; + DAC1REFL_REF2 : bit absolute DAC1REFL.2; + DAC1REFL_REF1 : bit absolute DAC1REFL.1; + DAC1REFL_REF0 : bit absolute DAC1REFL.0; + DAC1REFH : byte absolute $0590; + DAC1REFH_REF15 : bit absolute DAC1REFH.7; + DAC1REFH_REF14 : bit absolute DAC1REFH.6; + DAC1REFH_REF13 : bit absolute DAC1REFH.5; + DAC1REFH_REF12 : bit absolute DAC1REFH.4; + DAC1REFH_REF11 : bit absolute DAC1REFH.3; + DAC1REFH_REF10 : bit absolute DAC1REFH.2; + DAC1REFH_REF9 : bit absolute DAC1REFH.1; + DAC1REFH_REF8 : bit absolute DAC1REFH.0; + DAC2CON0 : byte absolute $0591; + DAC2REFL : byte absolute $0592; + DAC2REFH : byte absolute $0593; + DAC3CON0 : byte absolute $0594; + DAC3REF : byte absolute $0595; + DAC3REF_DACR4 : bit absolute DAC3REF.4; + DAC3REF_DACR3 : bit absolute DAC3REF.3; + DAC3REF_DACR2 : bit absolute DAC3REF.2; + DAC3REF_DACR1 : bit absolute DAC3REF.1; + DAC3REF_DACR0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0596; + DAC4REF : byte absolute $0597; + DAC5CON0 : byte absolute $0598; + DAC5REFL : byte absolute $0599; + DAC5REFH : byte absolute $059A; + DAC6CON0 : byte absolute $059B; + DAC6REFL : byte absolute $059C; + DAC6REFH : byte absolute $059D; + DAC7CON0 : byte absolute $059E; + DAC7REF : byte absolute $059F; + DAC8CON0 : byte absolute $060C; + DAC8REF : byte absolute $060D; + PRG4RTSS : byte absolute $060E; + PRG4FTSS : byte absolute $060F; + PRG4INS : byte absolute $0610; + PRG4CON0 : byte absolute $0611; + PRG4CON0_FEDG : bit absolute PRG4CON0.5; + PRG4CON0_REDG : bit absolute PRG4CON0.4; + PRG4CON0_OS : bit absolute PRG4CON0.1; + PRG4CON1 : byte absolute $0612; + PRG4CON1_RDY : bit absolute PRG4CON1.2; + PRG4CON1_FPOL : bit absolute PRG4CON1.1; + PRG4CON1_RPOL : bit absolute PRG4CON1.0; + PRG4CON2 : byte absolute $0613; + PRG4CON2_ISET4 : bit absolute PRG4CON2.4; + PRG4CON2_ISET3 : bit absolute PRG4CON2.3; + PRG4CON2_ISET2 : bit absolute PRG4CON2.2; + PRG4CON2_ISET1 : bit absolute PRG4CON2.1; + PRG4CON2_ISET0 : bit absolute PRG4CON2.0; + PWM3DCL : byte absolute $0614; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0615; + PWM3CON : byte absolute $0616; + PWM4DCL : byte absolute $0617; + PWM4DCH : byte absolute $0618; + PWM4CON : byte absolute $0619; + PWM9DCL : byte absolute $061A; + PWM9DCH : byte absolute $061B; + PWM9CON : byte absolute $061C; + PWM10DCL : byte absolute $061D; + PWM10DCH : byte absolute $061E; + PWM10CON : byte absolute $061F; + COG1PHR : byte absolute $068D; + COG1PHR_PHR5 : bit absolute COG1PHR.5; + COG1PHR_PHR4 : bit absolute COG1PHR.4; + COG1PHR_PHR3 : bit absolute COG1PHR.3; + COG1PHR_PHR2 : bit absolute COG1PHR.2; + COG1PHR_PHR1 : bit absolute COG1PHR.1; + COG1PHR_PHR0 : bit absolute COG1PHR.0; + COG1PHF : byte absolute $068E; + COG1PHF_PHF5 : bit absolute COG1PHF.5; + COG1PHF_PHF4 : bit absolute COG1PHF.4; + COG1PHF_PHF3 : bit absolute COG1PHF.3; + COG1PHF_PHF2 : bit absolute COG1PHF.2; + COG1PHF_PHF1 : bit absolute COG1PHF.1; + COG1PHF_PHF0 : bit absolute COG1PHF.0; + COG1BLKR : byte absolute $068F; + COG1BLKR_BLKR5 : bit absolute COG1BLKR.5; + COG1BLKR_BLKR4 : bit absolute COG1BLKR.4; + COG1BLKR_BLKR3 : bit absolute COG1BLKR.3; + COG1BLKR_BLKR2 : bit absolute COG1BLKR.2; + COG1BLKR_BLKR1 : bit absolute COG1BLKR.1; + COG1BLKR_BLKR0 : bit absolute COG1BLKR.0; + COG1BLKF : byte absolute $0690; + COG1BLKF_BLKF5 : bit absolute COG1BLKF.5; + COG1BLKF_BLKF4 : bit absolute COG1BLKF.4; + COG1BLKF_BLKF3 : bit absolute COG1BLKF.3; + COG1BLKF_BLKF2 : bit absolute COG1BLKF.2; + COG1BLKF_BLKF1 : bit absolute COG1BLKF.1; + COG1BLKF_BLKF0 : bit absolute COG1BLKF.0; + COG1DBR : byte absolute $0691; + COG1DBR_DBR5 : bit absolute COG1DBR.5; + COG1DBR_DBR4 : bit absolute COG1DBR.4; + COG1DBR_DBR3 : bit absolute COG1DBR.3; + COG1DBR_DBR2 : bit absolute COG1DBR.2; + COG1DBR_DBR1 : bit absolute COG1DBR.1; + COG1DBR_DBR0 : bit absolute COG1DBR.0; + COG1DBF : byte absolute $0692; + COG1DBF_DBF5 : bit absolute COG1DBF.5; + COG1DBF_DBF4 : bit absolute COG1DBF.4; + COG1DBF_DBF3 : bit absolute COG1DBF.3; + COG1DBF_DBF2 : bit absolute COG1DBF.2; + COG1DBF_DBF1 : bit absolute COG1DBF.1; + COG1DBF_DBF0 : bit absolute COG1DBF.0; + COG1CON0 : byte absolute $0693; + COG1CON0_LD : bit absolute COG1CON0.6; + COG1CON0_MD2 : bit absolute COG1CON0.2; + COG1CON0_MD1 : bit absolute COG1CON0.1; + COG1CON0_MD0 : bit absolute COG1CON0.0; + COG1CON1 : byte absolute $0694; + COG1CON1_RDBS : bit absolute COG1CON1.7; + COG1CON1_FDBS : bit absolute COG1CON1.6; + COG1CON1_POLD : bit absolute COG1CON1.3; + COG1CON1_POLC : bit absolute COG1CON1.2; + COG1CON1_POLB : bit absolute COG1CON1.1; + COG1CON1_POLA : bit absolute COG1CON1.0; + COG1RIS0 : byte absolute $0695; + COG1RIS0_RIS7 : bit absolute COG1RIS0.7; + COG1RIS0_RIS6 : bit absolute COG1RIS0.6; + COG1RIS0_RIS5 : bit absolute COG1RIS0.5; + COG1RIS0_RIS4 : bit absolute COG1RIS0.4; + COG1RIS0_RIS3 : bit absolute COG1RIS0.3; + COG1RIS0_RIS2 : bit absolute COG1RIS0.2; + COG1RIS0_RIS1 : bit absolute COG1RIS0.1; + COG1RIS0_RIS0 : bit absolute COG1RIS0.0; + COG1RIS1 : byte absolute $0696; + COG1RIS1_RIS15 : bit absolute COG1RIS1.7; + COG1RIS1_RIS14 : bit absolute COG1RIS1.6; + COG1RIS1_RIS13 : bit absolute COG1RIS1.5; + COG1RIS1_RIS12 : bit absolute COG1RIS1.4; + COG1RIS1_RIS11 : bit absolute COG1RIS1.3; + COG1RIS1_RIS10 : bit absolute COG1RIS1.2; + COG1RIS1_RIS9 : bit absolute COG1RIS1.1; + COG1RIS1_RIS8 : bit absolute COG1RIS1.0; + COG1RSIM0 : byte absolute $0697; + COG1RSIM0_RSIM7 : bit absolute COG1RSIM0.7; + COG1RSIM0_RSIM6 : bit absolute COG1RSIM0.6; + COG1RSIM0_RSIM5 : bit absolute COG1RSIM0.5; + COG1RSIM0_RSIM4 : bit absolute COG1RSIM0.4; + COG1RSIM0_RSIM3 : bit absolute COG1RSIM0.3; + COG1RSIM0_RSIM2 : bit absolute COG1RSIM0.2; + COG1RSIM0_RSIM1 : bit absolute COG1RSIM0.1; + COG1RSIM0_RSIM0 : bit absolute COG1RSIM0.0; + COG1RSIM1 : byte absolute $0698; + COG1RSIM1_RSIM15 : bit absolute COG1RSIM1.7; + COG1RSIM1_RSIM14 : bit absolute COG1RSIM1.6; + COG1RSIM1_RSIM13 : bit absolute COG1RSIM1.5; + COG1RSIM1_RSIM12 : bit absolute COG1RSIM1.4; + COG1RSIM1_RSIM11 : bit absolute COG1RSIM1.3; + COG1RSIM1_RSIM10 : bit absolute COG1RSIM1.2; + COG1RSIM1_RSIM9 : bit absolute COG1RSIM1.1; + COG1RSIM1_RSIM8 : bit absolute COG1RSIM1.0; + COG1FIS0 : byte absolute $0699; + COG1FIS0_FIS7 : bit absolute COG1FIS0.7; + COG1FIS0_FIS6 : bit absolute COG1FIS0.6; + COG1FIS0_FIS5 : bit absolute COG1FIS0.5; + COG1FIS0_FIS4 : bit absolute COG1FIS0.4; + COG1FIS0_FIS3 : bit absolute COG1FIS0.3; + COG1FIS0_FIS2 : bit absolute COG1FIS0.2; + COG1FIS0_FIS1 : bit absolute COG1FIS0.1; + COG1FIS0_FIS0 : bit absolute COG1FIS0.0; + COG1FIS1 : byte absolute $069A; + COG1FIS1_FIS15 : bit absolute COG1FIS1.7; + COG1FIS1_FIS14 : bit absolute COG1FIS1.6; + COG1FIS1_FIS13 : bit absolute COG1FIS1.5; + COG1FIS1_FIS12 : bit absolute COG1FIS1.4; + COG1FIS1_FIS11 : bit absolute COG1FIS1.3; + COG1FIS1_FIS10 : bit absolute COG1FIS1.2; + COG1FIS1_FIS9 : bit absolute COG1FIS1.1; + COG1FIS1_FIS8 : bit absolute COG1FIS1.0; + COG1FSIM0 : byte absolute $069B; + COG1FSIM0_FSIM7 : bit absolute COG1FSIM0.7; + COG1FSIM0_FSIM6 : bit absolute COG1FSIM0.6; + COG1FSIM0_FSIM5 : bit absolute COG1FSIM0.5; + COG1FSIM0_FSIM4 : bit absolute COG1FSIM0.4; + COG1FSIM0_FSIM3 : bit absolute COG1FSIM0.3; + COG1FSIM0_FSIM2 : bit absolute COG1FSIM0.2; + COG1FSIM0_FSIM1 : bit absolute COG1FSIM0.1; + COG1FSIM0_FSIM0 : bit absolute COG1FSIM0.0; + COG1FSIM1 : byte absolute $069C; + COG1FSIM1_FSIM15 : bit absolute COG1FSIM1.7; + COG1FSIM1_FSIM14 : bit absolute COG1FSIM1.6; + COG1FSIM1_FSIM13 : bit absolute COG1FSIM1.5; + COG1FSIM1_FSIM12 : bit absolute COG1FSIM1.4; + COG1FSIM1_FSIM11 : bit absolute COG1FSIM1.3; + COG1FSIM1_FSIM10 : bit absolute COG1FSIM1.2; + COG1FSIM1_FSIM9 : bit absolute COG1FSIM1.1; + COG1FSIM1_FSIM8 : bit absolute COG1FSIM1.0; + COG1ASD0 : byte absolute $069D; + COG1ASD0_ASE : bit absolute COG1ASD0.7; + COG1ASD0_ASREN : bit absolute COG1ASD0.6; + COG1ASD0_ASDBD1 : bit absolute COG1ASD0.5; + COG1ASD0_ASDBD0 : bit absolute COG1ASD0.4; + COG1ASD0_ASDAC1 : bit absolute COG1ASD0.3; + COG1ASD0_ASDAC0 : bit absolute COG1ASD0.2; + COG1ASD1 : byte absolute $069E; + COG1ASD1_AS7E : bit absolute COG1ASD1.7; + COG1ASD1_AS6E : bit absolute COG1ASD1.6; + COG1ASD1_AS5E : bit absolute COG1ASD1.5; + COG1ASD1_AS4E : bit absolute COG1ASD1.4; + COG1ASD1_AS3E : bit absolute COG1ASD1.3; + COG1ASD1_AS2E : bit absolute COG1ASD1.2; + COG1ASD1_AS1E : bit absolute COG1ASD1.1; + COG1ASD1_AS0E : bit absolute COG1ASD1.0; + COG1STR : byte absolute $069F; + COG1STR_SDATD : bit absolute COG1STR.7; + COG1STR_SDATC : bit absolute COG1STR.6; + COG1STR_SDATB : bit absolute COG1STR.5; + COG1STR_SDATA : bit absolute COG1STR.4; + COG1STR_STRD : bit absolute COG1STR.3; + COG1STR_STRC : bit absolute COG1STR.2; + COG1STR_STRB : bit absolute COG1STR.1; + COG1STR_STRA : bit absolute COG1STR.0; + COG2PHR : byte absolute $070D; + COG2PHF : byte absolute $070E; + COG2BLKR : byte absolute $070F; + COG2BLKF : byte absolute $0710; + COG2DBR : byte absolute $0711; + COG2DBF : byte absolute $0712; + COG2CON0 : byte absolute $0713; + COG2CON1 : byte absolute $0714; + COG2RIS0 : byte absolute $0715; + COG2RIS1 : byte absolute $0716; + COG2RSIM0 : byte absolute $0717; + COG2RSIM1 : byte absolute $0718; + COG2FIS0 : byte absolute $0719; + COG2FIS1 : byte absolute $071A; + COG2FSIM0 : byte absolute $071B; + COG2FSIM1 : byte absolute $071C; + COG2ASD0 : byte absolute $071D; + COG2ASD1 : byte absolute $071E; + COG2STR : byte absolute $071F; + PRG1RTSS : byte absolute $078E; + PRG1FTSS : byte absolute $078F; + PRG1INS : byte absolute $0790; + PRG1CON0 : byte absolute $0791; + PRG1CON1 : byte absolute $0792; + PRG1CON2 : byte absolute $0793; + PRG2RTSS : byte absolute $0794; + PRG2FTSS : byte absolute $0795; + PRG2INS : byte absolute $0796; + PRG2CON0 : byte absolute $0797; + PRG2CON1 : byte absolute $0798; + PRG2CON2 : byte absolute $0799; + PRG3RTSS : byte absolute $079A; + PRG3FTSS : byte absolute $079B; + PRG3INS : byte absolute $079C; + PRG3CON0 : byte absolute $079D; + PRG3CON1 : byte absolute $079E; + PRG3CON2 : byte absolute $079F; + COG3PHR : byte absolute $080D; + COG3PHF : byte absolute $080E; + COG3BLKR : byte absolute $080F; + COG3BLKF : byte absolute $0810; + COG3DBR : byte absolute $0811; + COG3DBF : byte absolute $0812; + COG3CON0 : byte absolute $0813; + COG3CON1 : byte absolute $0814; + COG3RIS0 : byte absolute $0815; + COG3RIS1 : byte absolute $0816; + COG3RSIM0 : byte absolute $0817; + COG3RSIM1 : byte absolute $0818; + COG3FIS0 : byte absolute $0819; + COG3FIS1 : byte absolute $081A; + COG3FSIM0 : byte absolute $081B; + COG3FSIM1 : byte absolute $081C; + COG3ASD0 : byte absolute $081D; + COG3ASD1 : byte absolute $081E; + COG3STR : byte absolute $081F; + COG4PHR : byte absolute $088D; + COG4PHF : byte absolute $088E; + COG4BLKR : byte absolute $088F; + COG4BLKF : byte absolute $0890; + COG4DBR : byte absolute $0891; + COG4DBF : byte absolute $0892; + COG4CON0 : byte absolute $0893; + COG4CON1 : byte absolute $0894; + COG4RIS0 : byte absolute $0895; + COG4RIS1 : byte absolute $0896; + COG4RSIM0 : byte absolute $0897; + COG4RSIM1 : byte absolute $0898; + COG4FIS0 : byte absolute $0899; + COG4FIS1 : byte absolute $089A; + COG4FSIM0 : byte absolute $089B; + COG4FSIM1 : byte absolute $089C; + COG4ASD0 : byte absolute $089D; + COG4ASD1 : byte absolute $089E; + COG4STR : byte absolute $089F; + CM4CON0 : byte absolute $090C; + CM4CON1 : byte absolute $090D; + CM4NSEL : byte absolute $090E; + CM4PSEL : byte absolute $090F; + CM5CON0 : byte absolute $0910; + CM5CON1 : byte absolute $0911; + CM5NSEL : byte absolute $0912; + CM5PSEL : byte absolute $0913; + CM6CON0 : byte absolute $0914; + CM6CON1 : byte absolute $0915; + CM6NSEL : byte absolute $0916; + CM6PSEL : byte absolute $0917; + CM7CON0 : byte absolute $0918; + CM7CON1 : byte absolute $0919; + CM7NSEL : byte absolute $091A; + CM7PSEL : byte absolute $091B; + CM8CON0 : byte absolute $091C; + CM8CON1 : byte absolute $091D; + CM8NSEL : byte absolute $091E; + CM8PSEL : byte absolute $091F; + MD4CON0 : byte absolute $0D1B; + MD4CON1 : byte absolute $0D1C; + MD4SRC : byte absolute $0D1D; + MD4CARL : byte absolute $0D1E; + MD4CARH : byte absolute $0D1F; + PWMEN : byte absolute $0D8E; + PWMEN_MPWM12EN : bit absolute PWMEN.3; + PWMEN_MPWM11EN : bit absolute PWMEN.2; + PWMEN_MPWM6EN : bit absolute PWMEN.1; + PWMEN_MPWM5EN : bit absolute PWMEN.0; + PWMLD : byte absolute $0D8F; + PWMLD_MPWM12LD : bit absolute PWMLD.3; + PWMLD_MPWM11LD : bit absolute PWMLD.2; + PWMLD_MPWM6LD : bit absolute PWMLD.1; + PWMLD_MPWM5LD : bit absolute PWMLD.0; + PWMOUT : byte absolute $0D90; + PWMOUT_MPWM12OUT : bit absolute PWMOUT.3; + PWMOUT_MPWM11OUT : bit absolute PWMOUT.2; + PWMOUT_MPWM6OUT : bit absolute PWMOUT.1; + PWMOUT_MPWM5OUT : bit absolute PWMOUT.0; + PWM5PHL : byte absolute $0D91; + PWM5PHH : byte absolute $0D92; + PWM5DCL : byte absolute $0D93; + PWM5DCH : byte absolute $0D94; + PWM5PRL : byte absolute $0D95; + PWM5PRH : byte absolute $0D96; + PWM5OFL : byte absolute $0D97; + PWM5OFH : byte absolute $0D98; + PWM5TMRL : byte absolute $0D99; + PWM5TMRH : byte absolute $0D9A; + PWM5CON : byte absolute $0D9B; + PWM5INTE : byte absolute $0D9C; + PWM5INTE_OFIE : bit absolute PWM5INTE.3; + PWM5INTE_PHIE : bit absolute PWM5INTE.2; + PWM5INTE_DCIE : bit absolute PWM5INTE.1; + PWM5INTE_PRIE : bit absolute PWM5INTE.0; + PWM5INTF : byte absolute $0D9D; + PWM5INTF_OFIF : bit absolute PWM5INTF.3; + PWM5INTF_PHIF : bit absolute PWM5INTF.2; + PWM5INTF_DCIF : bit absolute PWM5INTF.1; + PWM5INTF_PRIF : bit absolute PWM5INTF.0; + PWM5CLKCON : byte absolute $0D9E; + PWM5LDCON : byte absolute $0D9F; + PWM5LDCON_LDA : bit absolute PWM5LDCON.7; + PWM5LDCON_LDT : bit absolute PWM5LDCON.6; + PWM5LDCON_LDS1 : bit absolute PWM5LDCON.1; + PWM5LDCON_LDS0 : bit absolute PWM5LDCON.0; + PWM5OFCON : byte absolute $0DA0; + PWM5OFCON_OFM1 : bit absolute PWM5OFCON.6; + PWM5OFCON_OFM0 : bit absolute PWM5OFCON.5; + PWM5OFCON_OFO : bit absolute PWM5OFCON.4; + PWM5OFCON_OFS1 : bit absolute PWM5OFCON.1; + PWM5OFCON_OFS0 : bit absolute PWM5OFCON.0; + PWM6PHL : byte absolute $0DA1; + PWM6PHH : byte absolute $0DA2; + PWM6DCL : byte absolute $0DA3; + PWM6DCH : byte absolute $0DA4; + PWM6PRL : byte absolute $0DA5; + PWM6PRH : byte absolute $0DA6; + PWM6OFL : byte absolute $0DA7; + PWM6OFH : byte absolute $0DA8; + PWM6TMRL : byte absolute $0DA9; + PWM6TMRH : byte absolute $0DAA; + PWM6CON : byte absolute $0DAB; + PWM6INTE : byte absolute $0DAC; + PWM6INTF : byte absolute $0DAD; + PWM6CLKCON : byte absolute $0DAE; + PWM6LDCON : byte absolute $0DAF; + PWM6OFCON : byte absolute $0DB0; + PWM11PHL : byte absolute $0DB1; + PWM11PHH : byte absolute $0DB2; + PWM11DCL : byte absolute $0DB3; + PWM11DCH : byte absolute $0DB4; + PWM11PRL : byte absolute $0DB5; + PWM11PRH : byte absolute $0DB6; + PWM11OFL : byte absolute $0DB7; + PWM11OFH : byte absolute $0DB8; + PWM11TMRL : byte absolute $0DB9; + PWM11TMRH : byte absolute $0DBA; + PWM11CON : byte absolute $0DBB; + PWM11INTE : byte absolute $0DBC; + PWM11INTF : byte absolute $0DBD; + PWM11CLKCON : byte absolute $0DBE; + PWM11LDCON : byte absolute $0DBF; + PWM11OFCON : byte absolute $0DC0; + PWM12PHL : byte absolute $0DC1; + PWM12PHH : byte absolute $0DC2; + PWM12DCL : byte absolute $0DC3; + PWM12DCH : byte absolute $0DC4; + PWM12PRL : byte absolute $0DC5; + PWM12PRH : byte absolute $0DC6; + PWM12OFL : byte absolute $0DC7; + PWM12OFH : byte absolute $0DC8; + PWM12TMRL : byte absolute $0DC9; + PWM12TMRH : byte absolute $0DCA; + PWM12CON : byte absolute $0DCB; + PWM12INTE : byte absolute $0DCC; + PWM12INTF : byte absolute $0DCD; + PWM12CLKCON : byte absolute $0DCE; + PWM12LDCON : byte absolute $0DCF; + PWM12OFCON : byte absolute $0DD0; + PPSLOCK : byte absolute $0E0C; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E0D; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E0E; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E0F; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E10; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E11; + T3CKIPPS_T3CKIPPS5 : bit absolute T3CKIPPS.5; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E12; + T3GPPS_T3GPPS5 : bit absolute T3GPPS.5; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E13; + T5CKIPPS_T5CKIPPS5 : bit absolute T5CKIPPS.5; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E14; + T5GPPS_T5GPPS5 : bit absolute T5GPPS.5; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $0E15; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $0E16; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $0E17; + T6INPPS_T6INPPS5 : bit absolute T6INPPS.5; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + T8INPPS : byte absolute $0E18; + T8INPPS_T8INPPS5 : bit absolute T8INPPS.5; + T8INPPS_T8INPPS4 : bit absolute T8INPPS.4; + T8INPPS_T8INPPS3 : bit absolute T8INPPS.3; + T8INPPS_T8INPPS2 : bit absolute T8INPPS.2; + T8INPPS_T8INPPS1 : bit absolute T8INPPS.1; + T8INPPS_T8INPPS0 : bit absolute T8INPPS.0; + CCP1PPS : byte absolute $0E19; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E1A; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP7PPS : byte absolute $0E1B; + CCP7PPS_CCP7PPS5 : bit absolute CCP7PPS.5; + CCP7PPS_CCP7PPS4 : bit absolute CCP7PPS.4; + CCP7PPS_CCP7PPS3 : bit absolute CCP7PPS.3; + CCP7PPS_CCP7PPS2 : bit absolute CCP7PPS.2; + CCP7PPS_CCP7PPS1 : bit absolute CCP7PPS.1; + CCP7PPS_CCP7PPS0 : bit absolute CCP7PPS.0; + CCP8PPS : byte absolute $0E1C; + CCP8PPS_CCP8PPS5 : bit absolute CCP8PPS.5; + CCP8PPS_CCP8PPS4 : bit absolute CCP8PPS.4; + CCP8PPS_CCP8PPS3 : bit absolute CCP8PPS.3; + CCP8PPS_CCP8PPS2 : bit absolute CCP8PPS.2; + CCP8PPS_CCP8PPS1 : bit absolute CCP8PPS.1; + CCP8PPS_CCP8PPS0 : bit absolute CCP8PPS.0; + COG1INPPS : byte absolute $0E1D; + COG1INPPS_COG1INPPS5 : bit absolute COG1INPPS.5; + COG1INPPS_COG1INPPS4 : bit absolute COG1INPPS.4; + COG1INPPS_COG1INPPS3 : bit absolute COG1INPPS.3; + COG1INPPS_COG1INPPS2 : bit absolute COG1INPPS.2; + COG1INPPS_COG1INPPS1 : bit absolute COG1INPPS.1; + COG1INPPS_COG1INPPS0 : bit absolute COG1INPPS.0; + COG2INPPS : byte absolute $0E1E; + COG2INPPS_COG2INPPS5 : bit absolute COG2INPPS.5; + COG2INPPS_COG2INPPS4 : bit absolute COG2INPPS.4; + COG2INPPS_COG2INPPS3 : bit absolute COG2INPPS.3; + COG2INPPS_COG2INPPS2 : bit absolute COG2INPPS.2; + COG2INPPS_COG2INPPS1 : bit absolute COG2INPPS.1; + COG2INPPS_COG2INPPS0 : bit absolute COG2INPPS.0; + COG3INPPS : byte absolute $0E1F; + COG3INPPS_COG3INPPS5 : bit absolute COG3INPPS.5; + COG3INPPS_COG3INPPS4 : bit absolute COG3INPPS.4; + COG3INPPS_COG3INPPS3 : bit absolute COG3INPPS.3; + COG3INPPS_COG3INPPS2 : bit absolute COG3INPPS.2; + COG3INPPS_COG3INPPS1 : bit absolute COG3INPPS.1; + COG3INPPS_COG3INPPS0 : bit absolute COG3INPPS.0; + COG4INPPS : byte absolute $0E20; + COG4INPPS_COG4INPPS5 : bit absolute COG4INPPS.5; + COG4INPPS_COG4INPPS4 : bit absolute COG4INPPS.4; + COG4INPPS_COG4INPPS3 : bit absolute COG4INPPS.3; + COG4INPPS_COG4INPPS2 : bit absolute COG4INPPS.2; + COG4INPPS_COG4INPPS1 : bit absolute COG4INPPS.1; + COG4INPPS_COG4INPPS0 : bit absolute COG4INPPS.0; + MD1CLPPS : byte absolute $0E21; + MD1CLPPS_MD1CLPPS5 : bit absolute MD1CLPPS.5; + MD1CLPPS_MD1CLPPS4 : bit absolute MD1CLPPS.4; + MD1CLPPS_MD1CLPPS3 : bit absolute MD1CLPPS.3; + MD1CLPPS_MD1CLPPS2 : bit absolute MD1CLPPS.2; + MD1CLPPS_MD1CLPPS1 : bit absolute MD1CLPPS.1; + MD1CLPPS_MD1CLPPS0 : bit absolute MD1CLPPS.0; + MD1CHPPS : byte absolute $0E22; + MD1CHPPS_MD1CHPPS5 : bit absolute MD1CHPPS.5; + MD1CHPPS_MD1CHPPS4 : bit absolute MD1CHPPS.4; + MD1CHPPS_MD1CHPPS3 : bit absolute MD1CHPPS.3; + MD1CHPPS_MD1CHPPS2 : bit absolute MD1CHPPS.2; + MD1CHPPS_MD1CHPPS1 : bit absolute MD1CHPPS.1; + MD1CHPPS_MD1CHPPS0 : bit absolute MD1CHPPS.0; + MD1MODPPS : byte absolute $0E23; + MD1MODPPS_MD1MODPPS5 : bit absolute MD1MODPPS.5; + MD1MODPPS_MD1MODPPS4 : bit absolute MD1MODPPS.4; + MD1MODPPS_MD1MODPPS3 : bit absolute MD1MODPPS.3; + MD1MODPPS_MD1MODPPS2 : bit absolute MD1MODPPS.2; + MD1MODPPS_MD1MODPPS1 : bit absolute MD1MODPPS.1; + MD1MODPPS_MD1MODPPS0 : bit absolute MD1MODPPS.0; + MD2CLPPS : byte absolute $0E24; + MD2CLPPS_MD2CLPPS5 : bit absolute MD2CLPPS.5; + MD2CLPPS_MD2CLPPS4 : bit absolute MD2CLPPS.4; + MD2CLPPS_MD2CLPPS3 : bit absolute MD2CLPPS.3; + MD2CLPPS_MD2CLPPS2 : bit absolute MD2CLPPS.2; + MD2CLPPS_MD2CLPPS1 : bit absolute MD2CLPPS.1; + MD2CLPPS_MD2CLPPS0 : bit absolute MD2CLPPS.0; + MD2CHPPS : byte absolute $0E25; + MD2CHPPS_MD2CHPPS5 : bit absolute MD2CHPPS.5; + MD2CHPPS_MD2CHPPS4 : bit absolute MD2CHPPS.4; + MD2CHPPS_MD2CHPPS3 : bit absolute MD2CHPPS.3; + MD2CHPPS_MD2CHPPS2 : bit absolute MD2CHPPS.2; + MD2CHPPS_MD2CHPPS1 : bit absolute MD2CHPPS.1; + MD2CHPPS_MD2CHPPS0 : bit absolute MD2CHPPS.0; + MD2MODPPS : byte absolute $0E26; + MD2MODPPS_MD2MODPPS5 : bit absolute MD2MODPPS.5; + MD2MODPPS_MD2MODPPS4 : bit absolute MD2MODPPS.4; + MD2MODPPS_MD2MODPPS3 : bit absolute MD2MODPPS.3; + MD2MODPPS_MD2MODPPS2 : bit absolute MD2MODPPS.2; + MD2MODPPS_MD2MODPPS1 : bit absolute MD2MODPPS.1; + MD2MODPPS_MD2MODPPS0 : bit absolute MD2MODPPS.0; + MD3CLPPS : byte absolute $0E27; + MD3CLPPS_MD3CLPPS5 : bit absolute MD3CLPPS.5; + MD3CLPPS_MD3CLPPS4 : bit absolute MD3CLPPS.4; + MD3CLPPS_MD3CLPPS3 : bit absolute MD3CLPPS.3; + MD3CLPPS_MD3CLPPS2 : bit absolute MD3CLPPS.2; + MD3CLPPS_MD3CLPPS1 : bit absolute MD3CLPPS.1; + MD3CLPPS_MD3CLPPS0 : bit absolute MD3CLPPS.0; + MD3CHPPS : byte absolute $0E28; + MD3CHPPS_MD3CHPPS5 : bit absolute MD3CHPPS.5; + MD3CHPPS_MD3CHPPS4 : bit absolute MD3CHPPS.4; + MD3CHPPS_MD3CHPPS3 : bit absolute MD3CHPPS.3; + MD3CHPPS_MD3CHPPS2 : bit absolute MD3CHPPS.2; + MD3CHPPS_MD3CHPPS1 : bit absolute MD3CHPPS.1; + MD3CHPPS_MD3CHPPS0 : bit absolute MD3CHPPS.0; + MD3MODPPS : byte absolute $0E29; + MD3MODPPS_MD3MODPPS5 : bit absolute MD3MODPPS.5; + MD3MODPPS_MD3MODPPS4 : bit absolute MD3MODPPS.4; + MD3MODPPS_MD3MODPPS3 : bit absolute MD3MODPPS.3; + MD3MODPPS_MD3MODPPS2 : bit absolute MD3MODPPS.2; + MD3MODPPS_MD3MODPPS1 : bit absolute MD3MODPPS.1; + MD3MODPPS_MD3MODPPS0 : bit absolute MD3MODPPS.0; + MD4CLPPS : byte absolute $0E2A; + MD4CLPPS_MD4CLPPS5 : bit absolute MD4CLPPS.5; + MD4CLPPS_MD4CLPPS4 : bit absolute MD4CLPPS.4; + MD4CLPPS_MD4CLPPS3 : bit absolute MD4CLPPS.3; + MD4CLPPS_MD4CLPPS2 : bit absolute MD4CLPPS.2; + MD4CLPPS_MD4CLPPS1 : bit absolute MD4CLPPS.1; + MD4CLPPS_MD4CLPPS0 : bit absolute MD4CLPPS.0; + MD4CHPPS : byte absolute $0E2B; + MD4CHPPS_MD4CHPPS5 : bit absolute MD4CHPPS.5; + MD4CHPPS_MD4CHPPS4 : bit absolute MD4CHPPS.4; + MD4CHPPS_MD4CHPPS3 : bit absolute MD4CHPPS.3; + MD4CHPPS_MD4CHPPS2 : bit absolute MD4CHPPS.2; + MD4CHPPS_MD4CHPPS1 : bit absolute MD4CHPPS.1; + MD4CHPPS_MD4CHPPS0 : bit absolute MD4CHPPS.0; + MD4MODPPS : byte absolute $0E2C; + MD4MODPPS_MD4MODPPS5 : bit absolute MD4MODPPS.5; + MD4MODPPS_MD4MODPPS4 : bit absolute MD4MODPPS.4; + MD4MODPPS_MD4MODPPS3 : bit absolute MD4MODPPS.3; + MD4MODPPS_MD4MODPPS2 : bit absolute MD4MODPPS.2; + MD4MODPPS_MD4MODPPS1 : bit absolute MD4MODPPS.1; + MD4MODPPS_MD4MODPPS0 : bit absolute MD4MODPPS.0; + PRG1RPPS : byte absolute $0E2D; + PRG1RPPS_PRG1RPPS5 : bit absolute PRG1RPPS.5; + PRG1RPPS_PRG1RPPS4 : bit absolute PRG1RPPS.4; + PRG1RPPS_PRG1RPPS3 : bit absolute PRG1RPPS.3; + PRG1RPPS_PRG1RPPS2 : bit absolute PRG1RPPS.2; + PRG1RPPS_PRG1RPPS1 : bit absolute PRG1RPPS.1; + PRG1RPPS_PRG1RPPS0 : bit absolute PRG1RPPS.0; + PRG1FPPS : byte absolute $0E2E; + PRG1FPPS_PRG1FPPS5 : bit absolute PRG1FPPS.5; + PRG1FPPS_PRG1FPPS4 : bit absolute PRG1FPPS.4; + PRG1FPPS_PRG1FPPS3 : bit absolute PRG1FPPS.3; + PRG1FPPS_PRG1FPPS2 : bit absolute PRG1FPPS.2; + PRG1FPPS_PRG1FPPS1 : bit absolute PRG1FPPS.1; + PRG1FPPS_PRG1FPPS0 : bit absolute PRG1FPPS.0; + PRG2RPPS : byte absolute $0E2F; + PRG2RPPS_PRG2RPPS5 : bit absolute PRG2RPPS.5; + PRG2RPPS_PRG2RPPS4 : bit absolute PRG2RPPS.4; + PRG2RPPS_PRG2RPPS3 : bit absolute PRG2RPPS.3; + PRG2RPPS_PRG2RPPS2 : bit absolute PRG2RPPS.2; + PRG2RPPS_PRG2RPPS1 : bit absolute PRG2RPPS.1; + PRG2RPPS_PRG2RPPS0 : bit absolute PRG2RPPS.0; + PRG2FPPS : byte absolute $0E30; + PRG2FPPS_PRG2FPPS5 : bit absolute PRG2FPPS.5; + PRG2FPPS_PRG2FPPS4 : bit absolute PRG2FPPS.4; + PRG2FPPS_PRG2FPPS3 : bit absolute PRG2FPPS.3; + PRG2FPPS_PRG2FPPS2 : bit absolute PRG2FPPS.2; + PRG2FPPS_PRG2FPPS1 : bit absolute PRG2FPPS.1; + PRG2FPPS_PRG2FPPS0 : bit absolute PRG2FPPS.0; + PRG3RPPS : byte absolute $0E31; + PRG3RPPS_PRG3RPPS5 : bit absolute PRG3RPPS.5; + PRG3RPPS_PRG3RPPS4 : bit absolute PRG3RPPS.4; + PRG3RPPS_PRG3RPPS3 : bit absolute PRG3RPPS.3; + PRG3RPPS_PRG3RPPS2 : bit absolute PRG3RPPS.2; + PRG3RPPS_PRG3RPPS1 : bit absolute PRG3RPPS.1; + PRG3RPPS_PRG3RPPS0 : bit absolute PRG3RPPS.0; + PRG3FPPS : byte absolute $0E32; + PRG3FPPS_PRG3FPPS5 : bit absolute PRG3FPPS.5; + PRG3FPPS_PRG3FPPS4 : bit absolute PRG3FPPS.4; + PRG3FPPS_PRG3FPPS3 : bit absolute PRG3FPPS.3; + PRG3FPPS_PRG3FPPS2 : bit absolute PRG3FPPS.2; + PRG3FPPS_PRG3FPPS1 : bit absolute PRG3FPPS.1; + PRG3FPPS_PRG3FPPS0 : bit absolute PRG3FPPS.0; + PRG4RPPS : byte absolute $0E33; + PRG4RPPS_PRG4RPPS5 : bit absolute PRG4RPPS.5; + PRG4RPPS_PRG4RPPS4 : bit absolute PRG4RPPS.4; + PRG4RPPS_PRG4RPPS3 : bit absolute PRG4RPPS.3; + PRG4RPPS_PRG4RPPS2 : bit absolute PRG4RPPS.2; + PRG4RPPS_PRG4RPPS1 : bit absolute PRG4RPPS.1; + PRG4RPPS_PRG4RPPS0 : bit absolute PRG4RPPS.0; + PRG4FPPS : byte absolute $0E34; + PRG4FPPS_PRG4FPPS5 : bit absolute PRG4FPPS.5; + PRG4FPPS_PRG4FPPS4 : bit absolute PRG4FPPS.4; + PRG4FPPS_PRG4FPPS3 : bit absolute PRG4FPPS.3; + PRG4FPPS_PRG4FPPS2 : bit absolute PRG4FPPS.2; + PRG4FPPS_PRG4FPPS1 : bit absolute PRG4FPPS.1; + PRG4FPPS_PRG4FPPS0 : bit absolute PRG4FPPS.0; + CLCIN0PPS : byte absolute $0E35; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E36; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E37; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E38; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0E39; + ADCACTPPS_ADCACTPPS5 : bit absolute ADCACTPPS.5; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSPCLKPPS : byte absolute $0E3A; + SSPCLKPPS_SSPCLKPPS5 : bit absolute SSPCLKPPS.5; + SSPCLKPPS_SSPCLKPPS4 : bit absolute SSPCLKPPS.4; + SSPCLKPPS_SSPCLKPPS3 : bit absolute SSPCLKPPS.3; + SSPCLKPPS_SSPCLKPPS2 : bit absolute SSPCLKPPS.2; + SSPCLKPPS_SSPCLKPPS1 : bit absolute SSPCLKPPS.1; + SSPCLKPPS_SSPCLKPPS0 : bit absolute SSPCLKPPS.0; + SSPDATPPS : byte absolute $0E3B; + SSPDATPPS_SSPDATPPS5 : bit absolute SSPDATPPS.5; + SSPDATPPS_SSPDATPPS4 : bit absolute SSPDATPPS.4; + SSPDATPPS_SSPDATPPS3 : bit absolute SSPDATPPS.3; + SSPDATPPS_SSPDATPPS2 : bit absolute SSPDATPPS.2; + SSPDATPPS_SSPDATPPS1 : bit absolute SSPDATPPS.1; + SSPDATPPS_SSPDATPPS0 : bit absolute SSPDATPPS.0; + SSPSSPPS : byte absolute $0E3C; + SSPSSPPS_SSPSSPPS5 : bit absolute SSPSSPPS.5; + SSPSSPPS_SSPSSPPS4 : bit absolute SSPSSPPS.4; + SSPSSPPS_SSPSSPPS3 : bit absolute SSPSSPPS.3; + SSPSSPPS_SSPSSPPS2 : bit absolute SSPSSPPS.2; + SSPSSPPS_SSPSSPPS1 : bit absolute SSPSSPPS.1; + SSPSSPPS_SSPSSPPS0 : bit absolute SSPSSPPS.0; + RXPPS : byte absolute $0E3D; + RXPPS_RXPPS5 : bit absolute RXPPS.5; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + CKPPS : byte absolute $0E3E; + CKPPS_CKPPS5 : bit absolute CKPPS.5; + CKPPS_CKPPS4 : bit absolute CKPPS.4; + CKPPS_CKPPS3 : bit absolute CKPPS.3; + CKPPS_CKPPS2 : bit absolute CKPPS.2; + CKPPS_CKPPS1 : bit absolute CKPPS.1; + CKPPS_CKPPS0 : bit absolute CKPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0E93; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0E96; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0E97; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0E98; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0E99; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0E9A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0E9B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0EA8; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0EA9; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0EAA; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0EAB; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0EAC; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0EAD; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0EAE; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0EAF; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0EB0; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0EB1; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0EB2; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MCLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MCLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MCLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01F:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR3L, TMR3H, T3CON, T3GCON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, BORCON, FVRCON, ZCD1CON + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11D:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL, CM3CON0, CM3CON1, CM3NSEL, CM3PSEL + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, PMADRL, PMADRH, PMDATL, PMDATH, PMCON1, PMCON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '21B-21F:SFR'} // Bank 4 : MD3CON0, MD3CON1, MD3SRC, MD3CARL, MD3CARH + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29C:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR7L, CCPR7H, CCP7CON, CCP7CAP + {$SET_STATE_RAM '29E-29F:SFR'} // Bank 5 : CCPTMRS1, CCPTMRS2 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-319:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE, CCPR8L, CCPR8H, CCP8CON, CCP8CAP, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '31B-31F:SFR'} // Bank 6 : MD2CON0, MD2CON1, MD2SRC, MD2CARL, MD2CARH + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '40F-418:SFR'} // Bank 8 : TMR5L, TMR5H, T5CON, T5GCON, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '41A-41F:SFR'} // Bank 8 : T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48E-498:SFR'} // Bank 9 : ADRESL, ADRESH, ADCON0, ADCON1, ADCON2, T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST + {$SET_STATE_RAM '49A-49F:SFR'} // Bank 9 : T8TMR, T8PR, T8CON, T8HLT, T8CLKCON, T8RST + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50F-51E:SFR'} // Bank 10 : OPA1NCHS, OPA1PCHS, OPA1CON, OPA1ORS, OPA2NCHS, OPA2PCHS, OPA2CON, OPA2ORS, OPA3NCHS, OPA3PCHS, OPA3CON, OPA3ORS, OPA4NCHS, OPA4PCHS, OPA4CON, OPA4ORS + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58D-59F:SFR'} // Bank 11 : DACLD, DAC1CON0, DAC1REFL, DAC1REFH, DAC2CON0, DAC2REFL, DAC2REFH, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF, DAC5CON0, DAC5REFL, DAC5REFH, DAC6CON0, DAC6REFL, DAC6REFH, DAC7CON0, DAC7REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-61F:SFR'} // Bank 12 : DAC8CON0, DAC8REF, PRG4RTSS, PRG4FTSS, PRG4INS, PRG4CON0, PRG4CON1, PRG4CON2, PWM3DCL, PWM3DCH, PWM3CON, PWM4DCL, PWM4DCH, PWM4CON, PWM9DCL, PWM9DCH, PWM9CON, PWM10DCL, PWM10DCH, PWM10CON + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68D-69F:SFR'} // Bank 13 : COG1PHR, COG1PHF, COG1BLKR, COG1BLKF, COG1DBR, COG1DBF, COG1CON0, COG1CON1, COG1RIS0, COG1RIS1, COG1RSIM0, COG1RSIM1, COG1FIS0, COG1FIS1, COG1FSIM0, COG1FSIM1, COG1ASD0, COG1ASD1, COG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70D-71F:SFR'} // Bank 14 : COG2PHR, COG2PHF, COG2BLKR, COG2BLKF, COG2DBR, COG2DBF, COG2CON0, COG2CON1, COG2RIS0, COG2RIS1, COG2RSIM0, COG2RSIM1, COG2FIS0, COG2FIS1, COG2FSIM0, COG2FSIM1, COG2ASD0, COG2ASD1, COG2STR + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '78E-79F:SFR'} // Bank 15 : PRG1RTSS, PRG1FTSS, PRG1INS, PRG1CON0, PRG1CON1, PRG1CON2, PRG2RTSS, PRG2FTSS, PRG2INS, PRG2CON0, PRG2CON1, PRG2CON2, PRG3RTSS, PRG3FTSS, PRG3INS, PRG3CON0, PRG3CON1, PRG3CON2 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80D-81F:SFR'} // Bank 16 : COG3PHR, COG3PHF, COG3BLKR, COG3BLKF, COG3DBR, COG3DBF, COG3CON0, COG3CON1, COG3RIS0, COG3RIS1, COG3RSIM0, COG3RSIM1, COG3FIS0, COG3FIS1, COG3FSIM0, COG3FSIM1, COG3ASD0, COG3ASD1, COG3STR + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88D-89F:SFR'} // Bank 17 : COG4PHR, COG4PHF, COG4BLKR, COG4BLKF, COG4DBR, COG4DBF, COG4CON0, COG4CON1, COG4RIS0, COG4RIS1, COG4RSIM0, COG4RSIM1, COG4FIS0, COG4FIS1, COG4FSIM0, COG4FSIM1, COG4ASD0, COG4ASD1, COG4STR + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-91F:SFR'} // Bank 18 : CM4CON0, CM4CON1, CM4NSEL, CM4PSEL, CM5CON0, CM5CON1, CM5NSEL, CM5PSEL, CM6CON0, CM6CON1, CM6NSEL, CM6PSEL, CM7CON0, CM7CON1, CM7NSEL, CM7PSEL, CM8CON0, CM8CON1, CM8NSEL, CM8PSEL + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'D1B-D1F:SFR'} // Bank 26 : MD4CON0, MD4CON1, MD4SRC, MD4CARL, MD4CARH + {$SET_STATE_RAM 'D8E-DD0:SFR'} // Bank 27 : PWMEN, PWMLD, PWMOUT, PWM5PHL, PWM5PHH, PWM5DCL, PWM5DCH, PWM5PRL, PWM5PRH, PWM5OFL, PWM5OFH, PWM5TMRL, PWM5TMRH, PWM5CON, PWM5INTE, PWM5INTF, PWM5CLKCON, PWM5LDCON, PWM5OFCON, PWM6PHL, PWM6PHH, PWM6DCL, PWM6DCH, PWM6PRL, PWM6PRH, PWM6OFL, PWM6OFH, PWM6TMRL, PWM6TMRH, PWM6CON, PWM6INTE, PWM6INTF, PWM6CLKCON, PWM6LDCON, PWM6OFCON, PWM11PHL, PWM11PHH, PWM11DCL, PWM11DCH, PWM11PRL, PWM11PRH, PWM11OFL, PWM11OFH, PWM11TMRL, PWM11TMRH, PWM11CON, PWM11INTE, PWM11INTF, PWM11CLKCON, PWM11LDCON, PWM11OFCON, PWM12PHL, PWM12PHH, PWM12DCL, PWM12DCH, PWM12PRL, PWM12PRH, PWM12OFL, PWM12OFH, PWM12TMRL, PWM12TMRH, PWM12CON, PWM12INTE, PWM12INTF, PWM12CLKCON, PWM12LDCON, PWM12OFCON + {$SET_STATE_RAM 'E0C-E3E:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS, T2INPPS, T4INPPS, T6INPPS, T8INPPS, CCP1PPS, CCP2PPS, CCP7PPS, CCP8PPS, COG1INPPS, COG2INPPS, COG3INPPS, COG4INPPS, MD1CLPPS, MD1CHPPS, MD1MODPPS, MD2CLPPS, MD2CHPPS, MD2MODPPS, MD3CLPPS, MD3CHPPS, MD3MODPPS, MD4CLPPS, MD4CHPPS, MD4MODPPS, PRG1RPPS, PRG1FPPS, PRG2RPPS, PRG2FPPS, PRG3RPPS, PRG3FPPS, PRG4RPPS, PRG4FPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, ADCACTPPS, SSPCLKPPS, SSPDATPPS, SSPSSPPS, RXPPS, CKPPS + {$SET_STATE_RAM 'E90-EB2:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:7F'} // PIR4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:7F'} // PIE4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:DF'} // CM1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:0F'} // CM1NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CM1PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:DF'} // CM2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:0F'} // CM2NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:0F'} // CM2PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11A:DF'} // CM3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:03'} // CM3CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:0F'} // CM3NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:0F'} // CM3PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:FC'} // ANSELC bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // PMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:B1'} // MD3CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:33'} // MD3CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // MD3SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21E:1F'} // MD3CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:1F'} // MD3CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29B:BF'} // CCP7CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // CCP7CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP8CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP8CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '315:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:1F'} // MD1CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '319:1F'} // MD1CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:B1'} // MD2CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '31C:33'} // MD2CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '31D:1F'} // MD2SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:1F'} // MD2CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:1F'} // MD2CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:03'} // HIDRVB bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '418:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '491:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '492:3F'} // ADCON2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:0F'} // T8CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:1F'} // T8RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '50F:0F'} // OPA1NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '510:0F'} // OPA1PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:97'} // OPA1CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '512:1F'} // OPA1ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:0F'} // OPA2NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '514:0F'} // OPA2PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:97'} // OPA2CON bits 6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '516:1F'} // OPA2ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '517:0F'} // OPA3NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:0F'} // OPA3PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:D7'} // OPA3CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:1F'} // OPA3ORS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:0F'} // OPA4NCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:0F'} // OPA4PCHS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:D7'} // OPA4CON bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '58D:33'} // DACLD bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:BF'} // DAC3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:BF'} // DAC4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '597:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // DAC7CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '59F:1F'} // DAC7REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:BF'} // DAC8CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:1F'} // DAC8REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:0F'} // PRG4RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:0F'} // PRG4FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:0F'} // PRG4INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:BF'} // PRG4CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:07'} // PRG4CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:1F'} // PRG4CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '614:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM9DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM9CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:C0'} // PWM10DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:B0'} // PWM10CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:3F'} // COG1PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // COG1PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // COG1BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:3F'} // COG1BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:3F'} // COG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:3F'} // COG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:DF'} // COG1CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:CF'} // COG1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '69D:FC'} // COG1ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:3F'} // COG2PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:3F'} // COG2PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // COG2BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // COG2BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:3F'} // COG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:3F'} // COG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:DF'} // COG2CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:CF'} // COG2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:FC'} // COG2ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '78E:0F'} // PRG1RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '78F:0F'} // PRG1FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '790:0F'} // PRG1INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:BF'} // PRG1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '792:07'} // PRG1CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:1F'} // PRG1CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:0F'} // PRG2RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:0F'} // PRG2FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:0F'} // PRG2INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:BF'} // PRG2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:07'} // PRG2CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:1F'} // PRG2CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:0F'} // PRG3RTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:0F'} // PRG3FTSS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:0F'} // PRG3INS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:BF'} // PRG3CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '79E:07'} // PRG3CON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79F:1F'} // PRG3CON2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:3F'} // COG3PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80E:3F'} // COG3PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80F:3F'} // COG3BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:3F'} // COG3BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:3F'} // COG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:3F'} // COG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:DF'} // COG3CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:CF'} // COG3CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:FA'} // COG3RIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:FA'} // COG3RSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:FA'} // COG3FIS1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:FA'} // COG3FSIM1 bits 2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:FC'} // COG3ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:3F'} // COG4PHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:3F'} // COG4PHF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:3F'} // COG4BLKR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:3F'} // COG4BLKF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:3F'} // COG4DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // COG4DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:DF'} // COG4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CF'} // COG4CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89D:FC'} // COG4ASD0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90C:DF'} // CM4CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '90D:03'} // CM4CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:0F'} // CM4NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:0F'} // CM4PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '910:DF'} // CM5CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:03'} // CM5CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:0F'} // CM5NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:0F'} // CM5PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:DF'} // CM6CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:03'} // CM6CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:0F'} // CM6NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '917:0F'} // CM6PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:DF'} // CM7CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:03'} // CM7CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:0F'} // CM7NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:0F'} // CM7PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DF'} // CM8CON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:03'} // CM8CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:0F'} // CM8NSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // CM8PSEL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1B:B1'} // MD4CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1C:33'} // MD4CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1D:1F'} // MD4SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1E:1F'} // MD4CARL bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D1F:1F'} // MD4CARH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8E:0F'} // PWMEN bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D8F:0F'} // PWMLD bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D90:0F'} // PWMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9B:BC'} // PWM5CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9C:0F'} // PWM5INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9D:0F'} // PWM5INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9E:73'} // PWM5CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'D9F:C3'} // PWM5LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DA0:73'} // PWM5OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAB:BC'} // PWM6CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAC:0F'} // PWM6INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAD:0F'} // PWM6INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAE:73'} // PWM6CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DAF:C3'} // PWM6LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DB0:73'} // PWM6OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBB:BC'} // PWM11CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBC:0F'} // PWM11INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBD:0F'} // PWM11INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBE:73'} // PWM11CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DBF:C3'} // PWM11LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DC0:73'} // PWM11OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCB:BC'} // PWM12CON bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCC:0F'} // PWM12INTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCD:0F'} // PWM12INTF bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCE:73'} // PWM12CLKCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DCF:C3'} // PWM12LDCON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'DD0:73'} // PWM12OFCON bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0C:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0D:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0E:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:3F'} // T3CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:3F'} // T3GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:3F'} // T5CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:3F'} // T5GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:3F'} // T6INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:3F'} // T8INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:3F'} // CCP7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:3F'} // CCP8PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:3F'} // COG1INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:3F'} // COG2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:3F'} // COG3INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:3F'} // COG4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:3F'} // MD1CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:3F'} // MD1CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E23:3F'} // MD1MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:3F'} // MD2CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:3F'} // MD2CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E26:3F'} // MD2MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E27:3F'} // MD3CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:3F'} // MD3CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:3F'} // MD3MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:3F'} // MD4CLPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:3F'} // MD4CHPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:3F'} // MD4MODPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:3F'} // PRG1RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:3F'} // PRG1FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:3F'} // PRG2RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E30:3F'} // PRG2FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E31:3F'} // PRG3RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E32:3F'} // PRG3FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E33:3F'} // PRG4RPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E34:3F'} // PRG4FPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E35:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E36:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E37:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E38:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E39:3F'} // ADCACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3A:3F'} // SSPCLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3B:3F'} // SSPDATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3C:3F'} // SSPSSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3D:3F'} // RXPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E3E:3F'} // CKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA8:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB0:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/C5IN0-/C6IN0-/C7IN0-/C8IN0-/IOCA0/RA0 + // Pin 3 : OPA1OUT/PRG1IN0/PRG2IN1/OPA2IN1+/OPA2IN1-/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/DAC1REF0-/DAC2REF0-/DAC3REF0-/DAC4REF0-/DAC5REF0-/DAC6REF0-/DAC7REF0-/DAC8REF0-/VREF-/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/C5IN0+/C6IN0+/C7IN0+/C8IN0+/IOCA2/RA2 + // Pin 5 : DAC1REF0+/DAC2REF0+/DAC3REF0+/DAC4REF0+/DAC5REF0+/DAC6REF0+/DAC7REF0+/DAC8REF0+/VREF+/AN3/C1IN1+/IOCA3/RA3 + // Pin 6 : OPA1IN0+/IOCA4/RA4 + // Pin 7 : DAC2OUT1/OPA1IN0-/AN4/IOCA5/RA5 + // Pin 8 : DAC6REF1+/DAC8REF1+/AN5/RE0 + // Pin 9 : DAC6OUT1/DAC6REF1-/DAC8REF1-/AN6/RE1 + // Pin 10 : DAC8OUT1/AN7/RE2 + // Pin 11 : AVDD + // Pin 12 : AVSS + // Pin 13 : OSC1/CLKIN/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/C6IN1+/IOCA6/RA6 + // Pin 15 : SOSCO/DAC5OUT1/IOCC0/RC0 + // Pin 16 : SOSCI/DAC7OUT1/IOCC1/RC1 + // Pin 17 : AN14/C5IN2-/C6IN2-/IOCC2/RC2 + // Pin 18 : AN15/SCL/IOCC3/RC3 + // Pin 19 : OPA4IN0+/AN20/RD0 + // Pin 20 : OPA4OUT/OPA3IN1+/OPA3IN1-/PRG3IN1/PRG4IN0/AN21/C1IN4-/C2IN4-/C3IN4-/C4IN4-/C5IN4-/C6IN4-/C7IN4-/C8IN4-/RD1 + // Pin 21 : DAC4OUT1/OPA4IN0-/AN22/RD2 + // Pin 22 : AN23/C8IN2-/RD3 + // Pin 23 : AN16/C5IN3-/C6IN3-/SDA/IOCC4/RC4 + // Pin 24 : OPA3IN0+/AN17/IOCC5/RC5 + // Pin 25 : OPA3OUT/PRG3IN0/OPA4IN1+/OPA4IN1-/PRG4IN1/AN18/C5IN1-/C6IN1-/C7IN1-/C8IN1-/IOCC6/RC6 + // Pin 26 : OPA3IN0-/AN19/IOCC7/RC7 + // Pin 27 : AN24/C7IN2-/RD4 + // Pin 28 : AN25/C7IN3-/C8IN3-/RD5 + // Pin 29 : AN26/C7IN1+/RD6 + // Pin 30 : AN27/C8IN1+/RD7 + // Pin 31 : VSS + // Pin 32 : VDD + // Pin 33 : AN12/ZCD/C2IN1+/IOCB0/HIB0/RB0 + // Pin 34 : OPA2OUT/PRG1IN1/OPA1IN1+/OPA1IN1-/PRG2IN0/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/IOCB1/HIB1/RB1 + // Pin 35 : DAC3OUT1/OPA2IN0-/AN8/IOCB2/RB2 + // Pin 36 : OPA2IN0+/AN9/C1IN2-/C2IN2-/C3IN2-/IOCB3/RB3 + // Pin 37 : AN11/C3IN1+/IOCB4/RB4 + // Pin 38 : DAC5REF1-/DAC7REF1-/AN13/C4IN2-/IOCB5/RB5 + // Pin 39 : ICSPCLK/ICDCLK/DAC5REF1+/DAC7REF1+/C4IN1+/IOCB6/RB6 + // Pin 40 : ICSPDAT/ICDDAT/DAC1OUT2/DAC2OUT2/DAC5OUT2/DAC6OUT2/DAC3OUT2/DAC4OUT2/DAC7OUT2/DAC8OUT2/C5IN1+/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection Bits + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-20 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pins + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover Mode + {$define _IESO_ON = $3FFF} // Internal/External Switchover Mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover Mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit cannot be cleared once it is set by software + {$define _PPS1WAY_OFF = $3FFB} // The PPSLOCK bit can be set and cleared repeatedly by software + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR + {$define _ZCD_ON = $3F7F} // Zero-cross detect circuit is enabled at POR + + // PLLEN : Phase Lock Loop enable + {$define _PLLEN_ON = $3FFF} // 4x PLL is always enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL is enabled when software sets the SPLLEN bit + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low-Power Brown Out Reset + {$define _LPBOR_OFF = $3FFF} // Low-Power BOR is disabled + {$define _LPBOR_ON = $37FF} // Low-Power BOR is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1782.pas b/devices17/PIC16F1782.pas new file mode 100644 index 00000000..c135b781 --- /dev/null +++ b/devices17/PIC16F1782.pas @@ -0,0 +1,1445 @@ +unit PIC16F1782; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1782'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR4 : byte absolute $0014; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE4 : byte absolute $0094; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR7 : bit absolute DACCON1.7; + DACCON1_DACR6 : bit absolute DACCON1.6; + DACCON1_DACR5 : bit absolute DACCON1.5; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_C2OUTSEL : bit absolute APFCON.7; + APFCON_CCP1SEL : bit absolute APFCON.6; + APFCON_SDOSEL : bit absolute APFCON.5; + APFCON_SCKSEL : bit absolute APFCON.4; + APFCON_SDISEL : bit absolute APFCON.3; + APFCON_TXSEL : bit absolute APFCON.2; + APFCON_RXSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1CH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1CH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2CH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2CH0 : bit absolute OPA2CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + PSMC1CON : byte absolute $0811; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0812; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0813; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0814; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0815; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0816; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0817; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0818; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0819; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $081A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $081B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $081C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $081D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $081E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $081F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0820; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0821; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0822; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0823; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0824; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0825; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0826; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0827; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0828; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0829; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $082A; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $082B; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $082C; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $082D; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $082E; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $082F; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0831; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0832; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0833; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0834; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0835; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0836; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0837; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0838; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0839; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $083A; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $083B; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $083C; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $083D; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $083E; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $083F; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0840; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0841; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0842; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0843; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0844; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0845; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0846; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0847; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0848; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0849; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $084A; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $084B; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $084C; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $084D; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $084E; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $084F; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '014-01C:SFR'} // Bank 0 : PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '094-09F:SFR'} // Bank 1 : PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11F:SFR'} // Bank 2 : APFCON, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '811-82F:SFR'} // Bank 16 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM '831-84F:SFR'} // Bank 16 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FB'} // PIR2 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:33'} // PIR4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FB'} // PIE2 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:33'} // PIE4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:07'} // CMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DACCON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C3'} // OPA1CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C3'} // OPA2CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // PSMC1SYNC bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:8E'} // PSMC1REBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:8E'} // PSMC1FEBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:8F'} // PSMC1PHS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:8F'} // PSMC1DCS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:8F'} // PSMC1PRS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81F:8E'} // PSMC1ASDS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '82D:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '82E:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '82F:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '832:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '833:03'} // PSMC2SYNC bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '834:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '835:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '836:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '837:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '838:8E'} // PSMC2REBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '839:8E'} // PSMC2FEBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '83A:8F'} // PSMC2PHS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83B:8F'} // PSMC2DCS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83C:8F'} // PSMC2PRS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83D:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '83E:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '83F:8E'} // PSMC2ASDS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '84D:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '84E:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '84F:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS + // Pin 8 : Vss + // Pin 9 : RA7/PSMC1CLK/PSMC2CLK/OSC1/CLKIN + // Pin 10 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 11 : RC0/T1OSO/T1CKI/PSMC1A + // Pin 12 : RC1/T1OSI/PSMC1B/CCP2 + // Pin 13 : RC2/CCP1/PSMC1C + // Pin 14 : RC3/SCK/SCL/PSMC1D + // Pin 15 : RC4/SDI/SDA/PSMC1E + // Pin 16 : RC5/SDO/PSMC1F + // Pin 17 : RC6/TX/CK/PSMC2A + // Pin 18 : RC7/RX/DT/PSMC2B + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/CCP1/PSMC1IN/PSMC2IN/INT + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN-/CLKR + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 25 : RB4/AN11/C3IN1+ + // Pin 26 : RB5/AN13/C3OUT/T1G/SDO + // Pin 27 : RB6/TX/CK/SDI/SDA/ICSPCLK/ICDCLK + // Pin 28 : RB7/SCK/RX/DT/SCL/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1783.pas b/devices17/PIC16F1783.pas new file mode 100644 index 00000000..dcc23f7f --- /dev/null +++ b/devices17/PIC16F1783.pas @@ -0,0 +1,1449 @@ +unit PIC16F1783; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1783'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR4 : byte absolute $0014; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE4 : byte absolute $0094; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR7 : bit absolute DACCON1.7; + DACCON1_DACR6 : bit absolute DACCON1.6; + DACCON1_DACR5 : bit absolute DACCON1.5; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + APFCON : byte absolute $011D; + APFCON_C2OUTSEL : bit absolute APFCON.7; + APFCON_CCP1SEL : bit absolute APFCON.6; + APFCON_SDOSEL : bit absolute APFCON.5; + APFCON_SCKSEL : bit absolute APFCON.4; + APFCON_SDISEL : bit absolute APFCON.3; + APFCON_TXSEL : bit absolute APFCON.2; + APFCON_RXSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1EN : bit absolute OPA1CON.7; + OPA1CON_OPA1SP : bit absolute OPA1CON.6; + OPA1CON_OPA1CH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1CH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2EN : bit absolute OPA2CON.7; + OPA2CON_OPA2SP : bit absolute OPA2CON.6; + OPA2CON_OPA2CH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2CH0 : bit absolute OPA2CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + PSMC1CON : byte absolute $0811; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0812; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0813; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0814; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0815; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0816; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0817; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0818; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0819; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $081A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $081B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $081C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $081D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $081E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $081F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0820; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0821; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0822; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0823; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0824; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0825; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0826; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0827; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0828; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0829; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $082A; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $082B; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $082C; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $082D; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $082E; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $082F; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0831; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0832; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0833; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0834; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0835; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0836; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0837; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0838; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0839; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $083A; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $083B; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $083C; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $083D; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $083E; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $083F; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0840; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0841; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0842; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0843; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0844; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0845; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0846; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0847; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0848; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0849; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $084A; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $084B; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $084C; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $084D; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $084E; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $084F; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-012:SFR'} // Bank 0 : PORTE, PIR1, PIR2 + {$SET_STATE_RAM '014-01C:SFR'} // Bank 0 : PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-092:SFR'} // Bank 1 : TRISE, PIE1, PIE2 + {$SET_STATE_RAM '094-09F:SFR'} // Bank 1 : PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '11D-11F:SFR'} // Bank 2 : APFCON, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '811-82F:SFR'} // Bank 16 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM '831-84F:SFR'} // Bank 16 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FB'} // PIR2 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:33'} // PIR4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FB'} // PIE2 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:33'} // PIE4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:07'} // CMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DACCON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C3'} // OPA1CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C3'} // OPA2CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:03'} // PSMC1SYNC bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:8E'} // PSMC1REBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:8E'} // PSMC1FEBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:8F'} // PSMC1PHS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:8F'} // PSMC1DCS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:8F'} // PSMC1PRS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81F:8E'} // PSMC1ASDS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '82D:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '82E:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '82F:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '832:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '833:03'} // PSMC2SYNC bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '834:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '835:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '836:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '837:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '838:8E'} // PSMC2REBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '839:8E'} // PSMC2FEBS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '83A:8F'} // PSMC2PHS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83B:8F'} // PSMC2DCS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83C:8F'} // PSMC2PRS bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '83D:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '83E:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '83F:8E'} // PSMC2ASDS bits 6,5,4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '84D:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '84E:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '84F:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS + // Pin 8 : Vss + // Pin 9 : RA7/PSMC1CLK/PSMC2CLK/OSC1/CLKIN + // Pin 10 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 11 : RC0/T1OSO/T1CKI/PSMC1A + // Pin 12 : RC1/T1OSI/PSMC1B/CCP2 + // Pin 13 : RC2/CCP1/PSMC1C + // Pin 14 : RC3/SCK/SCL/PSMC1D + // Pin 15 : RC4/SDI/SDA/PSMC1E + // Pin 16 : RC5/SDO/PSMC1F + // Pin 17 : RC6/TX/CK/PSMC2A + // Pin 18 : RC7/RX/DT/PSMC2B + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/CCP1/PSMC1IN/PSMC2IN/INT + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN-/CLKR + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 25 : RB4/AN11/C3IN1+ + // Pin 26 : RB5/AN13/C3OUT/T1G/SDO + // Pin 27 : RB6/TX/CK/SDI/SDA/ICSPCLK/ICDCLK + // Pin 28 : RB7/SCK/RX/DT/SCL/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1784.pas b/devices17/PIC16F1784.pas new file mode 100644 index 00000000..b581db03 --- /dev/null +++ b/devices17/PIC16F1784.pas @@ -0,0 +1,1890 @@ +unit PIC16F1784; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1784'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_PSMC3TIF : bit absolute PIR4.6; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC3SIF : bit absolute PIR4.2; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_PSMC3TIE : bit absolute PIE4.6; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC3SIE : bit absolute PIE4.2; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR7 : bit absolute DACCON1.7; + DACCON1_DACR6 : bit absolute DACCON1.6; + DACCON1_DACR5 : bit absolute DACCON1.5; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + CM4CON0 : byte absolute $011A; + CM4CON0_C4ON : bit absolute CM4CON0.7; + CM4CON0_C4OUT : bit absolute CM4CON0.6; + CM4CON0_C4OE : bit absolute CM4CON0.5; + CM4CON0_C4POL : bit absolute CM4CON0.4; + CM4CON0_C4ZLF : bit absolute CM4CON0.3; + CM4CON0_C4SP : bit absolute CM4CON0.2; + CM4CON0_C4HYS : bit absolute CM4CON0.1; + CM4CON0_C4SYNC : bit absolute CM4CON0.0; + CM4CON1 : byte absolute $011B; + CM4CON1_C4INTP : bit absolute CM4CON1.7; + CM4CON1_C4INTN : bit absolute CM4CON1.6; + CM4CON1_C4PCH2 : bit absolute CM4CON1.5; + CM4CON1_C4PCH1 : bit absolute CM4CON1.4; + CM4CON1_C4PCH0 : bit absolute CM4CON1.3; + CM4CON1_C4NCH2 : bit absolute CM4CON1.2; + CM4CON1_C4NCH1 : bit absolute CM4CON1.1; + CM4CON1_C4NCH0 : bit absolute CM4CON1.0; + APFCON2 : byte absolute $011C; + APFCON2_CCP3SEL : bit absolute APFCON2.0; + APFCON1 : byte absolute $011D; + APFCON1_C2OUTSEL : bit absolute APFCON1.7; + APFCON1_CCP1SEL : bit absolute APFCON1.6; + APFCON1_SDOSEL : bit absolute APFCON1.5; + APFCON1_SCKSEL : bit absolute APFCON1.4; + APFCON1_SDISEL : bit absolute APFCON1.3; + APFCON1_TXSEL : bit absolute APFCON1.2; + APFCON1_RXSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODCOND7 : bit absolute ODCOND.7; + ODCOND_ODCOND6 : bit absolute ODCOND.6; + ODCOND_ODCOND5 : bit absolute ODCOND.5; + ODCOND_ODCOND4 : bit absolute ODCOND.4; + ODCOND_ODCOND3 : bit absolute ODCOND.3; + ODCOND_ODCOND2 : bit absolute ODCOND.2; + ODCOND_ODCOND1 : bit absolute ODCOND.1; + ODCOND_ODCOND0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODCONE2 : bit absolute ODCONE.2; + ODCONE_ODCONE1 : bit absolute ODCONE.1; + ODCONE_ODCONE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRCOND7 : bit absolute SLRCOND.7; + SLRCOND_SLRCOND6 : bit absolute SLRCOND.6; + SLRCOND_SLRCOND5 : bit absolute SLRCOND.5; + SLRCOND_SLRCOND4 : bit absolute SLRCOND.4; + SLRCOND_SLRCOND3 : bit absolute SLRCOND.3; + SLRCOND_SLRCOND2 : bit absolute SLRCOND.2; + SLRCOND_SLRCOND1 : bit absolute SLRCOND.1; + SLRCOND_SLRCOND0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRCONE2 : bit absolute SLRCONE.2; + SLRCONE_SLRCONE1 : bit absolute SLRCONE.1; + SLRCONE_SLRCONE0 : bit absolute SLRCONE.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + OPA3CON : byte absolute $0515; + OPA3CON_OPA3PCH1 : bit absolute OPA3CON.1; + OPA3CON_OPA3PCH0 : bit absolute OPA3CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + PSMC1CON : byte absolute $0811; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0812; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0813; + PSMC1SYNC_P1POFST : bit absolute PSMC1SYNC.7; + PSMC1SYNC_P1PRPOL : bit absolute PSMC1SYNC.6; + PSMC1SYNC_P1DCPOL : bit absolute PSMC1SYNC.5; + PSMC1SYNC_P1SYNC2 : bit absolute PSMC1SYNC.2; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0814; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0815; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0816; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0817; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0818; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC4 : bit absolute PSMC1REBS.4; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0819; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC4 : bit absolute PSMC1FEBS.4; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $081A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC4 : bit absolute PSMC1PHS.4; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $081B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC4 : bit absolute PSMC1DCS.4; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $081C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC4 : bit absolute PSMC1PRS.4; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $081D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $081E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $081F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC4 : bit absolute PSMC1ASDS.4; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0820; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0821; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0822; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0823; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0824; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0825; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0826; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0827; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0828; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0829; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $082A; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $082B; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $082C; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $082D; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $082E; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $082F; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0831; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0832; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0833; + PSMC2SYNC_P2POFST : bit absolute PSMC2SYNC.7; + PSMC2SYNC_P2PRPOL : bit absolute PSMC2SYNC.6; + PSMC2SYNC_P2DCPOL : bit absolute PSMC2SYNC.5; + PSMC2SYNC_P2SYNC2 : bit absolute PSMC2SYNC.2; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0834; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0835; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0836; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0837; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0838; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC4 : bit absolute PSMC2REBS.4; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0839; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC4 : bit absolute PSMC2FEBS.4; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $083A; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC4 : bit absolute PSMC2PHS.4; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $083B; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC4 : bit absolute PSMC2DCS.4; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $083C; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC4 : bit absolute PSMC2PRS.4; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $083D; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $083E; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $083F; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC4 : bit absolute PSMC2ASDS.4; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0840; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0841; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0842; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0843; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0844; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0845; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0846; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0847; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0848; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0849; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $084A; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $084B; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $084C; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $084D; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $084E; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $084F; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + PSMC3CON : byte absolute $0851; + PSMC3CON_PSMC3EN : bit absolute PSMC3CON.7; + PSMC3CON_PSMC3LD : bit absolute PSMC3CON.6; + PSMC3CON_P3DBFE : bit absolute PSMC3CON.5; + PSMC3CON_P3DBRE : bit absolute PSMC3CON.4; + PSMC3CON_P3MODE3 : bit absolute PSMC3CON.3; + PSMC3CON_P3MODE2 : bit absolute PSMC3CON.2; + PSMC3CON_P3MODE1 : bit absolute PSMC3CON.1; + PSMC3CON_P3MODE0 : bit absolute PSMC3CON.0; + PSMC3MDL : byte absolute $0852; + PSMC3MDL_P3MDLEN : bit absolute PSMC3MDL.7; + PSMC3MDL_P3MDLPOL : bit absolute PSMC3MDL.6; + PSMC3MDL_P3MDLBIT : bit absolute PSMC3MDL.5; + PSMC3MDL_P3MSRC3 : bit absolute PSMC3MDL.3; + PSMC3MDL_P3MSRC2 : bit absolute PSMC3MDL.2; + PSMC3MDL_P3MSRC1 : bit absolute PSMC3MDL.1; + PSMC3MDL_P3MSRC0 : bit absolute PSMC3MDL.0; + PSMC3SYNC : byte absolute $0853; + PSMC3SYNC_P3POFST : bit absolute PSMC3SYNC.7; + PSMC3SYNC_P3PRPOL : bit absolute PSMC3SYNC.6; + PSMC3SYNC_P3DCPOL : bit absolute PSMC3SYNC.5; + PSMC3SYNC_P3SYNC2 : bit absolute PSMC3SYNC.2; + PSMC3SYNC_P3SYNC1 : bit absolute PSMC3SYNC.1; + PSMC3SYNC_P3SYNC0 : bit absolute PSMC3SYNC.0; + PSMC3CLK : byte absolute $0854; + PSMC3CLK_P3CPRE1 : bit absolute PSMC3CLK.5; + PSMC3CLK_P3CPRE0 : bit absolute PSMC3CLK.4; + PSMC3CLK_P3CSRC1 : bit absolute PSMC3CLK.1; + PSMC3CLK_P3CSRC0 : bit absolute PSMC3CLK.0; + PSMC3OEN : byte absolute $0855; + PSMC3OEN_P3OEF : bit absolute PSMC3OEN.5; + PSMC3OEN_P3OEE : bit absolute PSMC3OEN.4; + PSMC3OEN_P3OED : bit absolute PSMC3OEN.3; + PSMC3OEN_P3OEC : bit absolute PSMC3OEN.2; + PSMC3OEN_P3OEB : bit absolute PSMC3OEN.1; + PSMC3OEN_P3OEA : bit absolute PSMC3OEN.0; + PSMC3POL : byte absolute $0856; + PSMC3POL_P3INPOL : bit absolute PSMC3POL.6; + PSMC3POL_P3POLF : bit absolute PSMC3POL.5; + PSMC3POL_P3POLE : bit absolute PSMC3POL.4; + PSMC3POL_P3POLD : bit absolute PSMC3POL.3; + PSMC3POL_P3POLC : bit absolute PSMC3POL.2; + PSMC3POL_P3POLB : bit absolute PSMC3POL.1; + PSMC3POL_P3POLA : bit absolute PSMC3POL.0; + PSMC3BLNK : byte absolute $0857; + PSMC3BLNK_P3FEBM1 : bit absolute PSMC3BLNK.5; + PSMC3BLNK_P3FEBM0 : bit absolute PSMC3BLNK.4; + PSMC3BLNK_P3REBM1 : bit absolute PSMC3BLNK.1; + PSMC3BLNK_P3REBM0 : bit absolute PSMC3BLNK.0; + PSMC3REBS : byte absolute $0858; + PSMC3REBS_P3REBSIN : bit absolute PSMC3REBS.7; + PSMC3REBS_P3REBSC4 : bit absolute PSMC3REBS.4; + PSMC3REBS_P3REBSC3 : bit absolute PSMC3REBS.3; + PSMC3REBS_P3REBSC2 : bit absolute PSMC3REBS.2; + PSMC3REBS_P3REBSC1 : bit absolute PSMC3REBS.1; + PSMC3FEBS : byte absolute $0859; + PSMC3FEBS_P3FEBSIN : bit absolute PSMC3FEBS.7; + PSMC3FEBS_P3FEBSC4 : bit absolute PSMC3FEBS.4; + PSMC3FEBS_P3FEBSC3 : bit absolute PSMC3FEBS.3; + PSMC3FEBS_P3FEBSC2 : bit absolute PSMC3FEBS.2; + PSMC3FEBS_P3FEBSC1 : bit absolute PSMC3FEBS.1; + PSMC3PHS : byte absolute $085A; + PSMC3PHS_P3PHSIN : bit absolute PSMC3PHS.7; + PSMC3PHS_P3PHSC4 : bit absolute PSMC3PHS.4; + PSMC3PHS_P3PHSC3 : bit absolute PSMC3PHS.3; + PSMC3PHS_P3PHSC2 : bit absolute PSMC3PHS.2; + PSMC3PHS_P3PHSC1 : bit absolute PSMC3PHS.1; + PSMC3PHS_P3PHST : bit absolute PSMC3PHS.0; + PSMC3DCS : byte absolute $085B; + PSMC3DCS_P3DCSIN : bit absolute PSMC3DCS.7; + PSMC3DCS_P3DCSC4 : bit absolute PSMC3DCS.4; + PSMC3DCS_P3DCSC3 : bit absolute PSMC3DCS.3; + PSMC3DCS_P3DCSC2 : bit absolute PSMC3DCS.2; + PSMC3DCS_P3DCSC1 : bit absolute PSMC3DCS.1; + PSMC3DCS_P3DCST : bit absolute PSMC3DCS.0; + PSMC3PRS : byte absolute $085C; + PSMC3PRS_P3PRSIN : bit absolute PSMC3PRS.7; + PSMC3PRS_P3PRSC4 : bit absolute PSMC3PRS.4; + PSMC3PRS_P3PRSC3 : bit absolute PSMC3PRS.3; + PSMC3PRS_P3PRSC2 : bit absolute PSMC3PRS.2; + PSMC3PRS_P3PRSC1 : bit absolute PSMC3PRS.1; + PSMC3PRS_P3PRST : bit absolute PSMC3PRS.0; + PSMC3ASDC : byte absolute $085D; + PSMC3ASDC_P3ASE : bit absolute PSMC3ASDC.7; + PSMC3ASDC_P3ASDEN : bit absolute PSMC3ASDC.6; + PSMC3ASDC_P3ARSEN : bit absolute PSMC3ASDC.5; + PSMC3ASDC_P3ASDOV : bit absolute PSMC3ASDC.0; + PSMC3ASDL : byte absolute $085E; + PSMC3ASDL_P3ASDLF : bit absolute PSMC3ASDL.5; + PSMC3ASDL_P3ASDLE : bit absolute PSMC3ASDL.4; + PSMC3ASDL_P3ASDLD : bit absolute PSMC3ASDL.3; + PSMC3ASDL_P3ASDLC : bit absolute PSMC3ASDL.2; + PSMC3ASDL_P3ASDLB : bit absolute PSMC3ASDL.1; + PSMC3ASDL_P3ASDLA : bit absolute PSMC3ASDL.0; + PSMC3ASDS : byte absolute $085F; + PSMC3ASDS_P3ASDSIN : bit absolute PSMC3ASDS.7; + PSMC3ASDS_P3ASDSC4 : bit absolute PSMC3ASDS.4; + PSMC3ASDS_P3ASDSC3 : bit absolute PSMC3ASDS.3; + PSMC3ASDS_P3ASDSC2 : bit absolute PSMC3ASDS.2; + PSMC3ASDS_P3ASDSC1 : bit absolute PSMC3ASDS.1; + PSMC3INT : byte absolute $0860; + PSMC3INT_P3TOVIE : bit absolute PSMC3INT.7; + PSMC3INT_P3TPHIE : bit absolute PSMC3INT.6; + PSMC3INT_P3TDCIE : bit absolute PSMC3INT.5; + PSMC3INT_P3TPRIE : bit absolute PSMC3INT.4; + PSMC3INT_P3TOVIF : bit absolute PSMC3INT.3; + PSMC3INT_P3TPHIF : bit absolute PSMC3INT.2; + PSMC3INT_P3TDCIF : bit absolute PSMC3INT.1; + PSMC3INT_P3TPRIF : bit absolute PSMC3INT.0; + PSMC3PHL : byte absolute $0861; + PSMC3PHL_PSMC3PH7 : bit absolute PSMC3PHL.7; + PSMC3PHL_PSMC3PH6 : bit absolute PSMC3PHL.6; + PSMC3PHL_PSMC3PH5 : bit absolute PSMC3PHL.5; + PSMC3PHL_PSMC3PH4 : bit absolute PSMC3PHL.4; + PSMC3PHL_PSMC3PH3 : bit absolute PSMC3PHL.3; + PSMC3PHL_PSMC3PH2 : bit absolute PSMC3PHL.2; + PSMC3PHL_PSMC3PH1 : bit absolute PSMC3PHL.1; + PSMC3PHL_PSMC3PH0 : bit absolute PSMC3PHL.0; + PSMC3PHH : byte absolute $0862; + PSMC3PHH_PSMC3PH15 : bit absolute PSMC3PHH.7; + PSMC3PHH_PSMC3PH14 : bit absolute PSMC3PHH.6; + PSMC3PHH_PSMC3PH13 : bit absolute PSMC3PHH.5; + PSMC3PHH_PSMC3PH12 : bit absolute PSMC3PHH.4; + PSMC3PHH_PSMC3PH11 : bit absolute PSMC3PHH.3; + PSMC3PHH_PSMC3PH10 : bit absolute PSMC3PHH.2; + PSMC3PHH_PSMC3PH9 : bit absolute PSMC3PHH.1; + PSMC3PHH_PSMC3PH8 : bit absolute PSMC3PHH.0; + PSMC3DCL : byte absolute $0863; + PSMC3DCL_PSMC3DC7 : bit absolute PSMC3DCL.7; + PSMC3DCL_PSMC3DC6 : bit absolute PSMC3DCL.6; + PSMC3DCL_PSMC3DC5 : bit absolute PSMC3DCL.5; + PSMC3DCL_PSMC3DC4 : bit absolute PSMC3DCL.4; + PSMC3DCL_PSMC3DC3 : bit absolute PSMC3DCL.3; + PSMC3DCL_PSMC3DC2 : bit absolute PSMC3DCL.2; + PSMC3DCL_PSMC3DC1 : bit absolute PSMC3DCL.1; + PSMC3DCL_PSMC3DC0 : bit absolute PSMC3DCL.0; + PSMC3DCH : byte absolute $0864; + PSMC3DCH_PSMC3DC15 : bit absolute PSMC3DCH.7; + PSMC3DCH_PSMC3DC14 : bit absolute PSMC3DCH.6; + PSMC3DCH_PSMC3DC13 : bit absolute PSMC3DCH.5; + PSMC3DCH_PSMC3DC12 : bit absolute PSMC3DCH.4; + PSMC3DCH_PSMC3DC11 : bit absolute PSMC3DCH.3; + PSMC3DCH_PSMC3DC10 : bit absolute PSMC3DCH.2; + PSMC3DCH_PSMC3DC9 : bit absolute PSMC3DCH.1; + PSMC3DCH_PSMC3DC8 : bit absolute PSMC3DCH.0; + PSMC3PRL : byte absolute $0865; + PSMC3PRL_PSMC3PR7 : bit absolute PSMC3PRL.7; + PSMC3PRL_PSMC3PR6 : bit absolute PSMC3PRL.6; + PSMC3PRL_PSMC3PR5 : bit absolute PSMC3PRL.5; + PSMC3PRL_PSMC3PR4 : bit absolute PSMC3PRL.4; + PSMC3PRL_PSMC3PR3 : bit absolute PSMC3PRL.3; + PSMC3PRL_PSMC3PR2 : bit absolute PSMC3PRL.2; + PSMC3PRL_PSMC3PR1 : bit absolute PSMC3PRL.1; + PSMC3PRL_PSMC3PR0 : bit absolute PSMC3PRL.0; + PSMC3PRH : byte absolute $0866; + PSMC3PRH_PSMC3PR15 : bit absolute PSMC3PRH.7; + PSMC3PRH_PSMC3PR14 : bit absolute PSMC3PRH.6; + PSMC3PRH_PSMC3PR13 : bit absolute PSMC3PRH.5; + PSMC3PRH_PSMC3PR12 : bit absolute PSMC3PRH.4; + PSMC3PRH_PSMC3PR11 : bit absolute PSMC3PRH.3; + PSMC3PRH_PSMC3PR10 : bit absolute PSMC3PRH.2; + PSMC3PRH_PSMC3PR9 : bit absolute PSMC3PRH.1; + PSMC3PRH_PSMC3PR8 : bit absolute PSMC3PRH.0; + PSMC3TMRL : byte absolute $0867; + PSMC3TMRL_PSMC3TMR7 : bit absolute PSMC3TMRL.7; + PSMC3TMRL_PSMC3TMR6 : bit absolute PSMC3TMRL.6; + PSMC3TMRL_PSMC3TMR5 : bit absolute PSMC3TMRL.5; + PSMC3TMRL_PSMC3TMR4 : bit absolute PSMC3TMRL.4; + PSMC3TMRL_PSMC3TMR3 : bit absolute PSMC3TMRL.3; + PSMC3TMRL_PSMC3TMR2 : bit absolute PSMC3TMRL.2; + PSMC3TMRL_PSMC3TMR1 : bit absolute PSMC3TMRL.1; + PSMC3TMRL_PSMC3TMR0 : bit absolute PSMC3TMRL.0; + PSMC3TMRH : byte absolute $0868; + PSMC3TMRH_PSMC3TMR15 : bit absolute PSMC3TMRH.7; + PSMC3TMRH_PSMC3TMR14 : bit absolute PSMC3TMRH.6; + PSMC3TMRH_PSMC3TMR13 : bit absolute PSMC3TMRH.5; + PSMC3TMRH_PSMC3TMR12 : bit absolute PSMC3TMRH.4; + PSMC3TMRH_PSMC3TMR11 : bit absolute PSMC3TMRH.3; + PSMC3TMRH_PSMC3TMR10 : bit absolute PSMC3TMRH.2; + PSMC3TMRH_PSMC3TMR9 : bit absolute PSMC3TMRH.1; + PSMC3TMRH_PSMC3TMR8 : bit absolute PSMC3TMRH.0; + PSMC3DBR : byte absolute $0869; + PSMC3DBR_PSMC3DBR7 : bit absolute PSMC3DBR.7; + PSMC3DBR_PSMC3DBR6 : bit absolute PSMC3DBR.6; + PSMC3DBR_PSMC3DBR5 : bit absolute PSMC3DBR.5; + PSMC3DBR_PSMC3DBR4 : bit absolute PSMC3DBR.4; + PSMC3DBR_PSMC3DBR3 : bit absolute PSMC3DBR.3; + PSMC3DBR_PSMC3DBR2 : bit absolute PSMC3DBR.2; + PSMC3DBR_PSMC3DBR1 : bit absolute PSMC3DBR.1; + PSMC3DBR_PSMC3DBR0 : bit absolute PSMC3DBR.0; + PSMC3DBF : byte absolute $086A; + PSMC3DBF_PSMC3DBF7 : bit absolute PSMC3DBF.7; + PSMC3DBF_PSMC3DBF6 : bit absolute PSMC3DBF.6; + PSMC3DBF_PSMC3DBF5 : bit absolute PSMC3DBF.5; + PSMC3DBF_PSMC3DBF4 : bit absolute PSMC3DBF.4; + PSMC3DBF_PSMC3DBF3 : bit absolute PSMC3DBF.3; + PSMC3DBF_PSMC3DBF2 : bit absolute PSMC3DBF.2; + PSMC3DBF_PSMC3DBF1 : bit absolute PSMC3DBF.1; + PSMC3DBF_PSMC3DBF0 : bit absolute PSMC3DBF.0; + PSMC3BLKR : byte absolute $086B; + PSMC3BLKR_PSMC3BLKR7 : bit absolute PSMC3BLKR.7; + PSMC3BLKR_PSMC3BLKR6 : bit absolute PSMC3BLKR.6; + PSMC3BLKR_PSMC3BLKR5 : bit absolute PSMC3BLKR.5; + PSMC3BLKR_PSMC3BLKR4 : bit absolute PSMC3BLKR.4; + PSMC3BLKR_PSMC3BLKR3 : bit absolute PSMC3BLKR.3; + PSMC3BLKR_PSMC3BLKR2 : bit absolute PSMC3BLKR.2; + PSMC3BLKR_PSMC3BLKR1 : bit absolute PSMC3BLKR.1; + PSMC3BLKR_PSMC3BLKR0 : bit absolute PSMC3BLKR.0; + PSMC3BLKF : byte absolute $086C; + PSMC3BLKF_PSMC3BLKF7 : bit absolute PSMC3BLKF.7; + PSMC3BLKF_PSMC3BLKF6 : bit absolute PSMC3BLKF.6; + PSMC3BLKF_PSMC3BLKF5 : bit absolute PSMC3BLKF.5; + PSMC3BLKF_PSMC3BLKF4 : bit absolute PSMC3BLKF.4; + PSMC3BLKF_PSMC3BLKF3 : bit absolute PSMC3BLKF.3; + PSMC3BLKF_PSMC3BLKF2 : bit absolute PSMC3BLKF.2; + PSMC3BLKF_PSMC3BLKF1 : bit absolute PSMC3BLKF.1; + PSMC3BLKF_PSMC3BLKF0 : bit absolute PSMC3BLKF.0; + PSMC3FFA : byte absolute $086D; + PSMC3FFA_PSMC3FFA3 : bit absolute PSMC3FFA.3; + PSMC3FFA_PSMC3FFA2 : bit absolute PSMC3FFA.2; + PSMC3FFA_PSMC3FFA1 : bit absolute PSMC3FFA.1; + PSMC3FFA_PSMC3FFA0 : bit absolute PSMC3FFA.0; + PSMC3STR0 : byte absolute $086E; + PSMC3STR0_P3STRF : bit absolute PSMC3STR0.5; + PSMC3STR0_P3STRE : bit absolute PSMC3STR0.4; + PSMC3STR0_P3STRD : bit absolute PSMC3STR0.3; + PSMC3STR0_P3STRC : bit absolute PSMC3STR0.2; + PSMC3STR0_P3STRB : bit absolute PSMC3STR0.1; + PSMC3STR0_P3STRA : bit absolute PSMC3STR0.0; + PSMC3STR1 : byte absolute $086F; + PSMC3STR1_P3SSYNC : bit absolute PSMC3STR1.7; + PSMC3STR1_P3LSMEN : bit absolute PSMC3STR1.1; + PSMC3STR1_P3HSMEN : bit absolute PSMC3STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, CM4CON0, CM4CON1, APFCON2, APFCON1, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-197:SFR'} // Bank 3 : ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-293:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-313:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE, CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA3CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '811-82F:SFR'} // Bank 16 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM '831-84F:SFR'} // Bank 16 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM '851-86F:SFR'} // Bank 16 : PSMC3CON, PSMC3MDL, PSMC3SYNC, PSMC3CLK, PSMC3OEN, PSMC3POL, PSMC3BLNK, PSMC3REBS, PSMC3FEBS, PSMC3PHS, PSMC3DCS, PSMC3PRS, PSMC3ASDC, PSMC3ASDL, PSMC3ASDS, PSMC3INT, PSMC3PHL, PSMC3PHH, PSMC3DCL, PSMC3DCH, PSMC3PRL, PSMC3PRH, PSMC3TMRL, PSMC3TMRH, PSMC3DBR, PSMC3DBF, PSMC3BLKR, PSMC3BLKF, PSMC3FFA, PSMC3STR0, PSMC3STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:77'} // PIR4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:77'} // PIE4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DACCON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:01'} // APFCON2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:7F'} // ANSELB bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:07'} // ANSELD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C3'} // OPA1CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C3'} // OPA2CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:C3'} // OPA3CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:E7'} // PSMC1SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:9E'} // PSMC1REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:9E'} // PSMC1FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:9F'} // PSMC1PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:9F'} // PSMC1DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:9F'} // PSMC1PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81F:9E'} // PSMC1ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '82D:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '82E:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '82F:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '832:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '833:E7'} // PSMC2SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '834:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '835:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '836:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '837:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '838:9E'} // PSMC2REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '839:9E'} // PSMC2FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '83A:9F'} // PSMC2PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83B:9F'} // PSMC2DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83C:9F'} // PSMC2PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83D:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '83E:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '83F:9E'} // PSMC2ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '84D:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '84E:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '84F:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '852:EF'} // PSMC3MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '853:E7'} // PSMC3SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '854:33'} // PSMC3CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '855:3F'} // PSMC3OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '856:7F'} // PSMC3POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '857:33'} // PSMC3BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '858:9E'} // PSMC3REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '859:9E'} // PSMC3FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '85A:9F'} // PSMC3PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85B:9F'} // PSMC3DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85C:9F'} // PSMC3PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85D:E1'} // PSMC3ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '85E:3F'} // PSMC3ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '85F:9E'} // PSMC3ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '86D:0F'} // PSMC3FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '86E:3F'} // PSMC3STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '86F:83'} // PSMC3STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS + // Pin 8 : RE0/AN5/CCP3 + // Pin 9 : RE1/AN6/PSMC3B + // Pin 10 : RE2/AN7/PSMC3A + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/PSMC1CLK/PSMC2CLK/PSMC3CLK/OSC1/CLKIN + // Pin 14 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 15 : RC0/SOSCO/T1CKI/PSMC1A + // Pin 16 : RC1/SOSCI/CCP2/PSMC1B + // Pin 17 : RC2/CCP1/PSMC1C + // Pin 18 : RC3/SCK/SCL/PSMC1D + // Pin 19 : RD0/OPA3IN+ + // Pin 20 : RD1/AN21/C1IN4-/C2IN4-/C3IN4-/C4IN4-/OPA3OUT + // Pin 21 : RD2/OPA3IN- + // Pin 22 : RD3 + // Pin 23 : RC4/SDI/SDA/PSMC1E + // Pin 24 : RC5/SDO/PSMC1F + // Pin 25 : RC6/TX/CK/PSMC2A + // Pin 26 : RC7/RX/DT/PSMC2B + // Pin 27 : RD4/PSMC3F + // Pin 28 : RD5/PSMC3E + // Pin 29 : RD6/C3OUT/PSMC3D + // Pin 30 : RD7/C4OUT/PSMC3C + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/C2IN1+/PSMC1IN/PSMC2IN/PSMC3IN/CCP1/INT + // Pin 34 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/OPA2OUT + // Pin 35 : RB2/AN8/OPA2IN-/CLKR + // Pin 36 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 37 : RB4/AN11/C3IN1+ + // Pin 38 : RB5/AN13/C4IN2-/T1G/CCP3/SDO + // Pin 39 : RB6/TX/CK/SDI/SDA/C4IN1+/ICSPCLK/ICDCLK + // Pin 40 : RB7/SCK/RX/DT/SCL/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1786.pas b/devices17/PIC16F1786.pas new file mode 100644 index 00000000..568822eb --- /dev/null +++ b/devices17/PIC16F1786.pas @@ -0,0 +1,1773 @@ +unit PIC16F1786; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1786'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_PSMC3TIF : bit absolute PIR4.6; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC3SIF : bit absolute PIR4.2; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_PSMC3TIE : bit absolute PIE4.6; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC3SIE : bit absolute PIE4.2; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR7 : bit absolute DACCON1.7; + DACCON1_DACR6 : bit absolute DACCON1.6; + DACCON1_DACR5 : bit absolute DACCON1.5; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + CM4CON0 : byte absolute $011A; + CM4CON0_C4ON : bit absolute CM4CON0.7; + CM4CON0_C4OUT : bit absolute CM4CON0.6; + CM4CON0_C4OE : bit absolute CM4CON0.5; + CM4CON0_C4POL : bit absolute CM4CON0.4; + CM4CON0_C4ZLF : bit absolute CM4CON0.3; + CM4CON0_C4SP : bit absolute CM4CON0.2; + CM4CON0_C4HYS : bit absolute CM4CON0.1; + CM4CON0_C4SYNC : bit absolute CM4CON0.0; + CM4CON1 : byte absolute $011B; + CM4CON1_C4INTP : bit absolute CM4CON1.7; + CM4CON1_C4INTN : bit absolute CM4CON1.6; + CM4CON1_C4PCH2 : bit absolute CM4CON1.5; + CM4CON1_C4PCH1 : bit absolute CM4CON1.4; + CM4CON1_C4PCH0 : bit absolute CM4CON1.3; + CM4CON1_C4NCH2 : bit absolute CM4CON1.2; + CM4CON1_C4NCH1 : bit absolute CM4CON1.1; + CM4CON1_C4NCH0 : bit absolute CM4CON1.0; + APFCON2 : byte absolute $011C; + APFCON2_CCP3SEL : bit absolute APFCON2.0; + APFCON1 : byte absolute $011D; + APFCON1_C2OUTSEL : bit absolute APFCON1.7; + APFCON1_CCP1SEL : bit absolute APFCON1.6; + APFCON1_SDOSEL : bit absolute APFCON1.5; + APFCON1_SCKSEL : bit absolute APFCON1.4; + APFCON1_SDISEL : bit absolute APFCON1.3; + APFCON1_TXSEL : bit absolute APFCON1.2; + APFCON1_RXSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + PSMC1CON : byte absolute $0811; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0812; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0813; + PSMC1SYNC_P1POFST : bit absolute PSMC1SYNC.7; + PSMC1SYNC_P1PRPOL : bit absolute PSMC1SYNC.6; + PSMC1SYNC_P1DCPOL : bit absolute PSMC1SYNC.5; + PSMC1SYNC_P1SYNC2 : bit absolute PSMC1SYNC.2; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0814; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0815; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0816; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0817; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0818; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC4 : bit absolute PSMC1REBS.4; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0819; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC4 : bit absolute PSMC1FEBS.4; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $081A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC4 : bit absolute PSMC1PHS.4; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $081B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC4 : bit absolute PSMC1DCS.4; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $081C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC4 : bit absolute PSMC1PRS.4; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $081D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $081E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $081F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC4 : bit absolute PSMC1ASDS.4; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0820; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0821; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0822; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0823; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0824; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0825; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0826; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0827; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0828; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0829; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $082A; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $082B; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $082C; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $082D; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $082E; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $082F; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0831; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0832; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0833; + PSMC2SYNC_P2POFST : bit absolute PSMC2SYNC.7; + PSMC2SYNC_P2PRPOL : bit absolute PSMC2SYNC.6; + PSMC2SYNC_P2DCPOL : bit absolute PSMC2SYNC.5; + PSMC2SYNC_P2SYNC2 : bit absolute PSMC2SYNC.2; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0834; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0835; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0836; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0837; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0838; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC4 : bit absolute PSMC2REBS.4; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0839; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC4 : bit absolute PSMC2FEBS.4; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $083A; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC4 : bit absolute PSMC2PHS.4; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $083B; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC4 : bit absolute PSMC2DCS.4; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $083C; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC4 : bit absolute PSMC2PRS.4; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $083D; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $083E; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $083F; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC4 : bit absolute PSMC2ASDS.4; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0840; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0841; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0842; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0843; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0844; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0845; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0846; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0847; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0848; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0849; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $084A; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $084B; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $084C; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $084D; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $084E; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $084F; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + PSMC3CON : byte absolute $0851; + PSMC3CON_PSMC3EN : bit absolute PSMC3CON.7; + PSMC3CON_PSMC3LD : bit absolute PSMC3CON.6; + PSMC3CON_P3DBFE : bit absolute PSMC3CON.5; + PSMC3CON_P3DBRE : bit absolute PSMC3CON.4; + PSMC3CON_P3MODE3 : bit absolute PSMC3CON.3; + PSMC3CON_P3MODE2 : bit absolute PSMC3CON.2; + PSMC3CON_P3MODE1 : bit absolute PSMC3CON.1; + PSMC3CON_P3MODE0 : bit absolute PSMC3CON.0; + PSMC3MDL : byte absolute $0852; + PSMC3MDL_P3MDLEN : bit absolute PSMC3MDL.7; + PSMC3MDL_P3MDLPOL : bit absolute PSMC3MDL.6; + PSMC3MDL_P3MDLBIT : bit absolute PSMC3MDL.5; + PSMC3MDL_P3MSRC3 : bit absolute PSMC3MDL.3; + PSMC3MDL_P3MSRC2 : bit absolute PSMC3MDL.2; + PSMC3MDL_P3MSRC1 : bit absolute PSMC3MDL.1; + PSMC3MDL_P3MSRC0 : bit absolute PSMC3MDL.0; + PSMC3SYNC : byte absolute $0853; + PSMC3SYNC_P3POFST : bit absolute PSMC3SYNC.7; + PSMC3SYNC_P3PRPOL : bit absolute PSMC3SYNC.6; + PSMC3SYNC_P3DCPOL : bit absolute PSMC3SYNC.5; + PSMC3SYNC_P3SYNC2 : bit absolute PSMC3SYNC.2; + PSMC3SYNC_P3SYNC1 : bit absolute PSMC3SYNC.1; + PSMC3SYNC_P3SYNC0 : bit absolute PSMC3SYNC.0; + PSMC3CLK : byte absolute $0854; + PSMC3CLK_P3CPRE1 : bit absolute PSMC3CLK.5; + PSMC3CLK_P3CPRE0 : bit absolute PSMC3CLK.4; + PSMC3CLK_P3CSRC1 : bit absolute PSMC3CLK.1; + PSMC3CLK_P3CSRC0 : bit absolute PSMC3CLK.0; + PSMC3OEN : byte absolute $0855; + PSMC3OEN_P3OEB : bit absolute PSMC3OEN.1; + PSMC3OEN_P3OEA : bit absolute PSMC3OEN.0; + PSMC3POL : byte absolute $0856; + PSMC3POL_P3INPOL : bit absolute PSMC3POL.6; + PSMC3POL_P3POLB : bit absolute PSMC3POL.1; + PSMC3POL_P3POLA : bit absolute PSMC3POL.0; + PSMC3BLNK : byte absolute $0857; + PSMC3BLNK_P3FEBM1 : bit absolute PSMC3BLNK.5; + PSMC3BLNK_P3FEBM0 : bit absolute PSMC3BLNK.4; + PSMC3BLNK_P3REBM1 : bit absolute PSMC3BLNK.1; + PSMC3BLNK_P3REBM0 : bit absolute PSMC3BLNK.0; + PSMC3REBS : byte absolute $0858; + PSMC3REBS_P3REBSIN : bit absolute PSMC3REBS.7; + PSMC3REBS_P3REBSC4 : bit absolute PSMC3REBS.4; + PSMC3REBS_P3REBSC3 : bit absolute PSMC3REBS.3; + PSMC3REBS_P3REBSC2 : bit absolute PSMC3REBS.2; + PSMC3REBS_P3REBSC1 : bit absolute PSMC3REBS.1; + PSMC3FEBS : byte absolute $0859; + PSMC3FEBS_P3FEBSIN : bit absolute PSMC3FEBS.7; + PSMC3FEBS_P3FEBSC4 : bit absolute PSMC3FEBS.4; + PSMC3FEBS_P3FEBSC3 : bit absolute PSMC3FEBS.3; + PSMC3FEBS_P3FEBSC2 : bit absolute PSMC3FEBS.2; + PSMC3FEBS_P3FEBSC1 : bit absolute PSMC3FEBS.1; + PSMC3PHS : byte absolute $085A; + PSMC3PHS_P3PHSIN : bit absolute PSMC3PHS.7; + PSMC3PHS_P3PHSC4 : bit absolute PSMC3PHS.4; + PSMC3PHS_P3PHSC3 : bit absolute PSMC3PHS.3; + PSMC3PHS_P3PHSC2 : bit absolute PSMC3PHS.2; + PSMC3PHS_P3PHSC1 : bit absolute PSMC3PHS.1; + PSMC3PHS_P3PHST : bit absolute PSMC3PHS.0; + PSMC3DCS : byte absolute $085B; + PSMC3DCS_P3DCSIN : bit absolute PSMC3DCS.7; + PSMC3DCS_P3DCSC4 : bit absolute PSMC3DCS.4; + PSMC3DCS_P3DCSC3 : bit absolute PSMC3DCS.3; + PSMC3DCS_P3DCSC2 : bit absolute PSMC3DCS.2; + PSMC3DCS_P3DCSC1 : bit absolute PSMC3DCS.1; + PSMC3DCS_P3DCST : bit absolute PSMC3DCS.0; + PSMC3PRS : byte absolute $085C; + PSMC3PRS_P3PRSIN : bit absolute PSMC3PRS.7; + PSMC3PRS_P3PRSC4 : bit absolute PSMC3PRS.4; + PSMC3PRS_P3PRSC3 : bit absolute PSMC3PRS.3; + PSMC3PRS_P3PRSC2 : bit absolute PSMC3PRS.2; + PSMC3PRS_P3PRSC1 : bit absolute PSMC3PRS.1; + PSMC3PRS_P3PRST : bit absolute PSMC3PRS.0; + PSMC3ASDC : byte absolute $085D; + PSMC3ASDC_P3ASE : bit absolute PSMC3ASDC.7; + PSMC3ASDC_P3ASDEN : bit absolute PSMC3ASDC.6; + PSMC3ASDC_P3ARSEN : bit absolute PSMC3ASDC.5; + PSMC3ASDC_P3ASDOV : bit absolute PSMC3ASDC.0; + PSMC3ASDL : byte absolute $085E; + PSMC3ASDL_P3ASDLF : bit absolute PSMC3ASDL.5; + PSMC3ASDL_P3ASDLE : bit absolute PSMC3ASDL.4; + PSMC3ASDL_P3ASDLD : bit absolute PSMC3ASDL.3; + PSMC3ASDL_P3ASDLC : bit absolute PSMC3ASDL.2; + PSMC3ASDL_P3ASDLB : bit absolute PSMC3ASDL.1; + PSMC3ASDL_P3ASDLA : bit absolute PSMC3ASDL.0; + PSMC3ASDS : byte absolute $085F; + PSMC3ASDS_P3ASDSIN : bit absolute PSMC3ASDS.7; + PSMC3ASDS_P3ASDSC4 : bit absolute PSMC3ASDS.4; + PSMC3ASDS_P3ASDSC3 : bit absolute PSMC3ASDS.3; + PSMC3ASDS_P3ASDSC2 : bit absolute PSMC3ASDS.2; + PSMC3ASDS_P3ASDSC1 : bit absolute PSMC3ASDS.1; + PSMC3INT : byte absolute $0860; + PSMC3INT_P3TOVIE : bit absolute PSMC3INT.7; + PSMC3INT_P3TPHIE : bit absolute PSMC3INT.6; + PSMC3INT_P3TDCIE : bit absolute PSMC3INT.5; + PSMC3INT_P3TPRIE : bit absolute PSMC3INT.4; + PSMC3INT_P3TOVIF : bit absolute PSMC3INT.3; + PSMC3INT_P3TPHIF : bit absolute PSMC3INT.2; + PSMC3INT_P3TDCIF : bit absolute PSMC3INT.1; + PSMC3INT_P3TPRIF : bit absolute PSMC3INT.0; + PSMC3PHL : byte absolute $0861; + PSMC3PHL_PSMC3PH7 : bit absolute PSMC3PHL.7; + PSMC3PHL_PSMC3PH6 : bit absolute PSMC3PHL.6; + PSMC3PHL_PSMC3PH5 : bit absolute PSMC3PHL.5; + PSMC3PHL_PSMC3PH4 : bit absolute PSMC3PHL.4; + PSMC3PHL_PSMC3PH3 : bit absolute PSMC3PHL.3; + PSMC3PHL_PSMC3PH2 : bit absolute PSMC3PHL.2; + PSMC3PHL_PSMC3PH1 : bit absolute PSMC3PHL.1; + PSMC3PHL_PSMC3PH0 : bit absolute PSMC3PHL.0; + PSMC3PHH : byte absolute $0862; + PSMC3PHH_PSMC3PH15 : bit absolute PSMC3PHH.7; + PSMC3PHH_PSMC3PH14 : bit absolute PSMC3PHH.6; + PSMC3PHH_PSMC3PH13 : bit absolute PSMC3PHH.5; + PSMC3PHH_PSMC3PH12 : bit absolute PSMC3PHH.4; + PSMC3PHH_PSMC3PH11 : bit absolute PSMC3PHH.3; + PSMC3PHH_PSMC3PH10 : bit absolute PSMC3PHH.2; + PSMC3PHH_PSMC3PH9 : bit absolute PSMC3PHH.1; + PSMC3PHH_PSMC3PH8 : bit absolute PSMC3PHH.0; + PSMC3DCL : byte absolute $0863; + PSMC3DCL_PSMC3DC7 : bit absolute PSMC3DCL.7; + PSMC3DCL_PSMC3DC6 : bit absolute PSMC3DCL.6; + PSMC3DCL_PSMC3DC5 : bit absolute PSMC3DCL.5; + PSMC3DCL_PSMC3DC4 : bit absolute PSMC3DCL.4; + PSMC3DCL_PSMC3DC3 : bit absolute PSMC3DCL.3; + PSMC3DCL_PSMC3DC2 : bit absolute PSMC3DCL.2; + PSMC3DCL_PSMC3DC1 : bit absolute PSMC3DCL.1; + PSMC3DCL_PSMC3DC0 : bit absolute PSMC3DCL.0; + PSMC3DCH : byte absolute $0864; + PSMC3DCH_PSMC3DC15 : bit absolute PSMC3DCH.7; + PSMC3DCH_PSMC3DC14 : bit absolute PSMC3DCH.6; + PSMC3DCH_PSMC3DC13 : bit absolute PSMC3DCH.5; + PSMC3DCH_PSMC3DC12 : bit absolute PSMC3DCH.4; + PSMC3DCH_PSMC3DC11 : bit absolute PSMC3DCH.3; + PSMC3DCH_PSMC3DC10 : bit absolute PSMC3DCH.2; + PSMC3DCH_PSMC3DC9 : bit absolute PSMC3DCH.1; + PSMC3DCH_PSMC3DC8 : bit absolute PSMC3DCH.0; + PSMC3PRL : byte absolute $0865; + PSMC3PRL_PSMC3PR7 : bit absolute PSMC3PRL.7; + PSMC3PRL_PSMC3PR6 : bit absolute PSMC3PRL.6; + PSMC3PRL_PSMC3PR5 : bit absolute PSMC3PRL.5; + PSMC3PRL_PSMC3PR4 : bit absolute PSMC3PRL.4; + PSMC3PRL_PSMC3PR3 : bit absolute PSMC3PRL.3; + PSMC3PRL_PSMC3PR2 : bit absolute PSMC3PRL.2; + PSMC3PRL_PSMC3PR1 : bit absolute PSMC3PRL.1; + PSMC3PRL_PSMC3PR0 : bit absolute PSMC3PRL.0; + PSMC3PRH : byte absolute $0866; + PSMC3PRH_PSMC3PR15 : bit absolute PSMC3PRH.7; + PSMC3PRH_PSMC3PR14 : bit absolute PSMC3PRH.6; + PSMC3PRH_PSMC3PR13 : bit absolute PSMC3PRH.5; + PSMC3PRH_PSMC3PR12 : bit absolute PSMC3PRH.4; + PSMC3PRH_PSMC3PR11 : bit absolute PSMC3PRH.3; + PSMC3PRH_PSMC3PR10 : bit absolute PSMC3PRH.2; + PSMC3PRH_PSMC3PR9 : bit absolute PSMC3PRH.1; + PSMC3PRH_PSMC3PR8 : bit absolute PSMC3PRH.0; + PSMC3TMRL : byte absolute $0867; + PSMC3TMRL_PSMC3TMR7 : bit absolute PSMC3TMRL.7; + PSMC3TMRL_PSMC3TMR6 : bit absolute PSMC3TMRL.6; + PSMC3TMRL_PSMC3TMR5 : bit absolute PSMC3TMRL.5; + PSMC3TMRL_PSMC3TMR4 : bit absolute PSMC3TMRL.4; + PSMC3TMRL_PSMC3TMR3 : bit absolute PSMC3TMRL.3; + PSMC3TMRL_PSMC3TMR2 : bit absolute PSMC3TMRL.2; + PSMC3TMRL_PSMC3TMR1 : bit absolute PSMC3TMRL.1; + PSMC3TMRL_PSMC3TMR0 : bit absolute PSMC3TMRL.0; + PSMC3TMRH : byte absolute $0868; + PSMC3TMRH_PSMC3TMR15 : bit absolute PSMC3TMRH.7; + PSMC3TMRH_PSMC3TMR14 : bit absolute PSMC3TMRH.6; + PSMC3TMRH_PSMC3TMR13 : bit absolute PSMC3TMRH.5; + PSMC3TMRH_PSMC3TMR12 : bit absolute PSMC3TMRH.4; + PSMC3TMRH_PSMC3TMR11 : bit absolute PSMC3TMRH.3; + PSMC3TMRH_PSMC3TMR10 : bit absolute PSMC3TMRH.2; + PSMC3TMRH_PSMC3TMR9 : bit absolute PSMC3TMRH.1; + PSMC3TMRH_PSMC3TMR8 : bit absolute PSMC3TMRH.0; + PSMC3DBR : byte absolute $0869; + PSMC3DBR_PSMC3DBR7 : bit absolute PSMC3DBR.7; + PSMC3DBR_PSMC3DBR6 : bit absolute PSMC3DBR.6; + PSMC3DBR_PSMC3DBR5 : bit absolute PSMC3DBR.5; + PSMC3DBR_PSMC3DBR4 : bit absolute PSMC3DBR.4; + PSMC3DBR_PSMC3DBR3 : bit absolute PSMC3DBR.3; + PSMC3DBR_PSMC3DBR2 : bit absolute PSMC3DBR.2; + PSMC3DBR_PSMC3DBR1 : bit absolute PSMC3DBR.1; + PSMC3DBR_PSMC3DBR0 : bit absolute PSMC3DBR.0; + PSMC3DBF : byte absolute $086A; + PSMC3DBF_PSMC3DBF7 : bit absolute PSMC3DBF.7; + PSMC3DBF_PSMC3DBF6 : bit absolute PSMC3DBF.6; + PSMC3DBF_PSMC3DBF5 : bit absolute PSMC3DBF.5; + PSMC3DBF_PSMC3DBF4 : bit absolute PSMC3DBF.4; + PSMC3DBF_PSMC3DBF3 : bit absolute PSMC3DBF.3; + PSMC3DBF_PSMC3DBF2 : bit absolute PSMC3DBF.2; + PSMC3DBF_PSMC3DBF1 : bit absolute PSMC3DBF.1; + PSMC3DBF_PSMC3DBF0 : bit absolute PSMC3DBF.0; + PSMC3BLKR : byte absolute $086B; + PSMC3BLKR_PSMC3BLKR7 : bit absolute PSMC3BLKR.7; + PSMC3BLKR_PSMC3BLKR6 : bit absolute PSMC3BLKR.6; + PSMC3BLKR_PSMC3BLKR5 : bit absolute PSMC3BLKR.5; + PSMC3BLKR_PSMC3BLKR4 : bit absolute PSMC3BLKR.4; + PSMC3BLKR_PSMC3BLKR3 : bit absolute PSMC3BLKR.3; + PSMC3BLKR_PSMC3BLKR2 : bit absolute PSMC3BLKR.2; + PSMC3BLKR_PSMC3BLKR1 : bit absolute PSMC3BLKR.1; + PSMC3BLKR_PSMC3BLKR0 : bit absolute PSMC3BLKR.0; + PSMC3BLKF : byte absolute $086C; + PSMC3BLKF_PSMC3BLKF7 : bit absolute PSMC3BLKF.7; + PSMC3BLKF_PSMC3BLKF6 : bit absolute PSMC3BLKF.6; + PSMC3BLKF_PSMC3BLKF5 : bit absolute PSMC3BLKF.5; + PSMC3BLKF_PSMC3BLKF4 : bit absolute PSMC3BLKF.4; + PSMC3BLKF_PSMC3BLKF3 : bit absolute PSMC3BLKF.3; + PSMC3BLKF_PSMC3BLKF2 : bit absolute PSMC3BLKF.2; + PSMC3BLKF_PSMC3BLKF1 : bit absolute PSMC3BLKF.1; + PSMC3BLKF_PSMC3BLKF0 : bit absolute PSMC3BLKF.0; + PSMC3FFA : byte absolute $086D; + PSMC3FFA_PSMC3FFA3 : bit absolute PSMC3FFA.3; + PSMC3FFA_PSMC3FFA2 : bit absolute PSMC3FFA.2; + PSMC3FFA_PSMC3FFA1 : bit absolute PSMC3FFA.1; + PSMC3FFA_PSMC3FFA0 : bit absolute PSMC3FFA.0; + PSMC3STR0 : byte absolute $086E; + PSMC3STR0_P3STRB : bit absolute PSMC3STR0.1; + PSMC3STR0_P3STRA : bit absolute PSMC3STR0.0; + PSMC3STR1 : byte absolute $086F; + PSMC3STR1_P3SSYNC : bit absolute PSMC3STR1.7; + PSMC3STR1_P3LSMEN : bit absolute PSMC3STR1.1; + PSMC3STR1_P3HSMEN : bit absolute PSMC3STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01C:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-09F:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11F:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, CM4CON0, CM4CON1, APFCON2, APFCON1, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '811-82F:SFR'} // Bank 16 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM '831-84F:SFR'} // Bank 16 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM '851-86F:SFR'} // Bank 16 : PSMC3CON, PSMC3MDL, PSMC3SYNC, PSMC3CLK, PSMC3OEN, PSMC3POL, PSMC3BLNK, PSMC3REBS, PSMC3FEBS, PSMC3PHS, PSMC3DCS, PSMC3PRS, PSMC3ASDC, PSMC3ASDL, PSMC3ASDS, PSMC3INT, PSMC3PHL, PSMC3PHH, PSMC3DCL, PSMC3DCH, PSMC3PRL, PSMC3PRH, PSMC3TMRL, PSMC3TMRH, PSMC3DBR, PSMC3DBF, PSMC3BLKR, PSMC3BLKF, PSMC3FFA, PSMC3STR0, PSMC3STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:77'} // PIR4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:77'} // PIE4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DACCON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:01'} // APFCON2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:7F'} // ANSELB bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C3'} // OPA1CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C3'} // OPA2CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:E7'} // PSMC1SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:9E'} // PSMC1REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:9E'} // PSMC1FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:9F'} // PSMC1PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:9F'} // PSMC1DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:9F'} // PSMC1PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81F:9E'} // PSMC1ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '82D:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '82E:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '82F:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '832:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '833:E7'} // PSMC2SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '834:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '835:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '836:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '837:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '838:9E'} // PSMC2REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '839:9E'} // PSMC2FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '83A:9F'} // PSMC2PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83B:9F'} // PSMC2DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83C:9F'} // PSMC2PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83D:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '83E:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '83F:9E'} // PSMC2ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '84D:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '84E:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '84F:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '852:EF'} // PSMC3MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '853:E7'} // PSMC3SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '854:33'} // PSMC3CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '855:03'} // PSMC3OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '856:43'} // PSMC3POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '857:33'} // PSMC3BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '858:9E'} // PSMC3REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '859:9E'} // PSMC3FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '85A:9F'} // PSMC3PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85B:9F'} // PSMC3DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85C:9F'} // PSMC3PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85D:E1'} // PSMC3ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '85E:3F'} // PSMC3ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '85F:9E'} // PSMC3ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '86D:0F'} // PSMC3FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '86E:03'} // PSMC3STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '86F:83'} // PSMC3STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS + // Pin 8 : Vss + // Pin 9 : RA7/PSMC1CLK/PSMC2CLK/PSMC3CLK/OSC1/CLKIN + // Pin 10 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 11 : RC0/SOSCO/T1CKI/PSMC1A + // Pin 12 : RC1/SOSCI/CCP2/PSMC1B + // Pin 13 : RC2/CCP1/PSMC3B/PSMC1C + // Pin 14 : RC3/SCK/SCL/PSMC1D + // Pin 15 : RC4/SDI/SDA/PSMC1E + // Pin 16 : RC5/SDO/PSMC3A/PSMC1F + // Pin 17 : RC6/CCP3/TX/CK/PSMC2A + // Pin 18 : RC7/C4OUT/RX/DT/PSMC2B + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/PSMC1IN/PSMC2IN/PSMC3IN/CCP1/INT + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN-/CLKR + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 25 : RB4/AN11/C3IN1+ + // Pin 26 : RB5/AN13/C4IN2-/T1G/CCP3/C3OUT/SDO + // Pin 27 : RB6/TX/CK/SDI/SDA/C4IN1+/ICSPCLK/ICDCLK + // Pin 28 : RB7/RX/DT/SCK/SCL/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1787.pas b/devices17/PIC16F1787.pas new file mode 100644 index 00000000..2f6f5f9e --- /dev/null +++ b/devices17/PIC16F1787.pas @@ -0,0 +1,1896 @@ +unit PIC16F1787; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1787'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_PSMC3TIF : bit absolute PIR4.6; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC3SIF : bit absolute PIR4.2; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_PSMC3TIE : bit absolute PIE4.6; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC3SIE : bit absolute PIE4.2; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACOE1 : bit absolute DACCON0.5; + DACCON0_DACOE2 : bit absolute DACCON0.4; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR7 : bit absolute DACCON1.7; + DACCON1_DACR6 : bit absolute DACCON1.6; + DACCON1_DACR5 : bit absolute DACCON1.5; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + CM4CON0 : byte absolute $011A; + CM4CON0_C4ON : bit absolute CM4CON0.7; + CM4CON0_C4OUT : bit absolute CM4CON0.6; + CM4CON0_C4OE : bit absolute CM4CON0.5; + CM4CON0_C4POL : bit absolute CM4CON0.4; + CM4CON0_C4ZLF : bit absolute CM4CON0.3; + CM4CON0_C4SP : bit absolute CM4CON0.2; + CM4CON0_C4HYS : bit absolute CM4CON0.1; + CM4CON0_C4SYNC : bit absolute CM4CON0.0; + CM4CON1 : byte absolute $011B; + CM4CON1_C4INTP : bit absolute CM4CON1.7; + CM4CON1_C4INTN : bit absolute CM4CON1.6; + CM4CON1_C4PCH2 : bit absolute CM4CON1.5; + CM4CON1_C4PCH1 : bit absolute CM4CON1.4; + CM4CON1_C4PCH0 : bit absolute CM4CON1.3; + CM4CON1_C4NCH2 : bit absolute CM4CON1.2; + CM4CON1_C4NCH1 : bit absolute CM4CON1.1; + CM4CON1_C4NCH0 : bit absolute CM4CON1.0; + APFCON2 : byte absolute $011C; + APFCON2_CCP3SEL : bit absolute APFCON2.0; + APFCON1 : byte absolute $011D; + APFCON1_C2OUTSEL : bit absolute APFCON1.7; + APFCON1_CCP1SEL : bit absolute APFCON1.6; + APFCON1_SDOSEL : bit absolute APFCON1.5; + APFCON1_SCKSEL : bit absolute APFCON1.4; + APFCON1_SDISEL : bit absolute APFCON1.3; + APFCON1_TXSEL : bit absolute APFCON1.2; + APFCON1_RXSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODCOND7 : bit absolute ODCOND.7; + ODCOND_ODCOND6 : bit absolute ODCOND.6; + ODCOND_ODCOND5 : bit absolute ODCOND.5; + ODCOND_ODCOND4 : bit absolute ODCOND.4; + ODCOND_ODCOND3 : bit absolute ODCOND.3; + ODCOND_ODCOND2 : bit absolute ODCOND.2; + ODCOND_ODCOND1 : bit absolute ODCOND.1; + ODCOND_ODCOND0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODCONE2 : bit absolute ODCONE.2; + ODCONE_ODCONE1 : bit absolute ODCONE.1; + ODCONE_ODCONE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRCOND7 : bit absolute SLRCOND.7; + SLRCOND_SLRCOND6 : bit absolute SLRCOND.6; + SLRCOND_SLRCOND5 : bit absolute SLRCOND.5; + SLRCOND_SLRCOND4 : bit absolute SLRCOND.4; + SLRCOND_SLRCOND3 : bit absolute SLRCOND.3; + SLRCOND_SLRCOND2 : bit absolute SLRCOND.2; + SLRCOND_SLRCOND1 : bit absolute SLRCOND.1; + SLRCOND_SLRCOND0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRCONE2 : bit absolute SLRCONE.2; + SLRCONE_SLRCONE1 : bit absolute SLRCONE.1; + SLRCONE_SLRCONE0 : bit absolute SLRCONE.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + OPA3CON : byte absolute $0515; + OPA3CON_OPA3PCH1 : bit absolute OPA3CON.1; + OPA3CON_OPA3PCH0 : bit absolute OPA3CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + PSMC1CON : byte absolute $0811; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0812; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0813; + PSMC1SYNC_P1POFST : bit absolute PSMC1SYNC.7; + PSMC1SYNC_P1PRPOL : bit absolute PSMC1SYNC.6; + PSMC1SYNC_P1DCPOL : bit absolute PSMC1SYNC.5; + PSMC1SYNC_P1SYNC2 : bit absolute PSMC1SYNC.2; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0814; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0815; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0816; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0817; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0818; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC4 : bit absolute PSMC1REBS.4; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0819; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC4 : bit absolute PSMC1FEBS.4; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $081A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC4 : bit absolute PSMC1PHS.4; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $081B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC4 : bit absolute PSMC1DCS.4; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $081C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC4 : bit absolute PSMC1PRS.4; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $081D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $081E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $081F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC4 : bit absolute PSMC1ASDS.4; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0820; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0821; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0822; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0823; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0824; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0825; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0826; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0827; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0828; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0829; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $082A; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $082B; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $082C; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $082D; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $082E; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $082F; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0831; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0832; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0833; + PSMC2SYNC_P2POFST : bit absolute PSMC2SYNC.7; + PSMC2SYNC_P2PRPOL : bit absolute PSMC2SYNC.6; + PSMC2SYNC_P2DCPOL : bit absolute PSMC2SYNC.5; + PSMC2SYNC_P2SYNC2 : bit absolute PSMC2SYNC.2; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0834; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0835; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0836; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0837; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0838; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC4 : bit absolute PSMC2REBS.4; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0839; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC4 : bit absolute PSMC2FEBS.4; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $083A; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC4 : bit absolute PSMC2PHS.4; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $083B; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC4 : bit absolute PSMC2DCS.4; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $083C; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC4 : bit absolute PSMC2PRS.4; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $083D; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $083E; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $083F; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC4 : bit absolute PSMC2ASDS.4; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0840; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0841; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0842; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0843; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0844; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0845; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0846; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0847; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0848; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0849; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $084A; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $084B; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $084C; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $084D; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $084E; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $084F; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + PSMC3CON : byte absolute $0851; + PSMC3CON_PSMC3EN : bit absolute PSMC3CON.7; + PSMC3CON_PSMC3LD : bit absolute PSMC3CON.6; + PSMC3CON_P3DBFE : bit absolute PSMC3CON.5; + PSMC3CON_P3DBRE : bit absolute PSMC3CON.4; + PSMC3CON_P3MODE3 : bit absolute PSMC3CON.3; + PSMC3CON_P3MODE2 : bit absolute PSMC3CON.2; + PSMC3CON_P3MODE1 : bit absolute PSMC3CON.1; + PSMC3CON_P3MODE0 : bit absolute PSMC3CON.0; + PSMC3MDL : byte absolute $0852; + PSMC3MDL_P3MDLEN : bit absolute PSMC3MDL.7; + PSMC3MDL_P3MDLPOL : bit absolute PSMC3MDL.6; + PSMC3MDL_P3MDLBIT : bit absolute PSMC3MDL.5; + PSMC3MDL_P3MSRC3 : bit absolute PSMC3MDL.3; + PSMC3MDL_P3MSRC2 : bit absolute PSMC3MDL.2; + PSMC3MDL_P3MSRC1 : bit absolute PSMC3MDL.1; + PSMC3MDL_P3MSRC0 : bit absolute PSMC3MDL.0; + PSMC3SYNC : byte absolute $0853; + PSMC3SYNC_P3POFST : bit absolute PSMC3SYNC.7; + PSMC3SYNC_P3PRPOL : bit absolute PSMC3SYNC.6; + PSMC3SYNC_P3DCPOL : bit absolute PSMC3SYNC.5; + PSMC3SYNC_P3SYNC2 : bit absolute PSMC3SYNC.2; + PSMC3SYNC_P3SYNC1 : bit absolute PSMC3SYNC.1; + PSMC3SYNC_P3SYNC0 : bit absolute PSMC3SYNC.0; + PSMC3CLK : byte absolute $0854; + PSMC3CLK_P3CPRE1 : bit absolute PSMC3CLK.5; + PSMC3CLK_P3CPRE0 : bit absolute PSMC3CLK.4; + PSMC3CLK_P3CSRC1 : bit absolute PSMC3CLK.1; + PSMC3CLK_P3CSRC0 : bit absolute PSMC3CLK.0; + PSMC3OEN : byte absolute $0855; + PSMC3OEN_P3OEF : bit absolute PSMC3OEN.5; + PSMC3OEN_P3OEE : bit absolute PSMC3OEN.4; + PSMC3OEN_P3OED : bit absolute PSMC3OEN.3; + PSMC3OEN_P3OEC : bit absolute PSMC3OEN.2; + PSMC3OEN_P3OEB : bit absolute PSMC3OEN.1; + PSMC3OEN_P3OEA : bit absolute PSMC3OEN.0; + PSMC3POL : byte absolute $0856; + PSMC3POL_P3INPOL : bit absolute PSMC3POL.6; + PSMC3POL_P3POLF : bit absolute PSMC3POL.5; + PSMC3POL_P3POLE : bit absolute PSMC3POL.4; + PSMC3POL_P3POLD : bit absolute PSMC3POL.3; + PSMC3POL_P3POLC : bit absolute PSMC3POL.2; + PSMC3POL_P3POLB : bit absolute PSMC3POL.1; + PSMC3POL_P3POLA : bit absolute PSMC3POL.0; + PSMC3BLNK : byte absolute $0857; + PSMC3BLNK_P3FEBM1 : bit absolute PSMC3BLNK.5; + PSMC3BLNK_P3FEBM0 : bit absolute PSMC3BLNK.4; + PSMC3BLNK_P3REBM1 : bit absolute PSMC3BLNK.1; + PSMC3BLNK_P3REBM0 : bit absolute PSMC3BLNK.0; + PSMC3REBS : byte absolute $0858; + PSMC3REBS_P3REBSIN : bit absolute PSMC3REBS.7; + PSMC3REBS_P3REBSC4 : bit absolute PSMC3REBS.4; + PSMC3REBS_P3REBSC3 : bit absolute PSMC3REBS.3; + PSMC3REBS_P3REBSC2 : bit absolute PSMC3REBS.2; + PSMC3REBS_P3REBSC1 : bit absolute PSMC3REBS.1; + PSMC3FEBS : byte absolute $0859; + PSMC3FEBS_P3FEBSIN : bit absolute PSMC3FEBS.7; + PSMC3FEBS_P3FEBSC4 : bit absolute PSMC3FEBS.4; + PSMC3FEBS_P3FEBSC3 : bit absolute PSMC3FEBS.3; + PSMC3FEBS_P3FEBSC2 : bit absolute PSMC3FEBS.2; + PSMC3FEBS_P3FEBSC1 : bit absolute PSMC3FEBS.1; + PSMC3PHS : byte absolute $085A; + PSMC3PHS_P3PHSIN : bit absolute PSMC3PHS.7; + PSMC3PHS_P3PHSC4 : bit absolute PSMC3PHS.4; + PSMC3PHS_P3PHSC3 : bit absolute PSMC3PHS.3; + PSMC3PHS_P3PHSC2 : bit absolute PSMC3PHS.2; + PSMC3PHS_P3PHSC1 : bit absolute PSMC3PHS.1; + PSMC3PHS_P3PHST : bit absolute PSMC3PHS.0; + PSMC3DCS : byte absolute $085B; + PSMC3DCS_P3DCSIN : bit absolute PSMC3DCS.7; + PSMC3DCS_P3DCSC4 : bit absolute PSMC3DCS.4; + PSMC3DCS_P3DCSC3 : bit absolute PSMC3DCS.3; + PSMC3DCS_P3DCSC2 : bit absolute PSMC3DCS.2; + PSMC3DCS_P3DCSC1 : bit absolute PSMC3DCS.1; + PSMC3DCS_P3DCST : bit absolute PSMC3DCS.0; + PSMC3PRS : byte absolute $085C; + PSMC3PRS_P3PRSIN : bit absolute PSMC3PRS.7; + PSMC3PRS_P3PRSC4 : bit absolute PSMC3PRS.4; + PSMC3PRS_P3PRSC3 : bit absolute PSMC3PRS.3; + PSMC3PRS_P3PRSC2 : bit absolute PSMC3PRS.2; + PSMC3PRS_P3PRSC1 : bit absolute PSMC3PRS.1; + PSMC3PRS_P3PRST : bit absolute PSMC3PRS.0; + PSMC3ASDC : byte absolute $085D; + PSMC3ASDC_P3ASE : bit absolute PSMC3ASDC.7; + PSMC3ASDC_P3ASDEN : bit absolute PSMC3ASDC.6; + PSMC3ASDC_P3ARSEN : bit absolute PSMC3ASDC.5; + PSMC3ASDC_P3ASDOV : bit absolute PSMC3ASDC.0; + PSMC3ASDL : byte absolute $085E; + PSMC3ASDL_P3ASDLF : bit absolute PSMC3ASDL.5; + PSMC3ASDL_P3ASDLE : bit absolute PSMC3ASDL.4; + PSMC3ASDL_P3ASDLD : bit absolute PSMC3ASDL.3; + PSMC3ASDL_P3ASDLC : bit absolute PSMC3ASDL.2; + PSMC3ASDL_P3ASDLB : bit absolute PSMC3ASDL.1; + PSMC3ASDL_P3ASDLA : bit absolute PSMC3ASDL.0; + PSMC3ASDS : byte absolute $085F; + PSMC3ASDS_P3ASDSIN : bit absolute PSMC3ASDS.7; + PSMC3ASDS_P3ASDSC4 : bit absolute PSMC3ASDS.4; + PSMC3ASDS_P3ASDSC3 : bit absolute PSMC3ASDS.3; + PSMC3ASDS_P3ASDSC2 : bit absolute PSMC3ASDS.2; + PSMC3ASDS_P3ASDSC1 : bit absolute PSMC3ASDS.1; + PSMC3INT : byte absolute $0860; + PSMC3INT_P3TOVIE : bit absolute PSMC3INT.7; + PSMC3INT_P3TPHIE : bit absolute PSMC3INT.6; + PSMC3INT_P3TDCIE : bit absolute PSMC3INT.5; + PSMC3INT_P3TPRIE : bit absolute PSMC3INT.4; + PSMC3INT_P3TOVIF : bit absolute PSMC3INT.3; + PSMC3INT_P3TPHIF : bit absolute PSMC3INT.2; + PSMC3INT_P3TDCIF : bit absolute PSMC3INT.1; + PSMC3INT_P3TPRIF : bit absolute PSMC3INT.0; + PSMC3PHL : byte absolute $0861; + PSMC3PHL_PSMC3PH7 : bit absolute PSMC3PHL.7; + PSMC3PHL_PSMC3PH6 : bit absolute PSMC3PHL.6; + PSMC3PHL_PSMC3PH5 : bit absolute PSMC3PHL.5; + PSMC3PHL_PSMC3PH4 : bit absolute PSMC3PHL.4; + PSMC3PHL_PSMC3PH3 : bit absolute PSMC3PHL.3; + PSMC3PHL_PSMC3PH2 : bit absolute PSMC3PHL.2; + PSMC3PHL_PSMC3PH1 : bit absolute PSMC3PHL.1; + PSMC3PHL_PSMC3PH0 : bit absolute PSMC3PHL.0; + PSMC3PHH : byte absolute $0862; + PSMC3PHH_PSMC3PH15 : bit absolute PSMC3PHH.7; + PSMC3PHH_PSMC3PH14 : bit absolute PSMC3PHH.6; + PSMC3PHH_PSMC3PH13 : bit absolute PSMC3PHH.5; + PSMC3PHH_PSMC3PH12 : bit absolute PSMC3PHH.4; + PSMC3PHH_PSMC3PH11 : bit absolute PSMC3PHH.3; + PSMC3PHH_PSMC3PH10 : bit absolute PSMC3PHH.2; + PSMC3PHH_PSMC3PH9 : bit absolute PSMC3PHH.1; + PSMC3PHH_PSMC3PH8 : bit absolute PSMC3PHH.0; + PSMC3DCL : byte absolute $0863; + PSMC3DCL_PSMC3DC7 : bit absolute PSMC3DCL.7; + PSMC3DCL_PSMC3DC6 : bit absolute PSMC3DCL.6; + PSMC3DCL_PSMC3DC5 : bit absolute PSMC3DCL.5; + PSMC3DCL_PSMC3DC4 : bit absolute PSMC3DCL.4; + PSMC3DCL_PSMC3DC3 : bit absolute PSMC3DCL.3; + PSMC3DCL_PSMC3DC2 : bit absolute PSMC3DCL.2; + PSMC3DCL_PSMC3DC1 : bit absolute PSMC3DCL.1; + PSMC3DCL_PSMC3DC0 : bit absolute PSMC3DCL.0; + PSMC3DCH : byte absolute $0864; + PSMC3DCH_PSMC3DC15 : bit absolute PSMC3DCH.7; + PSMC3DCH_PSMC3DC14 : bit absolute PSMC3DCH.6; + PSMC3DCH_PSMC3DC13 : bit absolute PSMC3DCH.5; + PSMC3DCH_PSMC3DC12 : bit absolute PSMC3DCH.4; + PSMC3DCH_PSMC3DC11 : bit absolute PSMC3DCH.3; + PSMC3DCH_PSMC3DC10 : bit absolute PSMC3DCH.2; + PSMC3DCH_PSMC3DC9 : bit absolute PSMC3DCH.1; + PSMC3DCH_PSMC3DC8 : bit absolute PSMC3DCH.0; + PSMC3PRL : byte absolute $0865; + PSMC3PRL_PSMC3PR7 : bit absolute PSMC3PRL.7; + PSMC3PRL_PSMC3PR6 : bit absolute PSMC3PRL.6; + PSMC3PRL_PSMC3PR5 : bit absolute PSMC3PRL.5; + PSMC3PRL_PSMC3PR4 : bit absolute PSMC3PRL.4; + PSMC3PRL_PSMC3PR3 : bit absolute PSMC3PRL.3; + PSMC3PRL_PSMC3PR2 : bit absolute PSMC3PRL.2; + PSMC3PRL_PSMC3PR1 : bit absolute PSMC3PRL.1; + PSMC3PRL_PSMC3PR0 : bit absolute PSMC3PRL.0; + PSMC3PRH : byte absolute $0866; + PSMC3PRH_PSMC3PR15 : bit absolute PSMC3PRH.7; + PSMC3PRH_PSMC3PR14 : bit absolute PSMC3PRH.6; + PSMC3PRH_PSMC3PR13 : bit absolute PSMC3PRH.5; + PSMC3PRH_PSMC3PR12 : bit absolute PSMC3PRH.4; + PSMC3PRH_PSMC3PR11 : bit absolute PSMC3PRH.3; + PSMC3PRH_PSMC3PR10 : bit absolute PSMC3PRH.2; + PSMC3PRH_PSMC3PR9 : bit absolute PSMC3PRH.1; + PSMC3PRH_PSMC3PR8 : bit absolute PSMC3PRH.0; + PSMC3TMRL : byte absolute $0867; + PSMC3TMRL_PSMC3TMR7 : bit absolute PSMC3TMRL.7; + PSMC3TMRL_PSMC3TMR6 : bit absolute PSMC3TMRL.6; + PSMC3TMRL_PSMC3TMR5 : bit absolute PSMC3TMRL.5; + PSMC3TMRL_PSMC3TMR4 : bit absolute PSMC3TMRL.4; + PSMC3TMRL_PSMC3TMR3 : bit absolute PSMC3TMRL.3; + PSMC3TMRL_PSMC3TMR2 : bit absolute PSMC3TMRL.2; + PSMC3TMRL_PSMC3TMR1 : bit absolute PSMC3TMRL.1; + PSMC3TMRL_PSMC3TMR0 : bit absolute PSMC3TMRL.0; + PSMC3TMRH : byte absolute $0868; + PSMC3TMRH_PSMC3TMR15 : bit absolute PSMC3TMRH.7; + PSMC3TMRH_PSMC3TMR14 : bit absolute PSMC3TMRH.6; + PSMC3TMRH_PSMC3TMR13 : bit absolute PSMC3TMRH.5; + PSMC3TMRH_PSMC3TMR12 : bit absolute PSMC3TMRH.4; + PSMC3TMRH_PSMC3TMR11 : bit absolute PSMC3TMRH.3; + PSMC3TMRH_PSMC3TMR10 : bit absolute PSMC3TMRH.2; + PSMC3TMRH_PSMC3TMR9 : bit absolute PSMC3TMRH.1; + PSMC3TMRH_PSMC3TMR8 : bit absolute PSMC3TMRH.0; + PSMC3DBR : byte absolute $0869; + PSMC3DBR_PSMC3DBR7 : bit absolute PSMC3DBR.7; + PSMC3DBR_PSMC3DBR6 : bit absolute PSMC3DBR.6; + PSMC3DBR_PSMC3DBR5 : bit absolute PSMC3DBR.5; + PSMC3DBR_PSMC3DBR4 : bit absolute PSMC3DBR.4; + PSMC3DBR_PSMC3DBR3 : bit absolute PSMC3DBR.3; + PSMC3DBR_PSMC3DBR2 : bit absolute PSMC3DBR.2; + PSMC3DBR_PSMC3DBR1 : bit absolute PSMC3DBR.1; + PSMC3DBR_PSMC3DBR0 : bit absolute PSMC3DBR.0; + PSMC3DBF : byte absolute $086A; + PSMC3DBF_PSMC3DBF7 : bit absolute PSMC3DBF.7; + PSMC3DBF_PSMC3DBF6 : bit absolute PSMC3DBF.6; + PSMC3DBF_PSMC3DBF5 : bit absolute PSMC3DBF.5; + PSMC3DBF_PSMC3DBF4 : bit absolute PSMC3DBF.4; + PSMC3DBF_PSMC3DBF3 : bit absolute PSMC3DBF.3; + PSMC3DBF_PSMC3DBF2 : bit absolute PSMC3DBF.2; + PSMC3DBF_PSMC3DBF1 : bit absolute PSMC3DBF.1; + PSMC3DBF_PSMC3DBF0 : bit absolute PSMC3DBF.0; + PSMC3BLKR : byte absolute $086B; + PSMC3BLKR_PSMC3BLKR7 : bit absolute PSMC3BLKR.7; + PSMC3BLKR_PSMC3BLKR6 : bit absolute PSMC3BLKR.6; + PSMC3BLKR_PSMC3BLKR5 : bit absolute PSMC3BLKR.5; + PSMC3BLKR_PSMC3BLKR4 : bit absolute PSMC3BLKR.4; + PSMC3BLKR_PSMC3BLKR3 : bit absolute PSMC3BLKR.3; + PSMC3BLKR_PSMC3BLKR2 : bit absolute PSMC3BLKR.2; + PSMC3BLKR_PSMC3BLKR1 : bit absolute PSMC3BLKR.1; + PSMC3BLKR_PSMC3BLKR0 : bit absolute PSMC3BLKR.0; + PSMC3BLKF : byte absolute $086C; + PSMC3BLKF_PSMC3BLKF7 : bit absolute PSMC3BLKF.7; + PSMC3BLKF_PSMC3BLKF6 : bit absolute PSMC3BLKF.6; + PSMC3BLKF_PSMC3BLKF5 : bit absolute PSMC3BLKF.5; + PSMC3BLKF_PSMC3BLKF4 : bit absolute PSMC3BLKF.4; + PSMC3BLKF_PSMC3BLKF3 : bit absolute PSMC3BLKF.3; + PSMC3BLKF_PSMC3BLKF2 : bit absolute PSMC3BLKF.2; + PSMC3BLKF_PSMC3BLKF1 : bit absolute PSMC3BLKF.1; + PSMC3BLKF_PSMC3BLKF0 : bit absolute PSMC3BLKF.0; + PSMC3FFA : byte absolute $086D; + PSMC3FFA_PSMC3FFA3 : bit absolute PSMC3FFA.3; + PSMC3FFA_PSMC3FFA2 : bit absolute PSMC3FFA.2; + PSMC3FFA_PSMC3FFA1 : bit absolute PSMC3FFA.1; + PSMC3FFA_PSMC3FFA0 : bit absolute PSMC3FFA.0; + PSMC3STR0 : byte absolute $086E; + PSMC3STR0_P3STRF : bit absolute PSMC3STR0.5; + PSMC3STR0_P3STRE : bit absolute PSMC3STR0.4; + PSMC3STR0_P3STRD : bit absolute PSMC3STR0.3; + PSMC3STR0_P3STRC : bit absolute PSMC3STR0.2; + PSMC3STR0_P3STRB : bit absolute PSMC3STR0.1; + PSMC3STR0_P3STRA : bit absolute PSMC3STR0.0; + PSMC3STR1 : byte absolute $086F; + PSMC3STR1_P3SSYNC : bit absolute PSMC3STR1.7; + PSMC3STR1_P3LSMEN : bit absolute PSMC3STR1.1; + PSMC3STR1_P3HSMEN : bit absolute PSMC3STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, CM4CON0, CM4CON1, APFCON2, APFCON1, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-197:SFR'} // Bank 3 : ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-293:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-313:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE, CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA3CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '811-82F:SFR'} // Bank 16 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM '831-84F:SFR'} // Bank 16 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM '851-86F:SFR'} // Bank 16 : PSMC3CON, PSMC3MDL, PSMC3SYNC, PSMC3CLK, PSMC3OEN, PSMC3POL, PSMC3BLNK, PSMC3REBS, PSMC3FEBS, PSMC3PHS, PSMC3DCS, PSMC3PRS, PSMC3ASDC, PSMC3ASDL, PSMC3ASDS, PSMC3INT, PSMC3PHL, PSMC3PHH, PSMC3DCL, PSMC3DCH, PSMC3PRL, PSMC3PRH, PSMC3TMRL, PSMC3TMRH, PSMC3DBR, PSMC3DBF, PSMC3BLKR, PSMC3BLKF, PSMC3FFA, PSMC3STR0, PSMC3STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:77'} // PIR4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:77'} // PIE4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DACCON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:01'} // APFCON2 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:7F'} // ANSELB bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:07'} // ANSELD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C3'} // OPA1CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C3'} // OPA2CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:C3'} // OPA3CON bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '813:E7'} // PSMC1SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '815:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '816:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '817:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '818:9E'} // PSMC1REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '819:9E'} // PSMC1FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81A:9F'} // PSMC1PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:9F'} // PSMC1DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81C:9F'} // PSMC1PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81F:9E'} // PSMC1ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '82D:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '82E:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '82F:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '832:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '833:E7'} // PSMC2SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '834:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '835:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '836:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '837:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '838:9E'} // PSMC2REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '839:9E'} // PSMC2FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '83A:9F'} // PSMC2PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83B:9F'} // PSMC2DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83C:9F'} // PSMC2PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '83D:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '83E:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '83F:9E'} // PSMC2ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '84D:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '84E:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '84F:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '852:EF'} // PSMC3MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '853:E7'} // PSMC3SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '854:33'} // PSMC3CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '855:3F'} // PSMC3OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '856:7F'} // PSMC3POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '857:33'} // PSMC3BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '858:9E'} // PSMC3REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '859:9E'} // PSMC3FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '85A:9F'} // PSMC3PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85B:9F'} // PSMC3DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85C:9F'} // PSMC3PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '85D:E1'} // PSMC3ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '85E:3F'} // PSMC3ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '85F:9E'} // PSMC3ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '86D:0F'} // PSMC3FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '86E:3F'} // PSMC3STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '86F:83'} // PSMC3STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0- + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS + // Pin 8 : RE0/AN5/CCP3 + // Pin 9 : RE1/AN6/PSMC3B + // Pin 10 : RE2/AN7/PSMC3A + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/PSMC1CLK/PSMC2CLK/PSMC3CLK/OSC1/CLKIN + // Pin 14 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 15 : RC0/SOSCO/T1CKI/PSMC1A + // Pin 16 : RC1/SOSCI/CCP2/PSMC1B + // Pin 17 : RC2/CCP1/PSMC1C + // Pin 18 : RC3/SCK/SCL/PSMC1D + // Pin 19 : RD0/OPA3IN+ + // Pin 20 : RD1/AN21/C1IN4-/C2IN4-/C3IN4-/C4IN4-/OPA3OUT + // Pin 21 : RD2/OPA3IN- + // Pin 22 : RD3 + // Pin 23 : RC4/SDI/SDA/PSMC1E + // Pin 24 : RC5/SDO/PSMC1F + // Pin 25 : RC6/TX/CK/PSMC2A + // Pin 26 : RC7/RX/DT/PSMC2B + // Pin 27 : RD4/PSMC3F + // Pin 28 : RD5/PSMC3E + // Pin 29 : RD6/C3OUT/PSMC3D + // Pin 30 : RD7/C4OUT/PSMC3C + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/C2IN1+/PSMC1IN/PSMC2IN/PSMC3IN/CCP1/INT + // Pin 34 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/OPA2OUT + // Pin 35 : RB2/AN8/OPA2IN-/CLKR + // Pin 36 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 37 : RB4/AN11/C3IN1+ + // Pin 38 : RB5/AN13/C4IN2-/T1G/CCP3/SDO + // Pin 39 : RB6/TX/CK/SDI/SDA/C4IN1+/ICSPCLK/ICDCLK + // Pin 40 : RB7/SCK/RX/DT/SCL/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1788.pas b/devices17/PIC16F1788.pas new file mode 100644 index 00000000..573e1a3c --- /dev/null +++ b/devices17/PIC16F1788.pas @@ -0,0 +1,2067 @@ +unit PIC16F1788; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1788'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_PSMC4TIF : bit absolute PIR4.7; + PIR4_PSMC3TIF : bit absolute PIR4.6; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC4SIF : bit absolute PIR4.3; + PIR4_PSMC3SIF : bit absolute PIR4.2; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_PSMC4TIE : bit absolute PIE4.7; + PIE4_PSMC3TIE : bit absolute PIE4.6; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC4SIE : bit absolute PIE4.3; + PIE4_PSMC3SIE : bit absolute PIE4.2; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + CM4CON0 : byte absolute $011A; + CM4CON0_C4ON : bit absolute CM4CON0.7; + CM4CON0_C4OUT : bit absolute CM4CON0.6; + CM4CON0_C4OE : bit absolute CM4CON0.5; + CM4CON0_C4POL : bit absolute CM4CON0.4; + CM4CON0_C4ZLF : bit absolute CM4CON0.3; + CM4CON0_C4SP : bit absolute CM4CON0.2; + CM4CON0_C4HYS : bit absolute CM4CON0.1; + CM4CON0_C4SYNC : bit absolute CM4CON0.0; + CM4CON1 : byte absolute $011B; + CM4CON1_C4INTP : bit absolute CM4CON1.7; + CM4CON1_C4INTN : bit absolute CM4CON1.6; + CM4CON1_C4PCH2 : bit absolute CM4CON1.5; + CM4CON1_C4PCH1 : bit absolute CM4CON1.4; + CM4CON1_C4PCH0 : bit absolute CM4CON1.3; + CM4CON1_C4NCH2 : bit absolute CM4CON1.2; + CM4CON1_C4NCH1 : bit absolute CM4CON1.1; + CM4CON1_C4NCH0 : bit absolute CM4CON1.0; + APFCON2 : byte absolute $011C; + APFCON2_SSSEL1 : bit absolute APFCON2.2; + APFCON2_SSSEL0 : bit absolute APFCON2.1; + APFCON2_CCP3SEL : bit absolute APFCON2.0; + APFCON1 : byte absolute $011D; + APFCON1_C2OUTSEL : bit absolute APFCON1.7; + APFCON1_CCP1SEL : bit absolute APFCON1.6; + APFCON1_SDOSEL : bit absolute APFCON1.5; + APFCON1_SCKSEL : bit absolute APFCON1.4; + APFCON1_SDISEL : bit absolute APFCON1.3; + APFCON1_TXSEL : bit absolute APFCON1.2; + APFCON1_RXSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1PCH2 : bit absolute OPA1CON.2; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2PCH2 : bit absolute OPA2CON.2; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + DAC2CON0 : byte absolute $0591; + DAC2CON0_DAC2EN : bit absolute DAC2CON0.7; + DAC2CON0_DAC2OE1 : bit absolute DAC2CON0.5; + DAC2CON0_DAC2OE2 : bit absolute DAC2CON0.4; + DAC2CON0_DAC2PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_DAC2PSS0 : bit absolute DAC2CON0.2; + DAC2REF : byte absolute $0592; + DAC2REF_DAC2R4 : bit absolute DAC2REF.4; + DAC2REF_DAC2R3 : bit absolute DAC2REF.3; + DAC2REF_DAC2R2 : bit absolute DAC2REF.2; + DAC2REF_DAC2R1 : bit absolute DAC2REF.1; + DAC2REF_DAC2R0 : bit absolute DAC2REF.0; + DAC3CON0 : byte absolute $0593; + DAC3CON0_DAC3EN : bit absolute DAC3CON0.7; + DAC3CON0_DAC3OE1 : bit absolute DAC3CON0.5; + DAC3CON0_DAC3OE2 : bit absolute DAC3CON0.4; + DAC3CON0_DAC3PSS1 : bit absolute DAC3CON0.3; + DAC3CON0_DAC3PSS0 : bit absolute DAC3CON0.2; + DAC3REF : byte absolute $0594; + DAC3REF_DAC3R4 : bit absolute DAC3REF.4; + DAC3REF_DAC3R3 : bit absolute DAC3REF.3; + DAC3REF_DAC3R2 : bit absolute DAC3REF.2; + DAC3REF_DAC3R1 : bit absolute DAC3REF.1; + DAC3REF_DAC3R0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0595; + DAC4CON0_DAC4EN : bit absolute DAC4CON0.7; + DAC4CON0_DAC4OE1 : bit absolute DAC4CON0.5; + DAC4CON0_DAC4OE2 : bit absolute DAC4CON0.4; + DAC4CON0_DAC4PSS1 : bit absolute DAC4CON0.3; + DAC4CON0_DAC4PSS0 : bit absolute DAC4CON0.2; + DAC4REF : byte absolute $0596; + DAC4REF_DAC4R4 : bit absolute DAC4REF.4; + DAC4REF_DAC4R3 : bit absolute DAC4REF.3; + DAC4REF_DAC4R2 : bit absolute DAC4REF.2; + DAC4REF_DAC4R1 : bit absolute DAC4REF.1; + DAC4REF_DAC4R0 : bit absolute DAC4REF.0; + PSMC1CON : byte absolute $0E91; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0E92; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0E93; + PSMC1SYNC_P1POFST : bit absolute PSMC1SYNC.7; + PSMC1SYNC_P1PRPOL : bit absolute PSMC1SYNC.6; + PSMC1SYNC_P1DCPOL : bit absolute PSMC1SYNC.5; + PSMC1SYNC_P1SYNC2 : bit absolute PSMC1SYNC.2; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0E94; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0E95; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0E96; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0E97; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0E98; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC4 : bit absolute PSMC1REBS.4; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0E99; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC4 : bit absolute PSMC1FEBS.4; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $0E9A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC4 : bit absolute PSMC1PHS.4; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $0E9B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC4 : bit absolute PSMC1DCS.4; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $0E9C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC4 : bit absolute PSMC1PRS.4; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $0E9D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $0E9E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $0E9F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC4 : bit absolute PSMC1ASDS.4; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0EA0; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0EA1; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0EA2; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0EA3; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0EA4; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0EA5; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0EA6; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0EA7; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0EA8; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0EA9; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $0EAA; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $0EAB; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $0EAC; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $0EAD; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $0EAE; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $0EAF; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0EB1; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0EB2; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0EB3; + PSMC2SYNC_P2POFST : bit absolute PSMC2SYNC.7; + PSMC2SYNC_P2PRPOL : bit absolute PSMC2SYNC.6; + PSMC2SYNC_P2DCPOL : bit absolute PSMC2SYNC.5; + PSMC2SYNC_P2SYNC2 : bit absolute PSMC2SYNC.2; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0EB4; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0EB5; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0EB6; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0EB7; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0EB8; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC4 : bit absolute PSMC2REBS.4; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0EB9; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC4 : bit absolute PSMC2FEBS.4; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $0EBA; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC4 : bit absolute PSMC2PHS.4; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $0EBB; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC4 : bit absolute PSMC2DCS.4; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $0EBC; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC4 : bit absolute PSMC2PRS.4; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $0EBD; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $0EBE; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $0EBF; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC4 : bit absolute PSMC2ASDS.4; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0EC0; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0EC1; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0EC2; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0EC3; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0EC4; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0EC5; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0EC6; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0EC7; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0EC8; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0EC9; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $0ECA; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $0ECB; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $0ECC; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $0ECD; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $0ECE; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $0ECF; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + PSMC3CON : byte absolute $0ED1; + PSMC3CON_PSMC3EN : bit absolute PSMC3CON.7; + PSMC3CON_PSMC3LD : bit absolute PSMC3CON.6; + PSMC3CON_P3DBFE : bit absolute PSMC3CON.5; + PSMC3CON_P3DBRE : bit absolute PSMC3CON.4; + PSMC3CON_P3MODE3 : bit absolute PSMC3CON.3; + PSMC3CON_P3MODE2 : bit absolute PSMC3CON.2; + PSMC3CON_P3MODE1 : bit absolute PSMC3CON.1; + PSMC3CON_P3MODE0 : bit absolute PSMC3CON.0; + PSMC3MDL : byte absolute $0ED2; + PSMC3MDL_P3MDLEN : bit absolute PSMC3MDL.7; + PSMC3MDL_P3MDLPOL : bit absolute PSMC3MDL.6; + PSMC3MDL_P3MDLBIT : bit absolute PSMC3MDL.5; + PSMC3MDL_P3MSRC3 : bit absolute PSMC3MDL.3; + PSMC3MDL_P3MSRC2 : bit absolute PSMC3MDL.2; + PSMC3MDL_P3MSRC1 : bit absolute PSMC3MDL.1; + PSMC3MDL_P3MSRC0 : bit absolute PSMC3MDL.0; + PSMC3SYNC : byte absolute $0ED3; + PSMC3SYNC_P3POFST : bit absolute PSMC3SYNC.7; + PSMC3SYNC_P3PRPOL : bit absolute PSMC3SYNC.6; + PSMC3SYNC_P3DCPOL : bit absolute PSMC3SYNC.5; + PSMC3SYNC_P3SYNC2 : bit absolute PSMC3SYNC.2; + PSMC3SYNC_P3SYNC1 : bit absolute PSMC3SYNC.1; + PSMC3SYNC_P3SYNC0 : bit absolute PSMC3SYNC.0; + PSMC3CLK : byte absolute $0ED4; + PSMC3CLK_P3CPRE1 : bit absolute PSMC3CLK.5; + PSMC3CLK_P3CPRE0 : bit absolute PSMC3CLK.4; + PSMC3CLK_P3CSRC1 : bit absolute PSMC3CLK.1; + PSMC3CLK_P3CSRC0 : bit absolute PSMC3CLK.0; + PSMC3OEN : byte absolute $0ED5; + PSMC3OEN_P3OEB : bit absolute PSMC3OEN.1; + PSMC3OEN_P3OEA : bit absolute PSMC3OEN.0; + PSMC3POL : byte absolute $0ED6; + PSMC3POL_P3INPOL : bit absolute PSMC3POL.6; + PSMC3POL_P3POLB : bit absolute PSMC3POL.1; + PSMC3POL_P3POLA : bit absolute PSMC3POL.0; + PSMC3BLNK : byte absolute $0ED7; + PSMC3BLNK_P3FEBM1 : bit absolute PSMC3BLNK.5; + PSMC3BLNK_P3FEBM0 : bit absolute PSMC3BLNK.4; + PSMC3BLNK_P3REBM1 : bit absolute PSMC3BLNK.1; + PSMC3BLNK_P3REBM0 : bit absolute PSMC3BLNK.0; + PSMC3REBS : byte absolute $0ED8; + PSMC3REBS_P3REBSIN : bit absolute PSMC3REBS.7; + PSMC3REBS_P3REBSC4 : bit absolute PSMC3REBS.4; + PSMC3REBS_P3REBSC3 : bit absolute PSMC3REBS.3; + PSMC3REBS_P3REBSC2 : bit absolute PSMC3REBS.2; + PSMC3REBS_P3REBSC1 : bit absolute PSMC3REBS.1; + PSMC3FEBS : byte absolute $0ED9; + PSMC3FEBS_P3FEBSIN : bit absolute PSMC3FEBS.7; + PSMC3FEBS_P3FEBSC4 : bit absolute PSMC3FEBS.4; + PSMC3FEBS_P3FEBSC3 : bit absolute PSMC3FEBS.3; + PSMC3FEBS_P3FEBSC2 : bit absolute PSMC3FEBS.2; + PSMC3FEBS_P3FEBSC1 : bit absolute PSMC3FEBS.1; + PSMC3PHS : byte absolute $0EDA; + PSMC3PHS_P3PHSIN : bit absolute PSMC3PHS.7; + PSMC3PHS_P3PHSC4 : bit absolute PSMC3PHS.4; + PSMC3PHS_P3PHSC3 : bit absolute PSMC3PHS.3; + PSMC3PHS_P3PHSC2 : bit absolute PSMC3PHS.2; + PSMC3PHS_P3PHSC1 : bit absolute PSMC3PHS.1; + PSMC3PHS_P3PHST : bit absolute PSMC3PHS.0; + PSMC3DCS : byte absolute $0EDB; + PSMC3DCS_P3DCSIN : bit absolute PSMC3DCS.7; + PSMC3DCS_P3DCSC4 : bit absolute PSMC3DCS.4; + PSMC3DCS_P3DCSC3 : bit absolute PSMC3DCS.3; + PSMC3DCS_P3DCSC2 : bit absolute PSMC3DCS.2; + PSMC3DCS_P3DCSC1 : bit absolute PSMC3DCS.1; + PSMC3DCS_P3DCST : bit absolute PSMC3DCS.0; + PSMC3PRS : byte absolute $0EDC; + PSMC3PRS_P3PRSIN : bit absolute PSMC3PRS.7; + PSMC3PRS_P3PRSC4 : bit absolute PSMC3PRS.4; + PSMC3PRS_P3PRSC3 : bit absolute PSMC3PRS.3; + PSMC3PRS_P3PRSC2 : bit absolute PSMC3PRS.2; + PSMC3PRS_P3PRSC1 : bit absolute PSMC3PRS.1; + PSMC3PRS_P3PRST : bit absolute PSMC3PRS.0; + PSMC3ASDC : byte absolute $0EDD; + PSMC3ASDC_P3ASE : bit absolute PSMC3ASDC.7; + PSMC3ASDC_P3ASDEN : bit absolute PSMC3ASDC.6; + PSMC3ASDC_P3ARSEN : bit absolute PSMC3ASDC.5; + PSMC3ASDC_P3ASDOV : bit absolute PSMC3ASDC.0; + PSMC3ASDL : byte absolute $0EDE; + PSMC3ASDL_P3ASDLB : bit absolute PSMC3ASDL.1; + PSMC3ASDL_P3ASDLA : bit absolute PSMC3ASDL.0; + PSMC3ASDS : byte absolute $0EDF; + PSMC3ASDS_P3ASDSIN : bit absolute PSMC3ASDS.7; + PSMC3ASDS_P3ASDSC4 : bit absolute PSMC3ASDS.4; + PSMC3ASDS_P3ASDSC3 : bit absolute PSMC3ASDS.3; + PSMC3ASDS_P3ASDSC2 : bit absolute PSMC3ASDS.2; + PSMC3ASDS_P3ASDSC1 : bit absolute PSMC3ASDS.1; + PSMC3INT : byte absolute $0EE0; + PSMC3INT_P3TOVIE : bit absolute PSMC3INT.7; + PSMC3INT_P3TPHIE : bit absolute PSMC3INT.6; + PSMC3INT_P3TDCIE : bit absolute PSMC3INT.5; + PSMC3INT_P3TPRIE : bit absolute PSMC3INT.4; + PSMC3INT_P3TOVIF : bit absolute PSMC3INT.3; + PSMC3INT_P3TPHIF : bit absolute PSMC3INT.2; + PSMC3INT_P3TDCIF : bit absolute PSMC3INT.1; + PSMC3INT_P3TPRIF : bit absolute PSMC3INT.0; + PSMC3PHL : byte absolute $0EE1; + PSMC3PHL_PSMC3PH7 : bit absolute PSMC3PHL.7; + PSMC3PHL_PSMC3PH6 : bit absolute PSMC3PHL.6; + PSMC3PHL_PSMC3PH5 : bit absolute PSMC3PHL.5; + PSMC3PHL_PSMC3PH4 : bit absolute PSMC3PHL.4; + PSMC3PHL_PSMC3PH3 : bit absolute PSMC3PHL.3; + PSMC3PHL_PSMC3PH2 : bit absolute PSMC3PHL.2; + PSMC3PHL_PSMC3PH1 : bit absolute PSMC3PHL.1; + PSMC3PHL_PSMC3PH0 : bit absolute PSMC3PHL.0; + PSMC3PHH : byte absolute $0EE2; + PSMC3PHH_PSMC3PH15 : bit absolute PSMC3PHH.7; + PSMC3PHH_PSMC3PH14 : bit absolute PSMC3PHH.6; + PSMC3PHH_PSMC3PH13 : bit absolute PSMC3PHH.5; + PSMC3PHH_PSMC3PH12 : bit absolute PSMC3PHH.4; + PSMC3PHH_PSMC3PH11 : bit absolute PSMC3PHH.3; + PSMC3PHH_PSMC3PH10 : bit absolute PSMC3PHH.2; + PSMC3PHH_PSMC3PH9 : bit absolute PSMC3PHH.1; + PSMC3PHH_PSMC3PH8 : bit absolute PSMC3PHH.0; + PSMC3DCL : byte absolute $0EE3; + PSMC3DCL_PSMC3DC7 : bit absolute PSMC3DCL.7; + PSMC3DCL_PSMC3DC6 : bit absolute PSMC3DCL.6; + PSMC3DCL_PSMC3DC5 : bit absolute PSMC3DCL.5; + PSMC3DCL_PSMC3DC4 : bit absolute PSMC3DCL.4; + PSMC3DCL_PSMC3DC3 : bit absolute PSMC3DCL.3; + PSMC3DCL_PSMC3DC2 : bit absolute PSMC3DCL.2; + PSMC3DCL_PSMC3DC1 : bit absolute PSMC3DCL.1; + PSMC3DCL_PSMC3DC0 : bit absolute PSMC3DCL.0; + PSMC3DCH : byte absolute $0EE4; + PSMC3DCH_PSMC3DC15 : bit absolute PSMC3DCH.7; + PSMC3DCH_PSMC3DC14 : bit absolute PSMC3DCH.6; + PSMC3DCH_PSMC3DC13 : bit absolute PSMC3DCH.5; + PSMC3DCH_PSMC3DC12 : bit absolute PSMC3DCH.4; + PSMC3DCH_PSMC3DC11 : bit absolute PSMC3DCH.3; + PSMC3DCH_PSMC3DC10 : bit absolute PSMC3DCH.2; + PSMC3DCH_PSMC3DC9 : bit absolute PSMC3DCH.1; + PSMC3DCH_PSMC3DC8 : bit absolute PSMC3DCH.0; + PSMC3PRL : byte absolute $0EE5; + PSMC3PRL_PSMC3PR7 : bit absolute PSMC3PRL.7; + PSMC3PRL_PSMC3PR6 : bit absolute PSMC3PRL.6; + PSMC3PRL_PSMC3PR5 : bit absolute PSMC3PRL.5; + PSMC3PRL_PSMC3PR4 : bit absolute PSMC3PRL.4; + PSMC3PRL_PSMC3PR3 : bit absolute PSMC3PRL.3; + PSMC3PRL_PSMC3PR2 : bit absolute PSMC3PRL.2; + PSMC3PRL_PSMC3PR1 : bit absolute PSMC3PRL.1; + PSMC3PRL_PSMC3PR0 : bit absolute PSMC3PRL.0; + PSMC3PRH : byte absolute $0EE6; + PSMC3PRH_PSMC3PR15 : bit absolute PSMC3PRH.7; + PSMC3PRH_PSMC3PR14 : bit absolute PSMC3PRH.6; + PSMC3PRH_PSMC3PR13 : bit absolute PSMC3PRH.5; + PSMC3PRH_PSMC3PR12 : bit absolute PSMC3PRH.4; + PSMC3PRH_PSMC3PR11 : bit absolute PSMC3PRH.3; + PSMC3PRH_PSMC3PR10 : bit absolute PSMC3PRH.2; + PSMC3PRH_PSMC3PR9 : bit absolute PSMC3PRH.1; + PSMC3PRH_PSMC3PR8 : bit absolute PSMC3PRH.0; + PSMC3TMRL : byte absolute $0EE7; + PSMC3TMRL_PSMC3TMR7 : bit absolute PSMC3TMRL.7; + PSMC3TMRL_PSMC3TMR6 : bit absolute PSMC3TMRL.6; + PSMC3TMRL_PSMC3TMR5 : bit absolute PSMC3TMRL.5; + PSMC3TMRL_PSMC3TMR4 : bit absolute PSMC3TMRL.4; + PSMC3TMRL_PSMC3TMR3 : bit absolute PSMC3TMRL.3; + PSMC3TMRL_PSMC3TMR2 : bit absolute PSMC3TMRL.2; + PSMC3TMRL_PSMC3TMR1 : bit absolute PSMC3TMRL.1; + PSMC3TMRL_PSMC3TMR0 : bit absolute PSMC3TMRL.0; + PSMC3TMRH : byte absolute $0EE8; + PSMC3TMRH_PSMC3TMR15 : bit absolute PSMC3TMRH.7; + PSMC3TMRH_PSMC3TMR14 : bit absolute PSMC3TMRH.6; + PSMC3TMRH_PSMC3TMR13 : bit absolute PSMC3TMRH.5; + PSMC3TMRH_PSMC3TMR12 : bit absolute PSMC3TMRH.4; + PSMC3TMRH_PSMC3TMR11 : bit absolute PSMC3TMRH.3; + PSMC3TMRH_PSMC3TMR10 : bit absolute PSMC3TMRH.2; + PSMC3TMRH_PSMC3TMR9 : bit absolute PSMC3TMRH.1; + PSMC3TMRH_PSMC3TMR8 : bit absolute PSMC3TMRH.0; + PSMC3DBR : byte absolute $0EE9; + PSMC3DBR_PSMC3DBR7 : bit absolute PSMC3DBR.7; + PSMC3DBR_PSMC3DBR6 : bit absolute PSMC3DBR.6; + PSMC3DBR_PSMC3DBR5 : bit absolute PSMC3DBR.5; + PSMC3DBR_PSMC3DBR4 : bit absolute PSMC3DBR.4; + PSMC3DBR_PSMC3DBR3 : bit absolute PSMC3DBR.3; + PSMC3DBR_PSMC3DBR2 : bit absolute PSMC3DBR.2; + PSMC3DBR_PSMC3DBR1 : bit absolute PSMC3DBR.1; + PSMC3DBR_PSMC3DBR0 : bit absolute PSMC3DBR.0; + PSMC3DBF : byte absolute $0EEA; + PSMC3DBF_PSMC3DBF7 : bit absolute PSMC3DBF.7; + PSMC3DBF_PSMC3DBF6 : bit absolute PSMC3DBF.6; + PSMC3DBF_PSMC3DBF5 : bit absolute PSMC3DBF.5; + PSMC3DBF_PSMC3DBF4 : bit absolute PSMC3DBF.4; + PSMC3DBF_PSMC3DBF3 : bit absolute PSMC3DBF.3; + PSMC3DBF_PSMC3DBF2 : bit absolute PSMC3DBF.2; + PSMC3DBF_PSMC3DBF1 : bit absolute PSMC3DBF.1; + PSMC3DBF_PSMC3DBF0 : bit absolute PSMC3DBF.0; + PSMC3BLKR : byte absolute $0EEB; + PSMC3BLKR_PSMC3BLKR7 : bit absolute PSMC3BLKR.7; + PSMC3BLKR_PSMC3BLKR6 : bit absolute PSMC3BLKR.6; + PSMC3BLKR_PSMC3BLKR5 : bit absolute PSMC3BLKR.5; + PSMC3BLKR_PSMC3BLKR4 : bit absolute PSMC3BLKR.4; + PSMC3BLKR_PSMC3BLKR3 : bit absolute PSMC3BLKR.3; + PSMC3BLKR_PSMC3BLKR2 : bit absolute PSMC3BLKR.2; + PSMC3BLKR_PSMC3BLKR1 : bit absolute PSMC3BLKR.1; + PSMC3BLKR_PSMC3BLKR0 : bit absolute PSMC3BLKR.0; + PSMC3BLKF : byte absolute $0EEC; + PSMC3BLKF_PSMC3BLKF7 : bit absolute PSMC3BLKF.7; + PSMC3BLKF_PSMC3BLKF6 : bit absolute PSMC3BLKF.6; + PSMC3BLKF_PSMC3BLKF5 : bit absolute PSMC3BLKF.5; + PSMC3BLKF_PSMC3BLKF4 : bit absolute PSMC3BLKF.4; + PSMC3BLKF_PSMC3BLKF3 : bit absolute PSMC3BLKF.3; + PSMC3BLKF_PSMC3BLKF2 : bit absolute PSMC3BLKF.2; + PSMC3BLKF_PSMC3BLKF1 : bit absolute PSMC3BLKF.1; + PSMC3BLKF_PSMC3BLKF0 : bit absolute PSMC3BLKF.0; + PSMC3FFA : byte absolute $0EED; + PSMC3FFA_PSMC3FFA3 : bit absolute PSMC3FFA.3; + PSMC3FFA_PSMC3FFA2 : bit absolute PSMC3FFA.2; + PSMC3FFA_PSMC3FFA1 : bit absolute PSMC3FFA.1; + PSMC3FFA_PSMC3FFA0 : bit absolute PSMC3FFA.0; + PSMC3STR0 : byte absolute $0EEE; + PSMC3STR0_P3STRB : bit absolute PSMC3STR0.1; + PSMC3STR0_P3STRA : bit absolute PSMC3STR0.0; + PSMC3STR1 : byte absolute $0EEF; + PSMC3STR1_P3SSYNC : bit absolute PSMC3STR1.7; + PSMC3STR1_P3LSMEN : bit absolute PSMC3STR1.1; + PSMC3STR1_P3HSMEN : bit absolute PSMC3STR1.0; + PSMC4CON : byte absolute $0F11; + PSMC4CON_PSMC4EN : bit absolute PSMC4CON.7; + PSMC4CON_PSMC4LD : bit absolute PSMC4CON.6; + PSMC4CON_P4DBFE : bit absolute PSMC4CON.5; + PSMC4CON_P4DBRE : bit absolute PSMC4CON.4; + PSMC4CON_P4MODE3 : bit absolute PSMC4CON.3; + PSMC4CON_P4MODE2 : bit absolute PSMC4CON.2; + PSMC4CON_P4MODE1 : bit absolute PSMC4CON.1; + PSMC4CON_P4MODE0 : bit absolute PSMC4CON.0; + PSMC4MDL : byte absolute $0F12; + PSMC4MDL_P4MDLEN : bit absolute PSMC4MDL.7; + PSMC4MDL_P4MDLPOL : bit absolute PSMC4MDL.6; + PSMC4MDL_P4MDLBIT : bit absolute PSMC4MDL.5; + PSMC4MDL_P4MSRC3 : bit absolute PSMC4MDL.3; + PSMC4MDL_P4MSRC2 : bit absolute PSMC4MDL.2; + PSMC4MDL_P4MSRC1 : bit absolute PSMC4MDL.1; + PSMC4MDL_P4MSRC0 : bit absolute PSMC4MDL.0; + PSMC4SYNC : byte absolute $0F13; + PSMC4SYNC_P4POFST : bit absolute PSMC4SYNC.7; + PSMC4SYNC_P4PRPOL : bit absolute PSMC4SYNC.6; + PSMC4SYNC_P4DCPOL : bit absolute PSMC4SYNC.5; + PSMC4SYNC_P4SYNC2 : bit absolute PSMC4SYNC.2; + PSMC4SYNC_P4SYNC1 : bit absolute PSMC4SYNC.1; + PSMC4SYNC_P4SYNC0 : bit absolute PSMC4SYNC.0; + PSMC4CLK : byte absolute $0F14; + PSMC4CLK_P4CPRE1 : bit absolute PSMC4CLK.5; + PSMC4CLK_P4CPRE0 : bit absolute PSMC4CLK.4; + PSMC4CLK_P4CSRC1 : bit absolute PSMC4CLK.1; + PSMC4CLK_P4CSRC0 : bit absolute PSMC4CLK.0; + PSMC4OEN : byte absolute $0F15; + PSMC4OEN_P4OEB : bit absolute PSMC4OEN.1; + PSMC4OEN_P4OEA : bit absolute PSMC4OEN.0; + PSMC4POL : byte absolute $0F16; + PSMC4POL_P4INPOL : bit absolute PSMC4POL.6; + PSMC4POL_P4POLB : bit absolute PSMC4POL.1; + PSMC4POL_P4POLA : bit absolute PSMC4POL.0; + PSMC4BLNK : byte absolute $0F17; + PSMC4BLNK_P4FEBM1 : bit absolute PSMC4BLNK.5; + PSMC4BLNK_P4FEBM0 : bit absolute PSMC4BLNK.4; + PSMC4BLNK_P4REBM1 : bit absolute PSMC4BLNK.1; + PSMC4BLNK_P4REBM0 : bit absolute PSMC4BLNK.0; + PSMC4REBS : byte absolute $0F18; + PSMC4REBS_P4REBSIN : bit absolute PSMC4REBS.7; + PSMC4REBS_P4REBSC4 : bit absolute PSMC4REBS.4; + PSMC4REBS_P4REBSC3 : bit absolute PSMC4REBS.3; + PSMC4REBS_P4REBSC2 : bit absolute PSMC4REBS.2; + PSMC4REBS_P4REBSC1 : bit absolute PSMC4REBS.1; + PSMC4FEBS : byte absolute $0F19; + PSMC4FEBS_P4FEBSIN : bit absolute PSMC4FEBS.7; + PSMC4FEBS_P4FEBSC4 : bit absolute PSMC4FEBS.4; + PSMC4FEBS_P4FEBSC3 : bit absolute PSMC4FEBS.3; + PSMC4FEBS_P4FEBSC2 : bit absolute PSMC4FEBS.2; + PSMC4FEBS_P4FEBSC1 : bit absolute PSMC4FEBS.1; + PSMC4PHS : byte absolute $0F1A; + PSMC4PHS_P4PHSIN : bit absolute PSMC4PHS.7; + PSMC4PHS_P4PHSC4 : bit absolute PSMC4PHS.4; + PSMC4PHS_P4PHSC3 : bit absolute PSMC4PHS.3; + PSMC4PHS_P4PHSC2 : bit absolute PSMC4PHS.2; + PSMC4PHS_P4PHSC1 : bit absolute PSMC4PHS.1; + PSMC4PHS_P4PHST : bit absolute PSMC4PHS.0; + PSMC4DCS : byte absolute $0F1B; + PSMC4DCS_P4DCSIN : bit absolute PSMC4DCS.7; + PSMC4DCS_P4DCSC4 : bit absolute PSMC4DCS.4; + PSMC4DCS_P4DCSC3 : bit absolute PSMC4DCS.3; + PSMC4DCS_P4DCSC2 : bit absolute PSMC4DCS.2; + PSMC4DCS_P4DCSC1 : bit absolute PSMC4DCS.1; + PSMC4DCS_P4DCST : bit absolute PSMC4DCS.0; + PSMC4PRS : byte absolute $0F1C; + PSMC4PRS_P4PRSIN : bit absolute PSMC4PRS.7; + PSMC4PRS_P4PRSC4 : bit absolute PSMC4PRS.4; + PSMC4PRS_P4PRSC3 : bit absolute PSMC4PRS.3; + PSMC4PRS_P4PRSC2 : bit absolute PSMC4PRS.2; + PSMC4PRS_P4PRSC1 : bit absolute PSMC4PRS.1; + PSMC4PRS_P4PRST : bit absolute PSMC4PRS.0; + PSMC4ASDC : byte absolute $0F1D; + PSMC4ASDC_P4ASE : bit absolute PSMC4ASDC.7; + PSMC4ASDC_P4ASDEN : bit absolute PSMC4ASDC.6; + PSMC4ASDC_P4ARSEN : bit absolute PSMC4ASDC.5; + PSMC4ASDC_P4ASDOV : bit absolute PSMC4ASDC.0; + PSMC4ASDL : byte absolute $0F1E; + PSMC4ASDL_P4ASDLB : bit absolute PSMC4ASDL.1; + PSMC4ASDL_P4ASDLA : bit absolute PSMC4ASDL.0; + PSMC4ASDS : byte absolute $0F1F; + PSMC4ASDS_P4ASDSIN : bit absolute PSMC4ASDS.7; + PSMC4ASDS_P4ASDSC4 : bit absolute PSMC4ASDS.4; + PSMC4ASDS_P4ASDSC3 : bit absolute PSMC4ASDS.3; + PSMC4ASDS_P4ASDSC2 : bit absolute PSMC4ASDS.2; + PSMC4ASDS_P4ASDSC1 : bit absolute PSMC4ASDS.1; + PSMC4INT : byte absolute $0F20; + PSMC4INT_P4TOVIE : bit absolute PSMC4INT.7; + PSMC4INT_P4TPHIE : bit absolute PSMC4INT.6; + PSMC4INT_P4TDCIE : bit absolute PSMC4INT.5; + PSMC4INT_P4TPRIE : bit absolute PSMC4INT.4; + PSMC4INT_P4TOVIF : bit absolute PSMC4INT.3; + PSMC4INT_P4TPHIF : bit absolute PSMC4INT.2; + PSMC4INT_P4TDCIF : bit absolute PSMC4INT.1; + PSMC4INT_P4TPRIF : bit absolute PSMC4INT.0; + PSMC4PHL : byte absolute $0F21; + PSMC4PHL_PSMC4PH7 : bit absolute PSMC4PHL.7; + PSMC4PHL_PSMC4PH6 : bit absolute PSMC4PHL.6; + PSMC4PHL_PSMC4PH5 : bit absolute PSMC4PHL.5; + PSMC4PHL_PSMC4PH4 : bit absolute PSMC4PHL.4; + PSMC4PHL_PSMC4PH3 : bit absolute PSMC4PHL.3; + PSMC4PHL_PSMC4PH2 : bit absolute PSMC4PHL.2; + PSMC4PHL_PSMC4PH1 : bit absolute PSMC4PHL.1; + PSMC4PHL_PSMC4PH0 : bit absolute PSMC4PHL.0; + PSMC4PHH : byte absolute $0F22; + PSMC4PHH_PSMC4PH15 : bit absolute PSMC4PHH.7; + PSMC4PHH_PSMC4PH14 : bit absolute PSMC4PHH.6; + PSMC4PHH_PSMC4PH13 : bit absolute PSMC4PHH.5; + PSMC4PHH_PSMC4PH12 : bit absolute PSMC4PHH.4; + PSMC4PHH_PSMC4PH11 : bit absolute PSMC4PHH.3; + PSMC4PHH_PSMC4PH10 : bit absolute PSMC4PHH.2; + PSMC4PHH_PSMC4PH9 : bit absolute PSMC4PHH.1; + PSMC4PHH_PSMC4PH8 : bit absolute PSMC4PHH.0; + PSMC4DCL : byte absolute $0F23; + PSMC4DCL_PSMC4DC7 : bit absolute PSMC4DCL.7; + PSMC4DCL_PSMC4DC6 : bit absolute PSMC4DCL.6; + PSMC4DCL_PSMC4DC5 : bit absolute PSMC4DCL.5; + PSMC4DCL_PSMC4DC4 : bit absolute PSMC4DCL.4; + PSMC4DCL_PSMC4DC3 : bit absolute PSMC4DCL.3; + PSMC4DCL_PSMC4DC2 : bit absolute PSMC4DCL.2; + PSMC4DCL_PSMC4DC1 : bit absolute PSMC4DCL.1; + PSMC4DCL_PSMC4DC0 : bit absolute PSMC4DCL.0; + PSMC4DCH : byte absolute $0F24; + PSMC4DCH_PSMC4DC15 : bit absolute PSMC4DCH.7; + PSMC4DCH_PSMC4DC14 : bit absolute PSMC4DCH.6; + PSMC4DCH_PSMC4DC13 : bit absolute PSMC4DCH.5; + PSMC4DCH_PSMC4DC12 : bit absolute PSMC4DCH.4; + PSMC4DCH_PSMC4DC11 : bit absolute PSMC4DCH.3; + PSMC4DCH_PSMC4DC10 : bit absolute PSMC4DCH.2; + PSMC4DCH_PSMC4DC9 : bit absolute PSMC4DCH.1; + PSMC4DCH_PSMC4DC8 : bit absolute PSMC4DCH.0; + PSMC4PRL : byte absolute $0F25; + PSMC4PRL_PSMC4PR7 : bit absolute PSMC4PRL.7; + PSMC4PRL_PSMC4PR6 : bit absolute PSMC4PRL.6; + PSMC4PRL_PSMC4PR5 : bit absolute PSMC4PRL.5; + PSMC4PRL_PSMC4PR4 : bit absolute PSMC4PRL.4; + PSMC4PRL_PSMC4PR3 : bit absolute PSMC4PRL.3; + PSMC4PRL_PSMC4PR2 : bit absolute PSMC4PRL.2; + PSMC4PRL_PSMC4PR1 : bit absolute PSMC4PRL.1; + PSMC4PRL_PSMC4PR0 : bit absolute PSMC4PRL.0; + PSMC4PRH : byte absolute $0F26; + PSMC4PRH_PSMC4PR15 : bit absolute PSMC4PRH.7; + PSMC4PRH_PSMC4PR14 : bit absolute PSMC4PRH.6; + PSMC4PRH_PSMC4PR13 : bit absolute PSMC4PRH.5; + PSMC4PRH_PSMC4PR12 : bit absolute PSMC4PRH.4; + PSMC4PRH_PSMC4PR11 : bit absolute PSMC4PRH.3; + PSMC4PRH_PSMC4PR10 : bit absolute PSMC4PRH.2; + PSMC4PRH_PSMC4PR9 : bit absolute PSMC4PRH.1; + PSMC4PRH_PSMC4PR8 : bit absolute PSMC4PRH.0; + PSMC4TMRL : byte absolute $0F27; + PSMC4TMRL_PSMC4TMR7 : bit absolute PSMC4TMRL.7; + PSMC4TMRL_PSMC4TMR6 : bit absolute PSMC4TMRL.6; + PSMC4TMRL_PSMC4TMR5 : bit absolute PSMC4TMRL.5; + PSMC4TMRL_PSMC4TMR4 : bit absolute PSMC4TMRL.4; + PSMC4TMRL_PSMC4TMR3 : bit absolute PSMC4TMRL.3; + PSMC4TMRL_PSMC4TMR2 : bit absolute PSMC4TMRL.2; + PSMC4TMRL_PSMC4TMR1 : bit absolute PSMC4TMRL.1; + PSMC4TMRL_PSMC4TMR0 : bit absolute PSMC4TMRL.0; + PSMC4TMRH : byte absolute $0F28; + PSMC4TMRH_PSMC4TMR15 : bit absolute PSMC4TMRH.7; + PSMC4TMRH_PSMC4TMR14 : bit absolute PSMC4TMRH.6; + PSMC4TMRH_PSMC4TMR13 : bit absolute PSMC4TMRH.5; + PSMC4TMRH_PSMC4TMR12 : bit absolute PSMC4TMRH.4; + PSMC4TMRH_PSMC4TMR11 : bit absolute PSMC4TMRH.3; + PSMC4TMRH_PSMC4TMR10 : bit absolute PSMC4TMRH.2; + PSMC4TMRH_PSMC4TMR9 : bit absolute PSMC4TMRH.1; + PSMC4TMRH_PSMC4TMR8 : bit absolute PSMC4TMRH.0; + PSMC4DBR : byte absolute $0F29; + PSMC4DBR_PSMC4DBR7 : bit absolute PSMC4DBR.7; + PSMC4DBR_PSMC4DBR6 : bit absolute PSMC4DBR.6; + PSMC4DBR_PSMC4DBR5 : bit absolute PSMC4DBR.5; + PSMC4DBR_PSMC4DBR4 : bit absolute PSMC4DBR.4; + PSMC4DBR_PSMC4DBR3 : bit absolute PSMC4DBR.3; + PSMC4DBR_PSMC4DBR2 : bit absolute PSMC4DBR.2; + PSMC4DBR_PSMC4DBR1 : bit absolute PSMC4DBR.1; + PSMC4DBR_PSMC4DBR0 : bit absolute PSMC4DBR.0; + PSMC4DBF : byte absolute $0F2A; + PSMC4DBF_PSMC4DBF7 : bit absolute PSMC4DBF.7; + PSMC4DBF_PSMC4DBF6 : bit absolute PSMC4DBF.6; + PSMC4DBF_PSMC4DBF5 : bit absolute PSMC4DBF.5; + PSMC4DBF_PSMC4DBF4 : bit absolute PSMC4DBF.4; + PSMC4DBF_PSMC4DBF3 : bit absolute PSMC4DBF.3; + PSMC4DBF_PSMC4DBF2 : bit absolute PSMC4DBF.2; + PSMC4DBF_PSMC4DBF1 : bit absolute PSMC4DBF.1; + PSMC4DBF_PSMC4DBF0 : bit absolute PSMC4DBF.0; + PSMC4BLKR : byte absolute $0F2B; + PSMC4BLKR_PSMC4BLKR7 : bit absolute PSMC4BLKR.7; + PSMC4BLKR_PSMC4BLKR6 : bit absolute PSMC4BLKR.6; + PSMC4BLKR_PSMC4BLKR5 : bit absolute PSMC4BLKR.5; + PSMC4BLKR_PSMC4BLKR4 : bit absolute PSMC4BLKR.4; + PSMC4BLKR_PSMC4BLKR3 : bit absolute PSMC4BLKR.3; + PSMC4BLKR_PSMC4BLKR2 : bit absolute PSMC4BLKR.2; + PSMC4BLKR_PSMC4BLKR1 : bit absolute PSMC4BLKR.1; + PSMC4BLKR_PSMC4BLKR0 : bit absolute PSMC4BLKR.0; + PSMC4BLKF : byte absolute $0F2C; + PSMC4BLKF_PSMC4BLKF7 : bit absolute PSMC4BLKF.7; + PSMC4BLKF_PSMC4BLKF6 : bit absolute PSMC4BLKF.6; + PSMC4BLKF_PSMC4BLKF5 : bit absolute PSMC4BLKF.5; + PSMC4BLKF_PSMC4BLKF4 : bit absolute PSMC4BLKF.4; + PSMC4BLKF_PSMC4BLKF3 : bit absolute PSMC4BLKF.3; + PSMC4BLKF_PSMC4BLKF2 : bit absolute PSMC4BLKF.2; + PSMC4BLKF_PSMC4BLKF1 : bit absolute PSMC4BLKF.1; + PSMC4BLKF_PSMC4BLKF0 : bit absolute PSMC4BLKF.0; + PSMC4FFA : byte absolute $0F2D; + PSMC4FFA_PSMC4FFA3 : bit absolute PSMC4FFA.3; + PSMC4FFA_PSMC4FFA2 : bit absolute PSMC4FFA.2; + PSMC4FFA_PSMC4FFA1 : bit absolute PSMC4FFA.1; + PSMC4FFA_PSMC4FFA0 : bit absolute PSMC4FFA.0; + PSMC4STR0 : byte absolute $0F2E; + PSMC4STR0_P4STRB : bit absolute PSMC4STR0.1; + PSMC4STR0_P4STRA : bit absolute PSMC4STR0.0; + PSMC4STR1 : byte absolute $0F2F; + PSMC4STR1_P4SSYNC : bit absolute PSMC4STR1.7; + PSMC4STR1_P4LSMEN : bit absolute PSMC4STR1.1; + PSMC4STR1_P4HSMEN : bit absolute PSMC4STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01C:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-09F:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11F:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, CM4CON0, CM4CON1, APFCON2, APFCON1, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-197:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-293:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '390-399:SFR'} // Bank 7 : INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '591-596:SFR'} // Bank 11 : DAC2CON0, DAC2REF, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E91-EAF:SFR'} // Bank 29 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM 'EB1-ECF:SFR'} // Bank 29 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM 'ED1-EEF:SFR'} // Bank 29 : PSMC3CON, PSMC3MDL, PSMC3SYNC, PSMC3CLK, PSMC3OEN, PSMC3POL, PSMC3BLNK, PSMC3REBS, PSMC3FEBS, PSMC3PHS, PSMC3DCS, PSMC3PRS, PSMC3ASDC, PSMC3ASDL, PSMC3ASDS, PSMC3INT, PSMC3PHL, PSMC3PHH, PSMC3DCL, PSMC3DCH, PSMC3PRL, PSMC3PRH, PSMC3TMRL, PSMC3TMRH, PSMC3DBR, PSMC3DBF, PSMC3BLKR, PSMC3BLKF, PSMC3FFA, PSMC3STR0, PSMC3STR1 + {$SET_STATE_RAM 'F11-F2F:SFR'} // Bank 30 : PSMC4CON, PSMC4MDL, PSMC4SYNC, PSMC4CLK, PSMC4OEN, PSMC4POL, PSMC4BLNK, PSMC4REBS, PSMC4FEBS, PSMC4PHS, PSMC4DCS, PSMC4PRS, PSMC4ASDC, PSMC4ASDL, PSMC4ASDS, PSMC4INT, PSMC4PHL, PSMC4PHH, PSMC4DCL, PSMC4DCH, PSMC4PRL, PSMC4PRH, PSMC4TMRL, PSMC4TMRH, PSMC4DBR, PSMC4DBF, PSMC4BLKR, PSMC4BLKF, PSMC4FFA, PSMC4STR0, PSMC4STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:07'} // APFCON2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:7F'} // ANSELB bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C7'} // OPA1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C7'} // OPA2CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:BC'} // DAC2CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:BC'} // DAC3CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:BC'} // DAC4CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:E7'} // PSMC1SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:9E'} // PSMC1REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:9E'} // PSMC1FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:9F'} // PSMC1PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:9F'} // PSMC1DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:9F'} // PSMC1PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:9E'} // PSMC1ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:E7'} // PSMC2SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB4:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB5:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB6:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB7:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:9E'} // PSMC2REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:9E'} // PSMC2FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:9F'} // PSMC2PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:9F'} // PSMC2DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:9F'} // PSMC2PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBF:9E'} // PSMC2ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECD:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECE:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECF:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED2:EF'} // PSMC3MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED3:E7'} // PSMC3SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED4:33'} // PSMC3CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED5:03'} // PSMC3OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED6:43'} // PSMC3POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED7:33'} // PSMC3BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED8:9E'} // PSMC3REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED9:9E'} // PSMC3FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDA:9F'} // PSMC3PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDB:9F'} // PSMC3DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDC:9F'} // PSMC3PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDD:E1'} // PSMC3ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDE:03'} // PSMC3ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDF:9E'} // PSMC3ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EED:0F'} // PSMC3FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EEE:03'} // PSMC3STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EEF:83'} // PSMC3STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:EF'} // PSMC4MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:E7'} // PSMC4SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:33'} // PSMC4CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:03'} // PSMC4OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:43'} // PSMC4POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:33'} // PSMC4BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:9E'} // PSMC4REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:9E'} // PSMC4FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:9F'} // PSMC4PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:9F'} // PSMC4DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:9F'} // PSMC4PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:E1'} // PSMC4ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:03'} // PSMC4ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:9E'} // PSMC4ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2D:0F'} // PSMC4FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:03'} // PSMC4STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:83'} // PSMC4STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/SS + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+n/DAC2Vref+/DAC3Vref+/DAC4Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI/DAC4OUT1 + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS/DA2COUT1 + // Pin 8 : Vss + // Pin 9 : RA7/Vref+/PSMC1CLK/PSMC2CLK/PSMC3CLK/PSMC4CLK/OSC1/CLKIN + // Pin 10 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 11 : RC0/SOSCO/T1CKI/PSMC1A + // Pin 12 : RC1/SOSCI/CCP2/PSMC1B + // Pin 13 : RC2/CCP1/PSMC3B/PSMC1C + // Pin 14 : RC3/SCK/SCL/PSMC4A/PSMC1D + // Pin 15 : RC4/SDI/SDA/PSMC4B/PSMC1E + // Pin 16 : RC5/SDO/PSMC3A/PSMC1F + // Pin 17 : RC6/CCP3/TX/CK/PSMC2A + // Pin 18 : RC7/C4OUT/RX/DT/PSMC2B + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/C2IN1+/INT/CCP1/PSMC1IN/PSMC2IN/PSMC3IN/PSMC4IN + // Pin 22 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/OPA2OUT + // Pin 23 : RB2/AN8/OPA2IN-/CLKR/DAC3OUT1 + // Pin 24 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 25 : RB4/AN11/C3IN1+/SS + // Pin 26 : RB5/AN13/CCP3/C3OUT/T1G/SDO/C4IN2- + // Pin 27 : RB6/SDI/TX/CK/SDA/C4IN1+/ICSPCLK/ICDCLK + // Pin 28 : RB7/SCK/RX/DT/SCL/DAC4OUT2/DAC3OUT2/DAC2OUT2/DAC1OUT2/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1789.pas b/devices17/PIC16F1789.pas new file mode 100644 index 00000000..83ff81d6 --- /dev/null +++ b/devices17/PIC16F1789.pas @@ -0,0 +1,2194 @@ +unit PIC16F1789; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1789'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_C4IF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR4 : byte absolute $0014; + PIR4_PSMC4TIF : bit absolute PIR4.7; + PIR4_PSMC3TIF : bit absolute PIR4.6; + PIR4_PSMC2TIF : bit absolute PIR4.5; + PIR4_PSMC1TIF : bit absolute PIR4.4; + PIR4_PSMC4SIF : bit absolute PIR4.3; + PIR4_PSMC3SIF : bit absolute PIR4.2; + PIR4_PSMC2SIF : bit absolute PIR4.1; + PIR4_PSMC1SIF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_C4IE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE4 : byte absolute $0094; + PIE4_PSMC4TIE : bit absolute PIE4.7; + PIE4_PSMC3TIE : bit absolute PIE4.6; + PIE4_PSMC2TIE : bit absolute PIE4.5; + PIE4_PSMC1TIE : bit absolute PIE4.4; + PIE4_PSMC4SIE : bit absolute PIE4.3; + PIE4_PSMC3SIE : bit absolute PIE4.2; + PIE4_PSMC2SIE : bit absolute PIE4.1; + PIE4_PSMC1SIE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRWDT : bit absolute PCON.4; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_ADRMD : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADCON2 : byte absolute $009F; + ADCON2_TRIGSEL3 : bit absolute ADCON2.7; + ADCON2_TRIGSEL2 : bit absolute ADCON2.6; + ADCON2_TRIGSEL1 : bit absolute ADCON2.5; + ADCON2_TRIGSEL0 : bit absolute ADCON2.4; + ADCON2_CHSN3 : bit absolute ADCON2.3; + ADCON2_CHSN2 : bit absolute ADCON2.2; + ADCON2_CHSN1 : bit absolute ADCON2.1; + ADCON2_CHSN0 : bit absolute ADCON2.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1ZLF : bit absolute CM1CON0.3; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2ZLF : bit absolute CM2CON0.3; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC4OUT : bit absolute CMOUT.3; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORFS : bit absolute BORCON.6; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $0118; + DAC1CON0_DAC1EN : bit absolute DAC1CON0.7; + DAC1CON0_DAC1OE1 : bit absolute DAC1CON0.5; + DAC1CON0_DAC1OE2 : bit absolute DAC1CON0.4; + DAC1CON0_DAC1PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_DAC1PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_DAC1NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $0119; + CM4CON0 : byte absolute $011A; + CM4CON0_C4ON : bit absolute CM4CON0.7; + CM4CON0_C4OUT : bit absolute CM4CON0.6; + CM4CON0_C4OE : bit absolute CM4CON0.5; + CM4CON0_C4POL : bit absolute CM4CON0.4; + CM4CON0_C4ZLF : bit absolute CM4CON0.3; + CM4CON0_C4SP : bit absolute CM4CON0.2; + CM4CON0_C4HYS : bit absolute CM4CON0.1; + CM4CON0_C4SYNC : bit absolute CM4CON0.0; + CM4CON1 : byte absolute $011B; + CM4CON1_C4INTP : bit absolute CM4CON1.7; + CM4CON1_C4INTN : bit absolute CM4CON1.6; + CM4CON1_C4PCH2 : bit absolute CM4CON1.5; + CM4CON1_C4PCH1 : bit absolute CM4CON1.4; + CM4CON1_C4PCH0 : bit absolute CM4CON1.3; + CM4CON1_C4NCH2 : bit absolute CM4CON1.2; + CM4CON1_C4NCH1 : bit absolute CM4CON1.1; + CM4CON1_C4NCH0 : bit absolute CM4CON1.0; + APFCON2 : byte absolute $011C; + APFCON2_SSSEL1 : bit absolute APFCON2.2; + APFCON2_SSSEL0 : bit absolute APFCON2.1; + APFCON2_CCP3SEL : bit absolute APFCON2.0; + APFCON1 : byte absolute $011D; + APFCON1_C2OUTSEL : bit absolute APFCON1.7; + APFCON1_CCP1SEL : bit absolute APFCON1.6; + APFCON1_SDOSEL : bit absolute APFCON1.5; + APFCON1_SCKSEL : bit absolute APFCON1.4; + APFCON1_SDISEL : bit absolute APFCON1.3; + APFCON1_TXSEL : bit absolute APFCON1.2; + APFCON1_RXSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3ZLF : bit absolute CM3CON0.3; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH2 : bit absolute CM3CON1.5; + CM3CON1_C3PCH1 : bit absolute CM3CON1.4; + CM3CON1_C3PCH0 : bit absolute CM3CON1.3; + CM3CON1_C3NCH2 : bit absolute CM3CON1.2; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + WPUD : byte absolute $020F; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCONA7 : bit absolute ODCONA.7; + ODCONA_ODCONA6 : bit absolute ODCONA.6; + ODCONA_ODCONA5 : bit absolute ODCONA.5; + ODCONA_ODCONA4 : bit absolute ODCONA.4; + ODCONA_ODCONA3 : bit absolute ODCONA.3; + ODCONA_ODCONA2 : bit absolute ODCONA.2; + ODCONA_ODCONA1 : bit absolute ODCONA.1; + ODCONA_ODCONA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCONB7 : bit absolute ODCONB.7; + ODCONB_ODCONB6 : bit absolute ODCONB.6; + ODCONB_ODCONB5 : bit absolute ODCONB.5; + ODCONB_ODCONB4 : bit absolute ODCONB.4; + ODCONB_ODCONB3 : bit absolute ODCONB.3; + ODCONB_ODCONB2 : bit absolute ODCONB.2; + ODCONB_ODCONB1 : bit absolute ODCONB.1; + ODCONB_ODCONB0 : bit absolute ODCONB.0; + ODCONC : byte absolute $028E; + ODCONC_ODCONC7 : bit absolute ODCONC.7; + ODCONC_ODCONC6 : bit absolute ODCONC.6; + ODCONC_ODCONC5 : bit absolute ODCONC.5; + ODCONC_ODCONC4 : bit absolute ODCONC.4; + ODCONC_ODCONC3 : bit absolute ODCONC.3; + ODCONC_ODCONC2 : bit absolute ODCONC.2; + ODCONC_ODCONC1 : bit absolute ODCONC.1; + ODCONC_ODCONC0 : bit absolute ODCONC.0; + ODCOND : byte absolute $028F; + ODCOND_ODCOND7 : bit absolute ODCOND.7; + ODCOND_ODCOND6 : bit absolute ODCOND.6; + ODCOND_ODCOND5 : bit absolute ODCOND.5; + ODCOND_ODCOND4 : bit absolute ODCOND.4; + ODCOND_ODCOND3 : bit absolute ODCOND.3; + ODCOND_ODCOND2 : bit absolute ODCOND.2; + ODCOND_ODCOND1 : bit absolute ODCOND.1; + ODCOND_ODCOND0 : bit absolute ODCOND.0; + ODCONE : byte absolute $0290; + ODCONE_ODCONE2 : bit absolute ODCONE.2; + ODCONE_ODCONE1 : bit absolute ODCONE.1; + ODCONE_ODCONE0 : bit absolute ODCONE.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRCONA7 : bit absolute SLRCONA.7; + SLRCONA_SLRCONA6 : bit absolute SLRCONA.6; + SLRCONA_SLRCONA5 : bit absolute SLRCONA.5; + SLRCONA_SLRCONA4 : bit absolute SLRCONA.4; + SLRCONA_SLRCONA3 : bit absolute SLRCONA.3; + SLRCONA_SLRCONA2 : bit absolute SLRCONA.2; + SLRCONA_SLRCONA1 : bit absolute SLRCONA.1; + SLRCONA_SLRCONA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRCONB7 : bit absolute SLRCONB.7; + SLRCONB_SLRCONB6 : bit absolute SLRCONB.6; + SLRCONB_SLRCONB5 : bit absolute SLRCONB.5; + SLRCONB_SLRCONB4 : bit absolute SLRCONB.4; + SLRCONB_SLRCONB3 : bit absolute SLRCONB.3; + SLRCONB_SLRCONB2 : bit absolute SLRCONB.2; + SLRCONB_SLRCONB1 : bit absolute SLRCONB.1; + SLRCONB_SLRCONB0 : bit absolute SLRCONB.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRCONC7 : bit absolute SLRCONC.7; + SLRCONC_SLRCONC6 : bit absolute SLRCONC.6; + SLRCONC_SLRCONC5 : bit absolute SLRCONC.5; + SLRCONC_SLRCONC4 : bit absolute SLRCONC.4; + SLRCONC_SLRCONC3 : bit absolute SLRCONC.3; + SLRCONC_SLRCONC2 : bit absolute SLRCONC.2; + SLRCONC_SLRCONC1 : bit absolute SLRCONC.1; + SLRCONC_SLRCONC0 : bit absolute SLRCONC.0; + SLRCOND : byte absolute $030F; + SLRCOND_SLRCOND7 : bit absolute SLRCOND.7; + SLRCOND_SLRCOND6 : bit absolute SLRCOND.6; + SLRCOND_SLRCOND5 : bit absolute SLRCOND.5; + SLRCOND_SLRCOND4 : bit absolute SLRCOND.4; + SLRCOND_SLRCOND3 : bit absolute SLRCOND.3; + SLRCOND_SLRCOND2 : bit absolute SLRCOND.2; + SLRCOND_SLRCOND1 : bit absolute SLRCOND.1; + SLRCOND_SLRCOND0 : bit absolute SLRCOND.0; + SLRCONE : byte absolute $0310; + SLRCONE_SLRCONE2 : bit absolute SLRCONE.2; + SLRCONE_SLRCONE1 : bit absolute SLRCONE.1; + SLRCONE_SLRCONE0 : bit absolute SLRCONE.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + INLVLD : byte absolute $038F; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + INLVLE : byte absolute $0390; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + IOCEP : byte absolute $039D; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $039E; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $039F; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + OPA1CON : byte absolute $0511; + OPA1CON_OPA1PCH2 : bit absolute OPA1CON.2; + OPA1CON_OPA1PCH1 : bit absolute OPA1CON.1; + OPA1CON_OPA1PCH0 : bit absolute OPA1CON.0; + OPA2CON : byte absolute $0513; + OPA2CON_OPA2PCH2 : bit absolute OPA2CON.2; + OPA2CON_OPA2PCH1 : bit absolute OPA2CON.1; + OPA2CON_OPA2PCH0 : bit absolute OPA2CON.0; + OPA3CON : byte absolute $0515; + OPA3CON_OPA3PCH2 : bit absolute OPA3CON.2; + OPA3CON_OPA3PCH1 : bit absolute OPA3CON.1; + OPA3CON_OPA3PCH0 : bit absolute OPA3CON.0; + CLKRCON : byte absolute $051A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + DAC2CON0 : byte absolute $0591; + DAC2CON0_DAC2EN : bit absolute DAC2CON0.7; + DAC2CON0_DAC2OE1 : bit absolute DAC2CON0.5; + DAC2CON0_DAC2OE2 : bit absolute DAC2CON0.4; + DAC2CON0_DAC2PSS1 : bit absolute DAC2CON0.3; + DAC2CON0_DAC2PSS0 : bit absolute DAC2CON0.2; + DAC2REF : byte absolute $0592; + DAC2REF_DAC2R4 : bit absolute DAC2REF.4; + DAC2REF_DAC2R3 : bit absolute DAC2REF.3; + DAC2REF_DAC2R2 : bit absolute DAC2REF.2; + DAC2REF_DAC2R1 : bit absolute DAC2REF.1; + DAC2REF_DAC2R0 : bit absolute DAC2REF.0; + DAC3CON0 : byte absolute $0593; + DAC3CON0_DAC3EN : bit absolute DAC3CON0.7; + DAC3CON0_DAC3OE1 : bit absolute DAC3CON0.5; + DAC3CON0_DAC3OE2 : bit absolute DAC3CON0.4; + DAC3CON0_DAC3PSS1 : bit absolute DAC3CON0.3; + DAC3CON0_DAC3PSS0 : bit absolute DAC3CON0.2; + DAC3REF : byte absolute $0594; + DAC3REF_DAC3R4 : bit absolute DAC3REF.4; + DAC3REF_DAC3R3 : bit absolute DAC3REF.3; + DAC3REF_DAC3R2 : bit absolute DAC3REF.2; + DAC3REF_DAC3R1 : bit absolute DAC3REF.1; + DAC3REF_DAC3R0 : bit absolute DAC3REF.0; + DAC4CON0 : byte absolute $0595; + DAC4CON0_DAC4EN : bit absolute DAC4CON0.7; + DAC4CON0_DAC4OE1 : bit absolute DAC4CON0.5; + DAC4CON0_DAC4OE2 : bit absolute DAC4CON0.4; + DAC4CON0_DAC4PSS1 : bit absolute DAC4CON0.3; + DAC4CON0_DAC4PSS0 : bit absolute DAC4CON0.2; + DAC4REF : byte absolute $0596; + DAC4REF_DAC4R4 : bit absolute DAC4REF.4; + DAC4REF_DAC4R3 : bit absolute DAC4REF.3; + DAC4REF_DAC4R2 : bit absolute DAC4REF.2; + DAC4REF_DAC4R1 : bit absolute DAC4REF.1; + DAC4REF_DAC4R0 : bit absolute DAC4REF.0; + PSMC1CON : byte absolute $0E91; + PSMC1CON_PSMC1EN : bit absolute PSMC1CON.7; + PSMC1CON_PSMC1LD : bit absolute PSMC1CON.6; + PSMC1CON_P1DBFE : bit absolute PSMC1CON.5; + PSMC1CON_P1DBRE : bit absolute PSMC1CON.4; + PSMC1CON_P1MODE3 : bit absolute PSMC1CON.3; + PSMC1CON_P1MODE2 : bit absolute PSMC1CON.2; + PSMC1CON_P1MODE1 : bit absolute PSMC1CON.1; + PSMC1CON_P1MODE0 : bit absolute PSMC1CON.0; + PSMC1MDL : byte absolute $0E92; + PSMC1MDL_P1MDLEN : bit absolute PSMC1MDL.7; + PSMC1MDL_P1MDLPOL : bit absolute PSMC1MDL.6; + PSMC1MDL_P1MDLBIT : bit absolute PSMC1MDL.5; + PSMC1MDL_P1MSRC3 : bit absolute PSMC1MDL.3; + PSMC1MDL_P1MSRC2 : bit absolute PSMC1MDL.2; + PSMC1MDL_P1MSRC1 : bit absolute PSMC1MDL.1; + PSMC1MDL_P1MSRC0 : bit absolute PSMC1MDL.0; + PSMC1SYNC : byte absolute $0E93; + PSMC1SYNC_P1POFST : bit absolute PSMC1SYNC.7; + PSMC1SYNC_P1PRPOL : bit absolute PSMC1SYNC.6; + PSMC1SYNC_P1DCPOL : bit absolute PSMC1SYNC.5; + PSMC1SYNC_P1SYNC2 : bit absolute PSMC1SYNC.2; + PSMC1SYNC_P1SYNC1 : bit absolute PSMC1SYNC.1; + PSMC1SYNC_P1SYNC0 : bit absolute PSMC1SYNC.0; + PSMC1CLK : byte absolute $0E94; + PSMC1CLK_P1CPRE1 : bit absolute PSMC1CLK.5; + PSMC1CLK_P1CPRE0 : bit absolute PSMC1CLK.4; + PSMC1CLK_P1CSRC1 : bit absolute PSMC1CLK.1; + PSMC1CLK_P1CSRC0 : bit absolute PSMC1CLK.0; + PSMC1OEN : byte absolute $0E95; + PSMC1OEN_P1OEF : bit absolute PSMC1OEN.5; + PSMC1OEN_P1OEE : bit absolute PSMC1OEN.4; + PSMC1OEN_P1OED : bit absolute PSMC1OEN.3; + PSMC1OEN_P1OEC : bit absolute PSMC1OEN.2; + PSMC1OEN_P1OEB : bit absolute PSMC1OEN.1; + PSMC1OEN_P1OEA : bit absolute PSMC1OEN.0; + PSMC1POL : byte absolute $0E96; + PSMC1POL_P1INPOL : bit absolute PSMC1POL.6; + PSMC1POL_P1POLF : bit absolute PSMC1POL.5; + PSMC1POL_P1POLE : bit absolute PSMC1POL.4; + PSMC1POL_P1POLD : bit absolute PSMC1POL.3; + PSMC1POL_P1POLC : bit absolute PSMC1POL.2; + PSMC1POL_P1POLB : bit absolute PSMC1POL.1; + PSMC1POL_P1POLA : bit absolute PSMC1POL.0; + PSMC1BLNK : byte absolute $0E97; + PSMC1BLNK_P1FEBM1 : bit absolute PSMC1BLNK.5; + PSMC1BLNK_P1FEBM0 : bit absolute PSMC1BLNK.4; + PSMC1BLNK_P1REBM1 : bit absolute PSMC1BLNK.1; + PSMC1BLNK_P1REBM0 : bit absolute PSMC1BLNK.0; + PSMC1REBS : byte absolute $0E98; + PSMC1REBS_P1REBSIN : bit absolute PSMC1REBS.7; + PSMC1REBS_P1REBSC4 : bit absolute PSMC1REBS.4; + PSMC1REBS_P1REBSC3 : bit absolute PSMC1REBS.3; + PSMC1REBS_P1REBSC2 : bit absolute PSMC1REBS.2; + PSMC1REBS_P1REBSC1 : bit absolute PSMC1REBS.1; + PSMC1FEBS : byte absolute $0E99; + PSMC1FEBS_P1FEBSIN : bit absolute PSMC1FEBS.7; + PSMC1FEBS_P1FEBSC4 : bit absolute PSMC1FEBS.4; + PSMC1FEBS_P1FEBSC3 : bit absolute PSMC1FEBS.3; + PSMC1FEBS_P1FEBSC2 : bit absolute PSMC1FEBS.2; + PSMC1FEBS_P1FEBSC1 : bit absolute PSMC1FEBS.1; + PSMC1PHS : byte absolute $0E9A; + PSMC1PHS_P1PHSIN : bit absolute PSMC1PHS.7; + PSMC1PHS_P1PHSC4 : bit absolute PSMC1PHS.4; + PSMC1PHS_P1PHSC3 : bit absolute PSMC1PHS.3; + PSMC1PHS_P1PHSC2 : bit absolute PSMC1PHS.2; + PSMC1PHS_P1PHSC1 : bit absolute PSMC1PHS.1; + PSMC1PHS_P1PHST : bit absolute PSMC1PHS.0; + PSMC1DCS : byte absolute $0E9B; + PSMC1DCS_P1DCSIN : bit absolute PSMC1DCS.7; + PSMC1DCS_P1DCSC4 : bit absolute PSMC1DCS.4; + PSMC1DCS_P1DCSC3 : bit absolute PSMC1DCS.3; + PSMC1DCS_P1DCSC2 : bit absolute PSMC1DCS.2; + PSMC1DCS_P1DCSC1 : bit absolute PSMC1DCS.1; + PSMC1DCS_P1DCST : bit absolute PSMC1DCS.0; + PSMC1PRS : byte absolute $0E9C; + PSMC1PRS_P1PRSIN : bit absolute PSMC1PRS.7; + PSMC1PRS_P1PRSC4 : bit absolute PSMC1PRS.4; + PSMC1PRS_P1PRSC3 : bit absolute PSMC1PRS.3; + PSMC1PRS_P1PRSC2 : bit absolute PSMC1PRS.2; + PSMC1PRS_P1PRSC1 : bit absolute PSMC1PRS.1; + PSMC1PRS_P1PRST : bit absolute PSMC1PRS.0; + PSMC1ASDC : byte absolute $0E9D; + PSMC1ASDC_P1ASE : bit absolute PSMC1ASDC.7; + PSMC1ASDC_P1ASDEN : bit absolute PSMC1ASDC.6; + PSMC1ASDC_P1ARSEN : bit absolute PSMC1ASDC.5; + PSMC1ASDC_P1ASDOV : bit absolute PSMC1ASDC.0; + PSMC1ASDL : byte absolute $0E9E; + PSMC1ASDL_P1ASDLF : bit absolute PSMC1ASDL.5; + PSMC1ASDL_P1ASDLE : bit absolute PSMC1ASDL.4; + PSMC1ASDL_P1ASDLD : bit absolute PSMC1ASDL.3; + PSMC1ASDL_P1ASDLC : bit absolute PSMC1ASDL.2; + PSMC1ASDL_P1ASDLB : bit absolute PSMC1ASDL.1; + PSMC1ASDL_P1ASDLA : bit absolute PSMC1ASDL.0; + PSMC1ASDS : byte absolute $0E9F; + PSMC1ASDS_P1ASDSIN : bit absolute PSMC1ASDS.7; + PSMC1ASDS_P1ASDSC4 : bit absolute PSMC1ASDS.4; + PSMC1ASDS_P1ASDSC3 : bit absolute PSMC1ASDS.3; + PSMC1ASDS_P1ASDSC2 : bit absolute PSMC1ASDS.2; + PSMC1ASDS_P1ASDSC1 : bit absolute PSMC1ASDS.1; + PSMC1INT : byte absolute $0EA0; + PSMC1INT_P1TOVIE : bit absolute PSMC1INT.7; + PSMC1INT_P1TPHIE : bit absolute PSMC1INT.6; + PSMC1INT_P1TDCIE : bit absolute PSMC1INT.5; + PSMC1INT_P1TPRIE : bit absolute PSMC1INT.4; + PSMC1INT_P1TOVIF : bit absolute PSMC1INT.3; + PSMC1INT_P1TPHIF : bit absolute PSMC1INT.2; + PSMC1INT_P1TDCIF : bit absolute PSMC1INT.1; + PSMC1INT_P1TPRIF : bit absolute PSMC1INT.0; + PSMC1PHL : byte absolute $0EA1; + PSMC1PHL_PSMC1PH7 : bit absolute PSMC1PHL.7; + PSMC1PHL_PSMC1PH6 : bit absolute PSMC1PHL.6; + PSMC1PHL_PSMC1PH5 : bit absolute PSMC1PHL.5; + PSMC1PHL_PSMC1PH4 : bit absolute PSMC1PHL.4; + PSMC1PHL_PSMC1PH3 : bit absolute PSMC1PHL.3; + PSMC1PHL_PSMC1PH2 : bit absolute PSMC1PHL.2; + PSMC1PHL_PSMC1PH1 : bit absolute PSMC1PHL.1; + PSMC1PHL_PSMC1PH0 : bit absolute PSMC1PHL.0; + PSMC1PHH : byte absolute $0EA2; + PSMC1PHH_PSMC1PH15 : bit absolute PSMC1PHH.7; + PSMC1PHH_PSMC1PH14 : bit absolute PSMC1PHH.6; + PSMC1PHH_PSMC1PH13 : bit absolute PSMC1PHH.5; + PSMC1PHH_PSMC1PH12 : bit absolute PSMC1PHH.4; + PSMC1PHH_PSMC1PH11 : bit absolute PSMC1PHH.3; + PSMC1PHH_PSMC1PH10 : bit absolute PSMC1PHH.2; + PSMC1PHH_PSMC1PH9 : bit absolute PSMC1PHH.1; + PSMC1PHH_PSMC1PH8 : bit absolute PSMC1PHH.0; + PSMC1DCL : byte absolute $0EA3; + PSMC1DCL_PSMC1DC7 : bit absolute PSMC1DCL.7; + PSMC1DCL_PSMC1DC6 : bit absolute PSMC1DCL.6; + PSMC1DCL_PSMC1DC5 : bit absolute PSMC1DCL.5; + PSMC1DCL_PSMC1DC4 : bit absolute PSMC1DCL.4; + PSMC1DCL_PSMC1DC3 : bit absolute PSMC1DCL.3; + PSMC1DCL_PSMC1DC2 : bit absolute PSMC1DCL.2; + PSMC1DCL_PSMC1DC1 : bit absolute PSMC1DCL.1; + PSMC1DCL_PSMC1DC0 : bit absolute PSMC1DCL.0; + PSMC1DCH : byte absolute $0EA4; + PSMC1DCH_PSMC1DC15 : bit absolute PSMC1DCH.7; + PSMC1DCH_PSMC1DC14 : bit absolute PSMC1DCH.6; + PSMC1DCH_PSMC1DC13 : bit absolute PSMC1DCH.5; + PSMC1DCH_PSMC1DC12 : bit absolute PSMC1DCH.4; + PSMC1DCH_PSMC1DC11 : bit absolute PSMC1DCH.3; + PSMC1DCH_PSMC1DC10 : bit absolute PSMC1DCH.2; + PSMC1DCH_PSMC1DC9 : bit absolute PSMC1DCH.1; + PSMC1DCH_PSMC1DC8 : bit absolute PSMC1DCH.0; + PSMC1PRL : byte absolute $0EA5; + PSMC1PRL_PSMC1PR7 : bit absolute PSMC1PRL.7; + PSMC1PRL_PSMC1PR6 : bit absolute PSMC1PRL.6; + PSMC1PRL_PSMC1PR5 : bit absolute PSMC1PRL.5; + PSMC1PRL_PSMC1PR4 : bit absolute PSMC1PRL.4; + PSMC1PRL_PSMC1PR3 : bit absolute PSMC1PRL.3; + PSMC1PRL_PSMC1PR2 : bit absolute PSMC1PRL.2; + PSMC1PRL_PSMC1PR1 : bit absolute PSMC1PRL.1; + PSMC1PRL_PSMC1PR0 : bit absolute PSMC1PRL.0; + PSMC1PRH : byte absolute $0EA6; + PSMC1PRH_PSMC1PR15 : bit absolute PSMC1PRH.7; + PSMC1PRH_PSMC1PR14 : bit absolute PSMC1PRH.6; + PSMC1PRH_PSMC1PR13 : bit absolute PSMC1PRH.5; + PSMC1PRH_PSMC1PR12 : bit absolute PSMC1PRH.4; + PSMC1PRH_PSMC1PR11 : bit absolute PSMC1PRH.3; + PSMC1PRH_PSMC1PR10 : bit absolute PSMC1PRH.2; + PSMC1PRH_PSMC1PR9 : bit absolute PSMC1PRH.1; + PSMC1PRH_PSMC1PR8 : bit absolute PSMC1PRH.0; + PSMC1TMRL : byte absolute $0EA7; + PSMC1TMRL_PSMC1TMR7 : bit absolute PSMC1TMRL.7; + PSMC1TMRL_PSMC1TMR6 : bit absolute PSMC1TMRL.6; + PSMC1TMRL_PSMC1TMR5 : bit absolute PSMC1TMRL.5; + PSMC1TMRL_PSMC1TMR4 : bit absolute PSMC1TMRL.4; + PSMC1TMRL_PSMC1TMR3 : bit absolute PSMC1TMRL.3; + PSMC1TMRL_PSMC1TMR2 : bit absolute PSMC1TMRL.2; + PSMC1TMRL_PSMC1TMR1 : bit absolute PSMC1TMRL.1; + PSMC1TMRL_PSMC1TMR0 : bit absolute PSMC1TMRL.0; + PSMC1TMRH : byte absolute $0EA8; + PSMC1TMRH_PSMC1TMR15 : bit absolute PSMC1TMRH.7; + PSMC1TMRH_PSMC1TMR14 : bit absolute PSMC1TMRH.6; + PSMC1TMRH_PSMC1TMR13 : bit absolute PSMC1TMRH.5; + PSMC1TMRH_PSMC1TMR12 : bit absolute PSMC1TMRH.4; + PSMC1TMRH_PSMC1TMR11 : bit absolute PSMC1TMRH.3; + PSMC1TMRH_PSMC1TMR10 : bit absolute PSMC1TMRH.2; + PSMC1TMRH_PSMC1TMR9 : bit absolute PSMC1TMRH.1; + PSMC1TMRH_PSMC1TMR8 : bit absolute PSMC1TMRH.0; + PSMC1DBR : byte absolute $0EA9; + PSMC1DBR_PSMC1DBR7 : bit absolute PSMC1DBR.7; + PSMC1DBR_PSMC1DBR6 : bit absolute PSMC1DBR.6; + PSMC1DBR_PSMC1DBR5 : bit absolute PSMC1DBR.5; + PSMC1DBR_PSMC1DBR4 : bit absolute PSMC1DBR.4; + PSMC1DBR_PSMC1DBR3 : bit absolute PSMC1DBR.3; + PSMC1DBR_PSMC1DBR2 : bit absolute PSMC1DBR.2; + PSMC1DBR_PSMC1DBR1 : bit absolute PSMC1DBR.1; + PSMC1DBR_PSMC1DBR0 : bit absolute PSMC1DBR.0; + PSMC1DBF : byte absolute $0EAA; + PSMC1DBF_PSMC1DBF7 : bit absolute PSMC1DBF.7; + PSMC1DBF_PSMC1DBF6 : bit absolute PSMC1DBF.6; + PSMC1DBF_PSMC1DBF5 : bit absolute PSMC1DBF.5; + PSMC1DBF_PSMC1DBF4 : bit absolute PSMC1DBF.4; + PSMC1DBF_PSMC1DBF3 : bit absolute PSMC1DBF.3; + PSMC1DBF_PSMC1DBF2 : bit absolute PSMC1DBF.2; + PSMC1DBF_PSMC1DBF1 : bit absolute PSMC1DBF.1; + PSMC1DBF_PSMC1DBF0 : bit absolute PSMC1DBF.0; + PSMC1BLKR : byte absolute $0EAB; + PSMC1BLKR_PSMC1BLKR7 : bit absolute PSMC1BLKR.7; + PSMC1BLKR_PSMC1BLKR6 : bit absolute PSMC1BLKR.6; + PSMC1BLKR_PSMC1BLKR5 : bit absolute PSMC1BLKR.5; + PSMC1BLKR_PSMC1BLKR4 : bit absolute PSMC1BLKR.4; + PSMC1BLKR_PSMC1BLKR3 : bit absolute PSMC1BLKR.3; + PSMC1BLKR_PSMC1BLKR2 : bit absolute PSMC1BLKR.2; + PSMC1BLKR_PSMC1BLKR1 : bit absolute PSMC1BLKR.1; + PSMC1BLKR_PSMC1BLKR0 : bit absolute PSMC1BLKR.0; + PSMC1BLKF : byte absolute $0EAC; + PSMC1BLKF_PSMC1BLKF7 : bit absolute PSMC1BLKF.7; + PSMC1BLKF_PSMC1BLKF6 : bit absolute PSMC1BLKF.6; + PSMC1BLKF_PSMC1BLKF5 : bit absolute PSMC1BLKF.5; + PSMC1BLKF_PSMC1BLKF4 : bit absolute PSMC1BLKF.4; + PSMC1BLKF_PSMC1BLKF3 : bit absolute PSMC1BLKF.3; + PSMC1BLKF_PSMC1BLKF2 : bit absolute PSMC1BLKF.2; + PSMC1BLKF_PSMC1BLKF1 : bit absolute PSMC1BLKF.1; + PSMC1BLKF_PSMC1BLKF0 : bit absolute PSMC1BLKF.0; + PSMC1FFA : byte absolute $0EAD; + PSMC1FFA_PSMC1FFA3 : bit absolute PSMC1FFA.3; + PSMC1FFA_PSMC1FFA2 : bit absolute PSMC1FFA.2; + PSMC1FFA_PSMC1FFA1 : bit absolute PSMC1FFA.1; + PSMC1FFA_PSMC1FFA0 : bit absolute PSMC1FFA.0; + PSMC1STR0 : byte absolute $0EAE; + PSMC1STR0_P1STRF : bit absolute PSMC1STR0.5; + PSMC1STR0_P1STRE : bit absolute PSMC1STR0.4; + PSMC1STR0_P1STRD : bit absolute PSMC1STR0.3; + PSMC1STR0_P1STRC : bit absolute PSMC1STR0.2; + PSMC1STR0_P1STRB : bit absolute PSMC1STR0.1; + PSMC1STR0_P1STRA : bit absolute PSMC1STR0.0; + PSMC1STR1 : byte absolute $0EAF; + PSMC1STR1_P1SSYNC : bit absolute PSMC1STR1.7; + PSMC1STR1_P1LSMEN : bit absolute PSMC1STR1.1; + PSMC1STR1_P1HSMEN : bit absolute PSMC1STR1.0; + PSMC2CON : byte absolute $0EB1; + PSMC2CON_PSMC2EN : bit absolute PSMC2CON.7; + PSMC2CON_PSMC2LD : bit absolute PSMC2CON.6; + PSMC2CON_P2DBFE : bit absolute PSMC2CON.5; + PSMC2CON_P2DBRE : bit absolute PSMC2CON.4; + PSMC2CON_P2MODE3 : bit absolute PSMC2CON.3; + PSMC2CON_P2MODE2 : bit absolute PSMC2CON.2; + PSMC2CON_P2MODE1 : bit absolute PSMC2CON.1; + PSMC2CON_P2MODE0 : bit absolute PSMC2CON.0; + PSMC2MDL : byte absolute $0EB2; + PSMC2MDL_P2MDLEN : bit absolute PSMC2MDL.7; + PSMC2MDL_P2MDLPOL : bit absolute PSMC2MDL.6; + PSMC2MDL_P2MDLBIT : bit absolute PSMC2MDL.5; + PSMC2MDL_P2MSRC3 : bit absolute PSMC2MDL.3; + PSMC2MDL_P2MSRC2 : bit absolute PSMC2MDL.2; + PSMC2MDL_P2MSRC1 : bit absolute PSMC2MDL.1; + PSMC2MDL_P2MSRC0 : bit absolute PSMC2MDL.0; + PSMC2SYNC : byte absolute $0EB3; + PSMC2SYNC_P2POFST : bit absolute PSMC2SYNC.7; + PSMC2SYNC_P2PRPOL : bit absolute PSMC2SYNC.6; + PSMC2SYNC_P2DCPOL : bit absolute PSMC2SYNC.5; + PSMC2SYNC_P2SYNC2 : bit absolute PSMC2SYNC.2; + PSMC2SYNC_P2SYNC1 : bit absolute PSMC2SYNC.1; + PSMC2SYNC_P2SYNC0 : bit absolute PSMC2SYNC.0; + PSMC2CLK : byte absolute $0EB4; + PSMC2CLK_P2CPRE1 : bit absolute PSMC2CLK.5; + PSMC2CLK_P2CPRE0 : bit absolute PSMC2CLK.4; + PSMC2CLK_P2CSRC1 : bit absolute PSMC2CLK.1; + PSMC2CLK_P2CSRC0 : bit absolute PSMC2CLK.0; + PSMC2OEN : byte absolute $0EB5; + PSMC2OEN_P2OEB : bit absolute PSMC2OEN.1; + PSMC2OEN_P2OEA : bit absolute PSMC2OEN.0; + PSMC2POL : byte absolute $0EB6; + PSMC2POL_P2INPOL : bit absolute PSMC2POL.6; + PSMC2POL_P2POLB : bit absolute PSMC2POL.1; + PSMC2POL_P2POLA : bit absolute PSMC2POL.0; + PSMC2BLNK : byte absolute $0EB7; + PSMC2BLNK_P2FEBM1 : bit absolute PSMC2BLNK.5; + PSMC2BLNK_P2FEBM0 : bit absolute PSMC2BLNK.4; + PSMC2BLNK_P2REBM1 : bit absolute PSMC2BLNK.1; + PSMC2BLNK_P2REBM0 : bit absolute PSMC2BLNK.0; + PSMC2REBS : byte absolute $0EB8; + PSMC2REBS_P2REBSIN : bit absolute PSMC2REBS.7; + PSMC2REBS_P2REBSC4 : bit absolute PSMC2REBS.4; + PSMC2REBS_P2REBSC3 : bit absolute PSMC2REBS.3; + PSMC2REBS_P2REBSC2 : bit absolute PSMC2REBS.2; + PSMC2REBS_P2REBSC1 : bit absolute PSMC2REBS.1; + PSMC2FEBS : byte absolute $0EB9; + PSMC2FEBS_P2FEBSIN : bit absolute PSMC2FEBS.7; + PSMC2FEBS_P2FEBSC4 : bit absolute PSMC2FEBS.4; + PSMC2FEBS_P2FEBSC3 : bit absolute PSMC2FEBS.3; + PSMC2FEBS_P2FEBSC2 : bit absolute PSMC2FEBS.2; + PSMC2FEBS_P2FEBSC1 : bit absolute PSMC2FEBS.1; + PSMC2PHS : byte absolute $0EBA; + PSMC2PHS_P2PHSIN : bit absolute PSMC2PHS.7; + PSMC2PHS_P2PHSC4 : bit absolute PSMC2PHS.4; + PSMC2PHS_P2PHSC3 : bit absolute PSMC2PHS.3; + PSMC2PHS_P2PHSC2 : bit absolute PSMC2PHS.2; + PSMC2PHS_P2PHSC1 : bit absolute PSMC2PHS.1; + PSMC2PHS_P2PHST : bit absolute PSMC2PHS.0; + PSMC2DCS : byte absolute $0EBB; + PSMC2DCS_P2DCSIN : bit absolute PSMC2DCS.7; + PSMC2DCS_P2DCSC4 : bit absolute PSMC2DCS.4; + PSMC2DCS_P2DCSC3 : bit absolute PSMC2DCS.3; + PSMC2DCS_P2DCSC2 : bit absolute PSMC2DCS.2; + PSMC2DCS_P2DCSC1 : bit absolute PSMC2DCS.1; + PSMC2DCS_P2DCST : bit absolute PSMC2DCS.0; + PSMC2PRS : byte absolute $0EBC; + PSMC2PRS_P2PRSIN : bit absolute PSMC2PRS.7; + PSMC2PRS_P2PRSC4 : bit absolute PSMC2PRS.4; + PSMC2PRS_P2PRSC3 : bit absolute PSMC2PRS.3; + PSMC2PRS_P2PRSC2 : bit absolute PSMC2PRS.2; + PSMC2PRS_P2PRSC1 : bit absolute PSMC2PRS.1; + PSMC2PRS_P2PRST : bit absolute PSMC2PRS.0; + PSMC2ASDC : byte absolute $0EBD; + PSMC2ASDC_P2ASE : bit absolute PSMC2ASDC.7; + PSMC2ASDC_P2ASDEN : bit absolute PSMC2ASDC.6; + PSMC2ASDC_P2ARSEN : bit absolute PSMC2ASDC.5; + PSMC2ASDC_P2ASDOV : bit absolute PSMC2ASDC.0; + PSMC2ASDL : byte absolute $0EBE; + PSMC2ASDL_P2ASDLB : bit absolute PSMC2ASDL.1; + PSMC2ASDL_P2ASDLA : bit absolute PSMC2ASDL.0; + PSMC2ASDS : byte absolute $0EBF; + PSMC2ASDS_P2ASDSIN : bit absolute PSMC2ASDS.7; + PSMC2ASDS_P2ASDSC4 : bit absolute PSMC2ASDS.4; + PSMC2ASDS_P2ASDSC3 : bit absolute PSMC2ASDS.3; + PSMC2ASDS_P2ASDSC2 : bit absolute PSMC2ASDS.2; + PSMC2ASDS_P2ASDSC1 : bit absolute PSMC2ASDS.1; + PSMC2INT : byte absolute $0EC0; + PSMC2INT_P2TOVIE : bit absolute PSMC2INT.7; + PSMC2INT_P2TPHIE : bit absolute PSMC2INT.6; + PSMC2INT_P2TDCIE : bit absolute PSMC2INT.5; + PSMC2INT_P2TPRIE : bit absolute PSMC2INT.4; + PSMC2INT_P2TOVIF : bit absolute PSMC2INT.3; + PSMC2INT_P2TPHIF : bit absolute PSMC2INT.2; + PSMC2INT_P2TDCIF : bit absolute PSMC2INT.1; + PSMC2INT_P2TPRIF : bit absolute PSMC2INT.0; + PSMC2PHL : byte absolute $0EC1; + PSMC2PHL_PSMC2PH7 : bit absolute PSMC2PHL.7; + PSMC2PHL_PSMC2PH6 : bit absolute PSMC2PHL.6; + PSMC2PHL_PSMC2PH5 : bit absolute PSMC2PHL.5; + PSMC2PHL_PSMC2PH4 : bit absolute PSMC2PHL.4; + PSMC2PHL_PSMC2PH3 : bit absolute PSMC2PHL.3; + PSMC2PHL_PSMC2PH2 : bit absolute PSMC2PHL.2; + PSMC2PHL_PSMC2PH1 : bit absolute PSMC2PHL.1; + PSMC2PHL_PSMC2PH0 : bit absolute PSMC2PHL.0; + PSMC2PHH : byte absolute $0EC2; + PSMC2PHH_PSMC2PH15 : bit absolute PSMC2PHH.7; + PSMC2PHH_PSMC2PH14 : bit absolute PSMC2PHH.6; + PSMC2PHH_PSMC2PH13 : bit absolute PSMC2PHH.5; + PSMC2PHH_PSMC2PH12 : bit absolute PSMC2PHH.4; + PSMC2PHH_PSMC2PH11 : bit absolute PSMC2PHH.3; + PSMC2PHH_PSMC2PH10 : bit absolute PSMC2PHH.2; + PSMC2PHH_PSMC2PH9 : bit absolute PSMC2PHH.1; + PSMC2PHH_PSMC2PH8 : bit absolute PSMC2PHH.0; + PSMC2DCL : byte absolute $0EC3; + PSMC2DCL_PSMC2DC7 : bit absolute PSMC2DCL.7; + PSMC2DCL_PSMC2DC6 : bit absolute PSMC2DCL.6; + PSMC2DCL_PSMC2DC5 : bit absolute PSMC2DCL.5; + PSMC2DCL_PSMC2DC4 : bit absolute PSMC2DCL.4; + PSMC2DCL_PSMC2DC3 : bit absolute PSMC2DCL.3; + PSMC2DCL_PSMC2DC2 : bit absolute PSMC2DCL.2; + PSMC2DCL_PSMC2DC1 : bit absolute PSMC2DCL.1; + PSMC2DCL_PSMC2DC0 : bit absolute PSMC2DCL.0; + PSMC2DCH : byte absolute $0EC4; + PSMC2DCH_PSMC2DC15 : bit absolute PSMC2DCH.7; + PSMC2DCH_PSMC2DC14 : bit absolute PSMC2DCH.6; + PSMC2DCH_PSMC2DC13 : bit absolute PSMC2DCH.5; + PSMC2DCH_PSMC2DC12 : bit absolute PSMC2DCH.4; + PSMC2DCH_PSMC2DC11 : bit absolute PSMC2DCH.3; + PSMC2DCH_PSMC2DC10 : bit absolute PSMC2DCH.2; + PSMC2DCH_PSMC2DC9 : bit absolute PSMC2DCH.1; + PSMC2DCH_PSMC2DC8 : bit absolute PSMC2DCH.0; + PSMC2PRL : byte absolute $0EC5; + PSMC2PRL_PSMC2PR7 : bit absolute PSMC2PRL.7; + PSMC2PRL_PSMC2PR6 : bit absolute PSMC2PRL.6; + PSMC2PRL_PSMC2PR5 : bit absolute PSMC2PRL.5; + PSMC2PRL_PSMC2PR4 : bit absolute PSMC2PRL.4; + PSMC2PRL_PSMC2PR3 : bit absolute PSMC2PRL.3; + PSMC2PRL_PSMC2PR2 : bit absolute PSMC2PRL.2; + PSMC2PRL_PSMC2PR1 : bit absolute PSMC2PRL.1; + PSMC2PRL_PSMC2PR0 : bit absolute PSMC2PRL.0; + PSMC2PRH : byte absolute $0EC6; + PSMC2PRH_PSMC2PR15 : bit absolute PSMC2PRH.7; + PSMC2PRH_PSMC2PR14 : bit absolute PSMC2PRH.6; + PSMC2PRH_PSMC2PR13 : bit absolute PSMC2PRH.5; + PSMC2PRH_PSMC2PR12 : bit absolute PSMC2PRH.4; + PSMC2PRH_PSMC2PR11 : bit absolute PSMC2PRH.3; + PSMC2PRH_PSMC2PR10 : bit absolute PSMC2PRH.2; + PSMC2PRH_PSMC2PR9 : bit absolute PSMC2PRH.1; + PSMC2PRH_PSMC2PR8 : bit absolute PSMC2PRH.0; + PSMC2TMRL : byte absolute $0EC7; + PSMC2TMRL_PSMC2TMR7 : bit absolute PSMC2TMRL.7; + PSMC2TMRL_PSMC2TMR6 : bit absolute PSMC2TMRL.6; + PSMC2TMRL_PSMC2TMR5 : bit absolute PSMC2TMRL.5; + PSMC2TMRL_PSMC2TMR4 : bit absolute PSMC2TMRL.4; + PSMC2TMRL_PSMC2TMR3 : bit absolute PSMC2TMRL.3; + PSMC2TMRL_PSMC2TMR2 : bit absolute PSMC2TMRL.2; + PSMC2TMRL_PSMC2TMR1 : bit absolute PSMC2TMRL.1; + PSMC2TMRL_PSMC2TMR0 : bit absolute PSMC2TMRL.0; + PSMC2TMRH : byte absolute $0EC8; + PSMC2TMRH_PSMC2TMR15 : bit absolute PSMC2TMRH.7; + PSMC2TMRH_PSMC2TMR14 : bit absolute PSMC2TMRH.6; + PSMC2TMRH_PSMC2TMR13 : bit absolute PSMC2TMRH.5; + PSMC2TMRH_PSMC2TMR12 : bit absolute PSMC2TMRH.4; + PSMC2TMRH_PSMC2TMR11 : bit absolute PSMC2TMRH.3; + PSMC2TMRH_PSMC2TMR10 : bit absolute PSMC2TMRH.2; + PSMC2TMRH_PSMC2TMR9 : bit absolute PSMC2TMRH.1; + PSMC2TMRH_PSMC2TMR8 : bit absolute PSMC2TMRH.0; + PSMC2DBR : byte absolute $0EC9; + PSMC2DBR_PSMC2DBR7 : bit absolute PSMC2DBR.7; + PSMC2DBR_PSMC2DBR6 : bit absolute PSMC2DBR.6; + PSMC2DBR_PSMC2DBR5 : bit absolute PSMC2DBR.5; + PSMC2DBR_PSMC2DBR4 : bit absolute PSMC2DBR.4; + PSMC2DBR_PSMC2DBR3 : bit absolute PSMC2DBR.3; + PSMC2DBR_PSMC2DBR2 : bit absolute PSMC2DBR.2; + PSMC2DBR_PSMC2DBR1 : bit absolute PSMC2DBR.1; + PSMC2DBR_PSMC2DBR0 : bit absolute PSMC2DBR.0; + PSMC2DBF : byte absolute $0ECA; + PSMC2DBF_PSMC2DBF7 : bit absolute PSMC2DBF.7; + PSMC2DBF_PSMC2DBF6 : bit absolute PSMC2DBF.6; + PSMC2DBF_PSMC2DBF5 : bit absolute PSMC2DBF.5; + PSMC2DBF_PSMC2DBF4 : bit absolute PSMC2DBF.4; + PSMC2DBF_PSMC2DBF3 : bit absolute PSMC2DBF.3; + PSMC2DBF_PSMC2DBF2 : bit absolute PSMC2DBF.2; + PSMC2DBF_PSMC2DBF1 : bit absolute PSMC2DBF.1; + PSMC2DBF_PSMC2DBF0 : bit absolute PSMC2DBF.0; + PSMC2BLKR : byte absolute $0ECB; + PSMC2BLKR_PSMC2BLKR7 : bit absolute PSMC2BLKR.7; + PSMC2BLKR_PSMC2BLKR6 : bit absolute PSMC2BLKR.6; + PSMC2BLKR_PSMC2BLKR5 : bit absolute PSMC2BLKR.5; + PSMC2BLKR_PSMC2BLKR4 : bit absolute PSMC2BLKR.4; + PSMC2BLKR_PSMC2BLKR3 : bit absolute PSMC2BLKR.3; + PSMC2BLKR_PSMC2BLKR2 : bit absolute PSMC2BLKR.2; + PSMC2BLKR_PSMC2BLKR1 : bit absolute PSMC2BLKR.1; + PSMC2BLKR_PSMC2BLKR0 : bit absolute PSMC2BLKR.0; + PSMC2BLKF : byte absolute $0ECC; + PSMC2BLKF_PSMC2BLKF7 : bit absolute PSMC2BLKF.7; + PSMC2BLKF_PSMC2BLKF6 : bit absolute PSMC2BLKF.6; + PSMC2BLKF_PSMC2BLKF5 : bit absolute PSMC2BLKF.5; + PSMC2BLKF_PSMC2BLKF4 : bit absolute PSMC2BLKF.4; + PSMC2BLKF_PSMC2BLKF3 : bit absolute PSMC2BLKF.3; + PSMC2BLKF_PSMC2BLKF2 : bit absolute PSMC2BLKF.2; + PSMC2BLKF_PSMC2BLKF1 : bit absolute PSMC2BLKF.1; + PSMC2BLKF_PSMC2BLKF0 : bit absolute PSMC2BLKF.0; + PSMC2FFA : byte absolute $0ECD; + PSMC2FFA_PSMC2FFA3 : bit absolute PSMC2FFA.3; + PSMC2FFA_PSMC2FFA2 : bit absolute PSMC2FFA.2; + PSMC2FFA_PSMC2FFA1 : bit absolute PSMC2FFA.1; + PSMC2FFA_PSMC2FFA0 : bit absolute PSMC2FFA.0; + PSMC2STR0 : byte absolute $0ECE; + PSMC2STR0_P2STRB : bit absolute PSMC2STR0.1; + PSMC2STR0_P2STRA : bit absolute PSMC2STR0.0; + PSMC2STR1 : byte absolute $0ECF; + PSMC2STR1_P2SSYNC : bit absolute PSMC2STR1.7; + PSMC2STR1_P2LSMEN : bit absolute PSMC2STR1.1; + PSMC2STR1_P2HSMEN : bit absolute PSMC2STR1.0; + PSMC3CON : byte absolute $0ED1; + PSMC3CON_PSMC3EN : bit absolute PSMC3CON.7; + PSMC3CON_PSMC3LD : bit absolute PSMC3CON.6; + PSMC3CON_P3DBFE : bit absolute PSMC3CON.5; + PSMC3CON_P3DBRE : bit absolute PSMC3CON.4; + PSMC3CON_P3MODE3 : bit absolute PSMC3CON.3; + PSMC3CON_P3MODE2 : bit absolute PSMC3CON.2; + PSMC3CON_P3MODE1 : bit absolute PSMC3CON.1; + PSMC3CON_P3MODE0 : bit absolute PSMC3CON.0; + PSMC3MDL : byte absolute $0ED2; + PSMC3MDL_P3MDLEN : bit absolute PSMC3MDL.7; + PSMC3MDL_P3MDLPOL : bit absolute PSMC3MDL.6; + PSMC3MDL_P3MDLBIT : bit absolute PSMC3MDL.5; + PSMC3MDL_P3MSRC3 : bit absolute PSMC3MDL.3; + PSMC3MDL_P3MSRC2 : bit absolute PSMC3MDL.2; + PSMC3MDL_P3MSRC1 : bit absolute PSMC3MDL.1; + PSMC3MDL_P3MSRC0 : bit absolute PSMC3MDL.0; + PSMC3SYNC : byte absolute $0ED3; + PSMC3SYNC_P3POFST : bit absolute PSMC3SYNC.7; + PSMC3SYNC_P3PRPOL : bit absolute PSMC3SYNC.6; + PSMC3SYNC_P3DCPOL : bit absolute PSMC3SYNC.5; + PSMC3SYNC_P3SYNC2 : bit absolute PSMC3SYNC.2; + PSMC3SYNC_P3SYNC1 : bit absolute PSMC3SYNC.1; + PSMC3SYNC_P3SYNC0 : bit absolute PSMC3SYNC.0; + PSMC3CLK : byte absolute $0ED4; + PSMC3CLK_P3CPRE1 : bit absolute PSMC3CLK.5; + PSMC3CLK_P3CPRE0 : bit absolute PSMC3CLK.4; + PSMC3CLK_P3CSRC1 : bit absolute PSMC3CLK.1; + PSMC3CLK_P3CSRC0 : bit absolute PSMC3CLK.0; + PSMC3OEN : byte absolute $0ED5; + PSMC3OEN_P3OEF : bit absolute PSMC3OEN.5; + PSMC3OEN_P3OEE : bit absolute PSMC3OEN.4; + PSMC3OEN_P3OED : bit absolute PSMC3OEN.3; + PSMC3OEN_P3OEC : bit absolute PSMC3OEN.2; + PSMC3OEN_P3OEB : bit absolute PSMC3OEN.1; + PSMC3OEN_P3OEA : bit absolute PSMC3OEN.0; + PSMC3POL : byte absolute $0ED6; + PSMC3POL_P3INPOL : bit absolute PSMC3POL.6; + PSMC3POL_P3POLF : bit absolute PSMC3POL.5; + PSMC3POL_P3POLE : bit absolute PSMC3POL.4; + PSMC3POL_P3POLD : bit absolute PSMC3POL.3; + PSMC3POL_P3POLC : bit absolute PSMC3POL.2; + PSMC3POL_P3POLB : bit absolute PSMC3POL.1; + PSMC3POL_P3POLA : bit absolute PSMC3POL.0; + PSMC3BLNK : byte absolute $0ED7; + PSMC3BLNK_P3FEBM1 : bit absolute PSMC3BLNK.5; + PSMC3BLNK_P3FEBM0 : bit absolute PSMC3BLNK.4; + PSMC3BLNK_P3REBM1 : bit absolute PSMC3BLNK.1; + PSMC3BLNK_P3REBM0 : bit absolute PSMC3BLNK.0; + PSMC3REBS : byte absolute $0ED8; + PSMC3REBS_P3REBSIN : bit absolute PSMC3REBS.7; + PSMC3REBS_P3REBSC4 : bit absolute PSMC3REBS.4; + PSMC3REBS_P3REBSC3 : bit absolute PSMC3REBS.3; + PSMC3REBS_P3REBSC2 : bit absolute PSMC3REBS.2; + PSMC3REBS_P3REBSC1 : bit absolute PSMC3REBS.1; + PSMC3FEBS : byte absolute $0ED9; + PSMC3FEBS_P3FEBSIN : bit absolute PSMC3FEBS.7; + PSMC3FEBS_P3FEBSC4 : bit absolute PSMC3FEBS.4; + PSMC3FEBS_P3FEBSC3 : bit absolute PSMC3FEBS.3; + PSMC3FEBS_P3FEBSC2 : bit absolute PSMC3FEBS.2; + PSMC3FEBS_P3FEBSC1 : bit absolute PSMC3FEBS.1; + PSMC3PHS : byte absolute $0EDA; + PSMC3PHS_P3PHSIN : bit absolute PSMC3PHS.7; + PSMC3PHS_P3PHSC4 : bit absolute PSMC3PHS.4; + PSMC3PHS_P3PHSC3 : bit absolute PSMC3PHS.3; + PSMC3PHS_P3PHSC2 : bit absolute PSMC3PHS.2; + PSMC3PHS_P3PHSC1 : bit absolute PSMC3PHS.1; + PSMC3PHS_P3PHST : bit absolute PSMC3PHS.0; + PSMC3DCS : byte absolute $0EDB; + PSMC3DCS_P3DCSIN : bit absolute PSMC3DCS.7; + PSMC3DCS_P3DCSC4 : bit absolute PSMC3DCS.4; + PSMC3DCS_P3DCSC3 : bit absolute PSMC3DCS.3; + PSMC3DCS_P3DCSC2 : bit absolute PSMC3DCS.2; + PSMC3DCS_P3DCSC1 : bit absolute PSMC3DCS.1; + PSMC3DCS_P3DCST : bit absolute PSMC3DCS.0; + PSMC3PRS : byte absolute $0EDC; + PSMC3PRS_P3PRSIN : bit absolute PSMC3PRS.7; + PSMC3PRS_P3PRSC4 : bit absolute PSMC3PRS.4; + PSMC3PRS_P3PRSC3 : bit absolute PSMC3PRS.3; + PSMC3PRS_P3PRSC2 : bit absolute PSMC3PRS.2; + PSMC3PRS_P3PRSC1 : bit absolute PSMC3PRS.1; + PSMC3PRS_P3PRST : bit absolute PSMC3PRS.0; + PSMC3ASDC : byte absolute $0EDD; + PSMC3ASDC_P3ASE : bit absolute PSMC3ASDC.7; + PSMC3ASDC_P3ASDEN : bit absolute PSMC3ASDC.6; + PSMC3ASDC_P3ARSEN : bit absolute PSMC3ASDC.5; + PSMC3ASDC_P3ASDOV : bit absolute PSMC3ASDC.0; + PSMC3ASDL : byte absolute $0EDE; + PSMC3ASDL_P3ASDLF : bit absolute PSMC3ASDL.5; + PSMC3ASDL_P3ASDLE : bit absolute PSMC3ASDL.4; + PSMC3ASDL_P3ASDLD : bit absolute PSMC3ASDL.3; + PSMC3ASDL_P3ASDLC : bit absolute PSMC3ASDL.2; + PSMC3ASDL_P3ASDLB : bit absolute PSMC3ASDL.1; + PSMC3ASDL_P3ASDLA : bit absolute PSMC3ASDL.0; + PSMC3ASDS : byte absolute $0EDF; + PSMC3ASDS_P3ASDSIN : bit absolute PSMC3ASDS.7; + PSMC3ASDS_P3ASDSC4 : bit absolute PSMC3ASDS.4; + PSMC3ASDS_P3ASDSC3 : bit absolute PSMC3ASDS.3; + PSMC3ASDS_P3ASDSC2 : bit absolute PSMC3ASDS.2; + PSMC3ASDS_P3ASDSC1 : bit absolute PSMC3ASDS.1; + PSMC3INT : byte absolute $0EE0; + PSMC3INT_P3TOVIE : bit absolute PSMC3INT.7; + PSMC3INT_P3TPHIE : bit absolute PSMC3INT.6; + PSMC3INT_P3TDCIE : bit absolute PSMC3INT.5; + PSMC3INT_P3TPRIE : bit absolute PSMC3INT.4; + PSMC3INT_P3TOVIF : bit absolute PSMC3INT.3; + PSMC3INT_P3TPHIF : bit absolute PSMC3INT.2; + PSMC3INT_P3TDCIF : bit absolute PSMC3INT.1; + PSMC3INT_P3TPRIF : bit absolute PSMC3INT.0; + PSMC3PHL : byte absolute $0EE1; + PSMC3PHL_PSMC3PH7 : bit absolute PSMC3PHL.7; + PSMC3PHL_PSMC3PH6 : bit absolute PSMC3PHL.6; + PSMC3PHL_PSMC3PH5 : bit absolute PSMC3PHL.5; + PSMC3PHL_PSMC3PH4 : bit absolute PSMC3PHL.4; + PSMC3PHL_PSMC3PH3 : bit absolute PSMC3PHL.3; + PSMC3PHL_PSMC3PH2 : bit absolute PSMC3PHL.2; + PSMC3PHL_PSMC3PH1 : bit absolute PSMC3PHL.1; + PSMC3PHL_PSMC3PH0 : bit absolute PSMC3PHL.0; + PSMC3PHH : byte absolute $0EE2; + PSMC3PHH_PSMC3PH15 : bit absolute PSMC3PHH.7; + PSMC3PHH_PSMC3PH14 : bit absolute PSMC3PHH.6; + PSMC3PHH_PSMC3PH13 : bit absolute PSMC3PHH.5; + PSMC3PHH_PSMC3PH12 : bit absolute PSMC3PHH.4; + PSMC3PHH_PSMC3PH11 : bit absolute PSMC3PHH.3; + PSMC3PHH_PSMC3PH10 : bit absolute PSMC3PHH.2; + PSMC3PHH_PSMC3PH9 : bit absolute PSMC3PHH.1; + PSMC3PHH_PSMC3PH8 : bit absolute PSMC3PHH.0; + PSMC3DCL : byte absolute $0EE3; + PSMC3DCL_PSMC3DC7 : bit absolute PSMC3DCL.7; + PSMC3DCL_PSMC3DC6 : bit absolute PSMC3DCL.6; + PSMC3DCL_PSMC3DC5 : bit absolute PSMC3DCL.5; + PSMC3DCL_PSMC3DC4 : bit absolute PSMC3DCL.4; + PSMC3DCL_PSMC3DC3 : bit absolute PSMC3DCL.3; + PSMC3DCL_PSMC3DC2 : bit absolute PSMC3DCL.2; + PSMC3DCL_PSMC3DC1 : bit absolute PSMC3DCL.1; + PSMC3DCL_PSMC3DC0 : bit absolute PSMC3DCL.0; + PSMC3DCH : byte absolute $0EE4; + PSMC3DCH_PSMC3DC15 : bit absolute PSMC3DCH.7; + PSMC3DCH_PSMC3DC14 : bit absolute PSMC3DCH.6; + PSMC3DCH_PSMC3DC13 : bit absolute PSMC3DCH.5; + PSMC3DCH_PSMC3DC12 : bit absolute PSMC3DCH.4; + PSMC3DCH_PSMC3DC11 : bit absolute PSMC3DCH.3; + PSMC3DCH_PSMC3DC10 : bit absolute PSMC3DCH.2; + PSMC3DCH_PSMC3DC9 : bit absolute PSMC3DCH.1; + PSMC3DCH_PSMC3DC8 : bit absolute PSMC3DCH.0; + PSMC3PRL : byte absolute $0EE5; + PSMC3PRL_PSMC3PR7 : bit absolute PSMC3PRL.7; + PSMC3PRL_PSMC3PR6 : bit absolute PSMC3PRL.6; + PSMC3PRL_PSMC3PR5 : bit absolute PSMC3PRL.5; + PSMC3PRL_PSMC3PR4 : bit absolute PSMC3PRL.4; + PSMC3PRL_PSMC3PR3 : bit absolute PSMC3PRL.3; + PSMC3PRL_PSMC3PR2 : bit absolute PSMC3PRL.2; + PSMC3PRL_PSMC3PR1 : bit absolute PSMC3PRL.1; + PSMC3PRL_PSMC3PR0 : bit absolute PSMC3PRL.0; + PSMC3PRH : byte absolute $0EE6; + PSMC3PRH_PSMC3PR15 : bit absolute PSMC3PRH.7; + PSMC3PRH_PSMC3PR14 : bit absolute PSMC3PRH.6; + PSMC3PRH_PSMC3PR13 : bit absolute PSMC3PRH.5; + PSMC3PRH_PSMC3PR12 : bit absolute PSMC3PRH.4; + PSMC3PRH_PSMC3PR11 : bit absolute PSMC3PRH.3; + PSMC3PRH_PSMC3PR10 : bit absolute PSMC3PRH.2; + PSMC3PRH_PSMC3PR9 : bit absolute PSMC3PRH.1; + PSMC3PRH_PSMC3PR8 : bit absolute PSMC3PRH.0; + PSMC3TMRL : byte absolute $0EE7; + PSMC3TMRL_PSMC3TMR7 : bit absolute PSMC3TMRL.7; + PSMC3TMRL_PSMC3TMR6 : bit absolute PSMC3TMRL.6; + PSMC3TMRL_PSMC3TMR5 : bit absolute PSMC3TMRL.5; + PSMC3TMRL_PSMC3TMR4 : bit absolute PSMC3TMRL.4; + PSMC3TMRL_PSMC3TMR3 : bit absolute PSMC3TMRL.3; + PSMC3TMRL_PSMC3TMR2 : bit absolute PSMC3TMRL.2; + PSMC3TMRL_PSMC3TMR1 : bit absolute PSMC3TMRL.1; + PSMC3TMRL_PSMC3TMR0 : bit absolute PSMC3TMRL.0; + PSMC3TMRH : byte absolute $0EE8; + PSMC3TMRH_PSMC3TMR15 : bit absolute PSMC3TMRH.7; + PSMC3TMRH_PSMC3TMR14 : bit absolute PSMC3TMRH.6; + PSMC3TMRH_PSMC3TMR13 : bit absolute PSMC3TMRH.5; + PSMC3TMRH_PSMC3TMR12 : bit absolute PSMC3TMRH.4; + PSMC3TMRH_PSMC3TMR11 : bit absolute PSMC3TMRH.3; + PSMC3TMRH_PSMC3TMR10 : bit absolute PSMC3TMRH.2; + PSMC3TMRH_PSMC3TMR9 : bit absolute PSMC3TMRH.1; + PSMC3TMRH_PSMC3TMR8 : bit absolute PSMC3TMRH.0; + PSMC3DBR : byte absolute $0EE9; + PSMC3DBR_PSMC3DBR7 : bit absolute PSMC3DBR.7; + PSMC3DBR_PSMC3DBR6 : bit absolute PSMC3DBR.6; + PSMC3DBR_PSMC3DBR5 : bit absolute PSMC3DBR.5; + PSMC3DBR_PSMC3DBR4 : bit absolute PSMC3DBR.4; + PSMC3DBR_PSMC3DBR3 : bit absolute PSMC3DBR.3; + PSMC3DBR_PSMC3DBR2 : bit absolute PSMC3DBR.2; + PSMC3DBR_PSMC3DBR1 : bit absolute PSMC3DBR.1; + PSMC3DBR_PSMC3DBR0 : bit absolute PSMC3DBR.0; + PSMC3DBF : byte absolute $0EEA; + PSMC3DBF_PSMC3DBF7 : bit absolute PSMC3DBF.7; + PSMC3DBF_PSMC3DBF6 : bit absolute PSMC3DBF.6; + PSMC3DBF_PSMC3DBF5 : bit absolute PSMC3DBF.5; + PSMC3DBF_PSMC3DBF4 : bit absolute PSMC3DBF.4; + PSMC3DBF_PSMC3DBF3 : bit absolute PSMC3DBF.3; + PSMC3DBF_PSMC3DBF2 : bit absolute PSMC3DBF.2; + PSMC3DBF_PSMC3DBF1 : bit absolute PSMC3DBF.1; + PSMC3DBF_PSMC3DBF0 : bit absolute PSMC3DBF.0; + PSMC3BLKR : byte absolute $0EEB; + PSMC3BLKR_PSMC3BLKR7 : bit absolute PSMC3BLKR.7; + PSMC3BLKR_PSMC3BLKR6 : bit absolute PSMC3BLKR.6; + PSMC3BLKR_PSMC3BLKR5 : bit absolute PSMC3BLKR.5; + PSMC3BLKR_PSMC3BLKR4 : bit absolute PSMC3BLKR.4; + PSMC3BLKR_PSMC3BLKR3 : bit absolute PSMC3BLKR.3; + PSMC3BLKR_PSMC3BLKR2 : bit absolute PSMC3BLKR.2; + PSMC3BLKR_PSMC3BLKR1 : bit absolute PSMC3BLKR.1; + PSMC3BLKR_PSMC3BLKR0 : bit absolute PSMC3BLKR.0; + PSMC3BLKF : byte absolute $0EEC; + PSMC3BLKF_PSMC3BLKF7 : bit absolute PSMC3BLKF.7; + PSMC3BLKF_PSMC3BLKF6 : bit absolute PSMC3BLKF.6; + PSMC3BLKF_PSMC3BLKF5 : bit absolute PSMC3BLKF.5; + PSMC3BLKF_PSMC3BLKF4 : bit absolute PSMC3BLKF.4; + PSMC3BLKF_PSMC3BLKF3 : bit absolute PSMC3BLKF.3; + PSMC3BLKF_PSMC3BLKF2 : bit absolute PSMC3BLKF.2; + PSMC3BLKF_PSMC3BLKF1 : bit absolute PSMC3BLKF.1; + PSMC3BLKF_PSMC3BLKF0 : bit absolute PSMC3BLKF.0; + PSMC3FFA : byte absolute $0EED; + PSMC3FFA_PSMC3FFA3 : bit absolute PSMC3FFA.3; + PSMC3FFA_PSMC3FFA2 : bit absolute PSMC3FFA.2; + PSMC3FFA_PSMC3FFA1 : bit absolute PSMC3FFA.1; + PSMC3FFA_PSMC3FFA0 : bit absolute PSMC3FFA.0; + PSMC3STR0 : byte absolute $0EEE; + PSMC3STR0_P3STRF : bit absolute PSMC3STR0.5; + PSMC3STR0_P3STRE : bit absolute PSMC3STR0.4; + PSMC3STR0_P3STRD : bit absolute PSMC3STR0.3; + PSMC3STR0_P3STRC : bit absolute PSMC3STR0.2; + PSMC3STR0_P3STRB : bit absolute PSMC3STR0.1; + PSMC3STR0_P3STRA : bit absolute PSMC3STR0.0; + PSMC3STR1 : byte absolute $0EEF; + PSMC3STR1_P3SSYNC : bit absolute PSMC3STR1.7; + PSMC3STR1_P3LSMEN : bit absolute PSMC3STR1.1; + PSMC3STR1_P3HSMEN : bit absolute PSMC3STR1.0; + PSMC4CON : byte absolute $0F11; + PSMC4CON_PSMC4EN : bit absolute PSMC4CON.7; + PSMC4CON_PSMC4LD : bit absolute PSMC4CON.6; + PSMC4CON_P4DBFE : bit absolute PSMC4CON.5; + PSMC4CON_P4DBRE : bit absolute PSMC4CON.4; + PSMC4CON_P4MODE3 : bit absolute PSMC4CON.3; + PSMC4CON_P4MODE2 : bit absolute PSMC4CON.2; + PSMC4CON_P4MODE1 : bit absolute PSMC4CON.1; + PSMC4CON_P4MODE0 : bit absolute PSMC4CON.0; + PSMC4MDL : byte absolute $0F12; + PSMC4MDL_P4MDLEN : bit absolute PSMC4MDL.7; + PSMC4MDL_P4MDLPOL : bit absolute PSMC4MDL.6; + PSMC4MDL_P4MDLBIT : bit absolute PSMC4MDL.5; + PSMC4MDL_P4MSRC3 : bit absolute PSMC4MDL.3; + PSMC4MDL_P4MSRC2 : bit absolute PSMC4MDL.2; + PSMC4MDL_P4MSRC1 : bit absolute PSMC4MDL.1; + PSMC4MDL_P4MSRC0 : bit absolute PSMC4MDL.0; + PSMC4SYNC : byte absolute $0F13; + PSMC4SYNC_P4POFST : bit absolute PSMC4SYNC.7; + PSMC4SYNC_P4PRPOL : bit absolute PSMC4SYNC.6; + PSMC4SYNC_P4DCPOL : bit absolute PSMC4SYNC.5; + PSMC4SYNC_P4SYNC2 : bit absolute PSMC4SYNC.2; + PSMC4SYNC_P4SYNC1 : bit absolute PSMC4SYNC.1; + PSMC4SYNC_P4SYNC0 : bit absolute PSMC4SYNC.0; + PSMC4CLK : byte absolute $0F14; + PSMC4CLK_P4CPRE1 : bit absolute PSMC4CLK.5; + PSMC4CLK_P4CPRE0 : bit absolute PSMC4CLK.4; + PSMC4CLK_P4CSRC1 : bit absolute PSMC4CLK.1; + PSMC4CLK_P4CSRC0 : bit absolute PSMC4CLK.0; + PSMC4OEN : byte absolute $0F15; + PSMC4OEN_P4OEB : bit absolute PSMC4OEN.1; + PSMC4OEN_P4OEA : bit absolute PSMC4OEN.0; + PSMC4POL : byte absolute $0F16; + PSMC4POL_P4INPOL : bit absolute PSMC4POL.6; + PSMC4POL_P4POLB : bit absolute PSMC4POL.1; + PSMC4POL_P4POLA : bit absolute PSMC4POL.0; + PSMC4BLNK : byte absolute $0F17; + PSMC4BLNK_P4FEBM1 : bit absolute PSMC4BLNK.5; + PSMC4BLNK_P4FEBM0 : bit absolute PSMC4BLNK.4; + PSMC4BLNK_P4REBM1 : bit absolute PSMC4BLNK.1; + PSMC4BLNK_P4REBM0 : bit absolute PSMC4BLNK.0; + PSMC4REBS : byte absolute $0F18; + PSMC4REBS_P4REBSIN : bit absolute PSMC4REBS.7; + PSMC4REBS_P4REBSC4 : bit absolute PSMC4REBS.4; + PSMC4REBS_P4REBSC3 : bit absolute PSMC4REBS.3; + PSMC4REBS_P4REBSC2 : bit absolute PSMC4REBS.2; + PSMC4REBS_P4REBSC1 : bit absolute PSMC4REBS.1; + PSMC4FEBS : byte absolute $0F19; + PSMC4FEBS_P4FEBSIN : bit absolute PSMC4FEBS.7; + PSMC4FEBS_P4FEBSC4 : bit absolute PSMC4FEBS.4; + PSMC4FEBS_P4FEBSC3 : bit absolute PSMC4FEBS.3; + PSMC4FEBS_P4FEBSC2 : bit absolute PSMC4FEBS.2; + PSMC4FEBS_P4FEBSC1 : bit absolute PSMC4FEBS.1; + PSMC4PHS : byte absolute $0F1A; + PSMC4PHS_P4PHSIN : bit absolute PSMC4PHS.7; + PSMC4PHS_P4PHSC4 : bit absolute PSMC4PHS.4; + PSMC4PHS_P4PHSC3 : bit absolute PSMC4PHS.3; + PSMC4PHS_P4PHSC2 : bit absolute PSMC4PHS.2; + PSMC4PHS_P4PHSC1 : bit absolute PSMC4PHS.1; + PSMC4PHS_P4PHST : bit absolute PSMC4PHS.0; + PSMC4DCS : byte absolute $0F1B; + PSMC4DCS_P4DCSIN : bit absolute PSMC4DCS.7; + PSMC4DCS_P4DCSC4 : bit absolute PSMC4DCS.4; + PSMC4DCS_P4DCSC3 : bit absolute PSMC4DCS.3; + PSMC4DCS_P4DCSC2 : bit absolute PSMC4DCS.2; + PSMC4DCS_P4DCSC1 : bit absolute PSMC4DCS.1; + PSMC4DCS_P4DCST : bit absolute PSMC4DCS.0; + PSMC4PRS : byte absolute $0F1C; + PSMC4PRS_P4PRSIN : bit absolute PSMC4PRS.7; + PSMC4PRS_P4PRSC4 : bit absolute PSMC4PRS.4; + PSMC4PRS_P4PRSC3 : bit absolute PSMC4PRS.3; + PSMC4PRS_P4PRSC2 : bit absolute PSMC4PRS.2; + PSMC4PRS_P4PRSC1 : bit absolute PSMC4PRS.1; + PSMC4PRS_P4PRST : bit absolute PSMC4PRS.0; + PSMC4ASDC : byte absolute $0F1D; + PSMC4ASDC_P4ASE : bit absolute PSMC4ASDC.7; + PSMC4ASDC_P4ASDEN : bit absolute PSMC4ASDC.6; + PSMC4ASDC_P4ARSEN : bit absolute PSMC4ASDC.5; + PSMC4ASDC_P4ASDOV : bit absolute PSMC4ASDC.0; + PSMC4ASDL : byte absolute $0F1E; + PSMC4ASDL_P4ASDLB : bit absolute PSMC4ASDL.1; + PSMC4ASDL_P4ASDLA : bit absolute PSMC4ASDL.0; + PSMC4ASDS : byte absolute $0F1F; + PSMC4ASDS_P4ASDSIN : bit absolute PSMC4ASDS.7; + PSMC4ASDS_P4ASDSC4 : bit absolute PSMC4ASDS.4; + PSMC4ASDS_P4ASDSC3 : bit absolute PSMC4ASDS.3; + PSMC4ASDS_P4ASDSC2 : bit absolute PSMC4ASDS.2; + PSMC4ASDS_P4ASDSC1 : bit absolute PSMC4ASDS.1; + PSMC4INT : byte absolute $0F20; + PSMC4INT_P4TOVIE : bit absolute PSMC4INT.7; + PSMC4INT_P4TPHIE : bit absolute PSMC4INT.6; + PSMC4INT_P4TDCIE : bit absolute PSMC4INT.5; + PSMC4INT_P4TPRIE : bit absolute PSMC4INT.4; + PSMC4INT_P4TOVIF : bit absolute PSMC4INT.3; + PSMC4INT_P4TPHIF : bit absolute PSMC4INT.2; + PSMC4INT_P4TDCIF : bit absolute PSMC4INT.1; + PSMC4INT_P4TPRIF : bit absolute PSMC4INT.0; + PSMC4PHL : byte absolute $0F21; + PSMC4PHL_PSMC4PH7 : bit absolute PSMC4PHL.7; + PSMC4PHL_PSMC4PH6 : bit absolute PSMC4PHL.6; + PSMC4PHL_PSMC4PH5 : bit absolute PSMC4PHL.5; + PSMC4PHL_PSMC4PH4 : bit absolute PSMC4PHL.4; + PSMC4PHL_PSMC4PH3 : bit absolute PSMC4PHL.3; + PSMC4PHL_PSMC4PH2 : bit absolute PSMC4PHL.2; + PSMC4PHL_PSMC4PH1 : bit absolute PSMC4PHL.1; + PSMC4PHL_PSMC4PH0 : bit absolute PSMC4PHL.0; + PSMC4PHH : byte absolute $0F22; + PSMC4PHH_PSMC4PH15 : bit absolute PSMC4PHH.7; + PSMC4PHH_PSMC4PH14 : bit absolute PSMC4PHH.6; + PSMC4PHH_PSMC4PH13 : bit absolute PSMC4PHH.5; + PSMC4PHH_PSMC4PH12 : bit absolute PSMC4PHH.4; + PSMC4PHH_PSMC4PH11 : bit absolute PSMC4PHH.3; + PSMC4PHH_PSMC4PH10 : bit absolute PSMC4PHH.2; + PSMC4PHH_PSMC4PH9 : bit absolute PSMC4PHH.1; + PSMC4PHH_PSMC4PH8 : bit absolute PSMC4PHH.0; + PSMC4DCL : byte absolute $0F23; + PSMC4DCL_PSMC4DC7 : bit absolute PSMC4DCL.7; + PSMC4DCL_PSMC4DC6 : bit absolute PSMC4DCL.6; + PSMC4DCL_PSMC4DC5 : bit absolute PSMC4DCL.5; + PSMC4DCL_PSMC4DC4 : bit absolute PSMC4DCL.4; + PSMC4DCL_PSMC4DC3 : bit absolute PSMC4DCL.3; + PSMC4DCL_PSMC4DC2 : bit absolute PSMC4DCL.2; + PSMC4DCL_PSMC4DC1 : bit absolute PSMC4DCL.1; + PSMC4DCL_PSMC4DC0 : bit absolute PSMC4DCL.0; + PSMC4DCH : byte absolute $0F24; + PSMC4DCH_PSMC4DC15 : bit absolute PSMC4DCH.7; + PSMC4DCH_PSMC4DC14 : bit absolute PSMC4DCH.6; + PSMC4DCH_PSMC4DC13 : bit absolute PSMC4DCH.5; + PSMC4DCH_PSMC4DC12 : bit absolute PSMC4DCH.4; + PSMC4DCH_PSMC4DC11 : bit absolute PSMC4DCH.3; + PSMC4DCH_PSMC4DC10 : bit absolute PSMC4DCH.2; + PSMC4DCH_PSMC4DC9 : bit absolute PSMC4DCH.1; + PSMC4DCH_PSMC4DC8 : bit absolute PSMC4DCH.0; + PSMC4PRL : byte absolute $0F25; + PSMC4PRL_PSMC4PR7 : bit absolute PSMC4PRL.7; + PSMC4PRL_PSMC4PR6 : bit absolute PSMC4PRL.6; + PSMC4PRL_PSMC4PR5 : bit absolute PSMC4PRL.5; + PSMC4PRL_PSMC4PR4 : bit absolute PSMC4PRL.4; + PSMC4PRL_PSMC4PR3 : bit absolute PSMC4PRL.3; + PSMC4PRL_PSMC4PR2 : bit absolute PSMC4PRL.2; + PSMC4PRL_PSMC4PR1 : bit absolute PSMC4PRL.1; + PSMC4PRL_PSMC4PR0 : bit absolute PSMC4PRL.0; + PSMC4PRH : byte absolute $0F26; + PSMC4PRH_PSMC4PR15 : bit absolute PSMC4PRH.7; + PSMC4PRH_PSMC4PR14 : bit absolute PSMC4PRH.6; + PSMC4PRH_PSMC4PR13 : bit absolute PSMC4PRH.5; + PSMC4PRH_PSMC4PR12 : bit absolute PSMC4PRH.4; + PSMC4PRH_PSMC4PR11 : bit absolute PSMC4PRH.3; + PSMC4PRH_PSMC4PR10 : bit absolute PSMC4PRH.2; + PSMC4PRH_PSMC4PR9 : bit absolute PSMC4PRH.1; + PSMC4PRH_PSMC4PR8 : bit absolute PSMC4PRH.0; + PSMC4TMRL : byte absolute $0F27; + PSMC4TMRL_PSMC4TMR7 : bit absolute PSMC4TMRL.7; + PSMC4TMRL_PSMC4TMR6 : bit absolute PSMC4TMRL.6; + PSMC4TMRL_PSMC4TMR5 : bit absolute PSMC4TMRL.5; + PSMC4TMRL_PSMC4TMR4 : bit absolute PSMC4TMRL.4; + PSMC4TMRL_PSMC4TMR3 : bit absolute PSMC4TMRL.3; + PSMC4TMRL_PSMC4TMR2 : bit absolute PSMC4TMRL.2; + PSMC4TMRL_PSMC4TMR1 : bit absolute PSMC4TMRL.1; + PSMC4TMRL_PSMC4TMR0 : bit absolute PSMC4TMRL.0; + PSMC4TMRH : byte absolute $0F28; + PSMC4TMRH_PSMC4TMR15 : bit absolute PSMC4TMRH.7; + PSMC4TMRH_PSMC4TMR14 : bit absolute PSMC4TMRH.6; + PSMC4TMRH_PSMC4TMR13 : bit absolute PSMC4TMRH.5; + PSMC4TMRH_PSMC4TMR12 : bit absolute PSMC4TMRH.4; + PSMC4TMRH_PSMC4TMR11 : bit absolute PSMC4TMRH.3; + PSMC4TMRH_PSMC4TMR10 : bit absolute PSMC4TMRH.2; + PSMC4TMRH_PSMC4TMR9 : bit absolute PSMC4TMRH.1; + PSMC4TMRH_PSMC4TMR8 : bit absolute PSMC4TMRH.0; + PSMC4DBR : byte absolute $0F29; + PSMC4DBR_PSMC4DBR7 : bit absolute PSMC4DBR.7; + PSMC4DBR_PSMC4DBR6 : bit absolute PSMC4DBR.6; + PSMC4DBR_PSMC4DBR5 : bit absolute PSMC4DBR.5; + PSMC4DBR_PSMC4DBR4 : bit absolute PSMC4DBR.4; + PSMC4DBR_PSMC4DBR3 : bit absolute PSMC4DBR.3; + PSMC4DBR_PSMC4DBR2 : bit absolute PSMC4DBR.2; + PSMC4DBR_PSMC4DBR1 : bit absolute PSMC4DBR.1; + PSMC4DBR_PSMC4DBR0 : bit absolute PSMC4DBR.0; + PSMC4DBF : byte absolute $0F2A; + PSMC4DBF_PSMC4DBF7 : bit absolute PSMC4DBF.7; + PSMC4DBF_PSMC4DBF6 : bit absolute PSMC4DBF.6; + PSMC4DBF_PSMC4DBF5 : bit absolute PSMC4DBF.5; + PSMC4DBF_PSMC4DBF4 : bit absolute PSMC4DBF.4; + PSMC4DBF_PSMC4DBF3 : bit absolute PSMC4DBF.3; + PSMC4DBF_PSMC4DBF2 : bit absolute PSMC4DBF.2; + PSMC4DBF_PSMC4DBF1 : bit absolute PSMC4DBF.1; + PSMC4DBF_PSMC4DBF0 : bit absolute PSMC4DBF.0; + PSMC4BLKR : byte absolute $0F2B; + PSMC4BLKR_PSMC4BLKR7 : bit absolute PSMC4BLKR.7; + PSMC4BLKR_PSMC4BLKR6 : bit absolute PSMC4BLKR.6; + PSMC4BLKR_PSMC4BLKR5 : bit absolute PSMC4BLKR.5; + PSMC4BLKR_PSMC4BLKR4 : bit absolute PSMC4BLKR.4; + PSMC4BLKR_PSMC4BLKR3 : bit absolute PSMC4BLKR.3; + PSMC4BLKR_PSMC4BLKR2 : bit absolute PSMC4BLKR.2; + PSMC4BLKR_PSMC4BLKR1 : bit absolute PSMC4BLKR.1; + PSMC4BLKR_PSMC4BLKR0 : bit absolute PSMC4BLKR.0; + PSMC4BLKF : byte absolute $0F2C; + PSMC4BLKF_PSMC4BLKF7 : bit absolute PSMC4BLKF.7; + PSMC4BLKF_PSMC4BLKF6 : bit absolute PSMC4BLKF.6; + PSMC4BLKF_PSMC4BLKF5 : bit absolute PSMC4BLKF.5; + PSMC4BLKF_PSMC4BLKF4 : bit absolute PSMC4BLKF.4; + PSMC4BLKF_PSMC4BLKF3 : bit absolute PSMC4BLKF.3; + PSMC4BLKF_PSMC4BLKF2 : bit absolute PSMC4BLKF.2; + PSMC4BLKF_PSMC4BLKF1 : bit absolute PSMC4BLKF.1; + PSMC4BLKF_PSMC4BLKF0 : bit absolute PSMC4BLKF.0; + PSMC4FFA : byte absolute $0F2D; + PSMC4FFA_PSMC4FFA3 : bit absolute PSMC4FFA.3; + PSMC4FFA_PSMC4FFA2 : bit absolute PSMC4FFA.2; + PSMC4FFA_PSMC4FFA1 : bit absolute PSMC4FFA.1; + PSMC4FFA_PSMC4FFA0 : bit absolute PSMC4FFA.0; + PSMC4STR0 : byte absolute $0F2E; + PSMC4STR0_P4STRB : bit absolute PSMC4STR0.1; + PSMC4STR0_P4STRA : bit absolute PSMC4STR0.0; + PSMC4STR1 : byte absolute $0F2F; + PSMC4STR1_P4SSYNC : bit absolute PSMC4STR1.7; + PSMC4STR1_P4LSMEN : bit absolute PSMC4STR1.1; + PSMC4STR1_P4HSMEN : bit absolute PSMC4STR1.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1, ADCON2 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DAC1CON0, DAC1CON1, CM4CON0, CM4CON1, APFCON2, APFCON1, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-197:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC, ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2, VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-217:SFR'} // Bank 4 : WPUA, WPUB, WPUC, WPUD, WPUE, SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-293:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC, ODCOND, ODCONE, CCPR1L, CCPR1H, CCP1CON + {$SET_STATE_RAM '298-29A:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-313:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC, SLRCOND, SLRCONE, CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-399:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC, INLVLD, INLVLE, IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '39D-39F:SFR'} // Bank 7 : IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '511-511:SFR'} // Bank 10 : OPA1CON + {$SET_STATE_RAM '513-513:SFR'} // Bank 10 : OPA2CON + {$SET_STATE_RAM '515-515:SFR'} // Bank 10 : OPA3CON + {$SET_STATE_RAM '51A-51A:SFR'} // Bank 10 : CLKRCON + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '591-596:SFR'} // Bank 11 : DAC2CON0, DAC2REF, DAC3CON0, DAC3REF, DAC4CON0, DAC4REF + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E91-EAF:SFR'} // Bank 29 : PSMC1CON, PSMC1MDL, PSMC1SYNC, PSMC1CLK, PSMC1OEN, PSMC1POL, PSMC1BLNK, PSMC1REBS, PSMC1FEBS, PSMC1PHS, PSMC1DCS, PSMC1PRS, PSMC1ASDC, PSMC1ASDL, PSMC1ASDS, PSMC1INT, PSMC1PHL, PSMC1PHH, PSMC1DCL, PSMC1DCH, PSMC1PRL, PSMC1PRH, PSMC1TMRL, PSMC1TMRH, PSMC1DBR, PSMC1DBF, PSMC1BLKR, PSMC1BLKF, PSMC1FFA, PSMC1STR0, PSMC1STR1 + {$SET_STATE_RAM 'EB1-ECF:SFR'} // Bank 29 : PSMC2CON, PSMC2MDL, PSMC2SYNC, PSMC2CLK, PSMC2OEN, PSMC2POL, PSMC2BLNK, PSMC2REBS, PSMC2FEBS, PSMC2PHS, PSMC2DCS, PSMC2PRS, PSMC2ASDC, PSMC2ASDL, PSMC2ASDS, PSMC2INT, PSMC2PHL, PSMC2PHH, PSMC2DCL, PSMC2DCH, PSMC2PRL, PSMC2PRH, PSMC2TMRL, PSMC2TMRH, PSMC2DBR, PSMC2DBF, PSMC2BLKR, PSMC2BLKF, PSMC2FFA, PSMC2STR0, PSMC2STR1 + {$SET_STATE_RAM 'ED1-EEF:SFR'} // Bank 29 : PSMC3CON, PSMC3MDL, PSMC3SYNC, PSMC3CLK, PSMC3OEN, PSMC3POL, PSMC3BLNK, PSMC3REBS, PSMC3FEBS, PSMC3PHS, PSMC3DCS, PSMC3PRS, PSMC3ASDC, PSMC3ASDL, PSMC3ASDS, PSMC3INT, PSMC3PHL, PSMC3PHH, PSMC3DCL, PSMC3DCH, PSMC3PRL, PSMC3PRH, PSMC3TMRL, PSMC3TMRH, PSMC3DBR, PSMC3DBF, PSMC3BLKR, PSMC3BLKF, PSMC3FFA, PSMC3STR0, PSMC3STR1 + {$SET_STATE_RAM 'F11-F2F:SFR'} // Bank 30 : PSMC4CON, PSMC4MDL, PSMC4SYNC, PSMC4CLK, PSMC4OEN, PSMC4POL, PSMC4BLNK, PSMC4REBS, PSMC4FEBS, PSMC4PHS, PSMC4DCS, PSMC4PRS, PSMC4ASDC, PSMC4ASDL, PSMC4ASDS, PSMC4INT, PSMC4PHL, PSMC4PHH, PSMC4DCL, PSMC4DCH, PSMC4PRL, PSMC4PRH, PSMC4TMRL, PSMC4TMRH, PSMC4DBR, PSMC4DBF, PSMC4BLKR, PSMC4BLKF, PSMC4FFA, PSMC4STR0, PSMC4STR1 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:10'} // PIR3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:10'} // PIE3 bits 7,6,5,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:DF'} // PCON bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:0F'} // CMOUT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:C1'} // BORCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11C:07'} // APFCON2 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:BF'} // ANSELA bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:7F'} // ANSELB bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18F:07'} // ANSELD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:3F'} // CCP1CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '29A:3F'} // CCP2CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '310:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '511:C7'} // OPA1CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '513:C7'} // OPA2CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '515:C7'} // OPA3CON bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:BC'} // DAC2CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:1F'} // DAC2REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:BC'} // DAC3CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '594:1F'} // DAC3REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '595:BC'} // DAC4CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '596:1F'} // DAC4REF bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:EF'} // PSMC1MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:E7'} // PSMC1SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:33'} // PSMC1CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:3F'} // PSMC1OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:7F'} // PSMC1POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:33'} // PSMC1BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E98:9E'} // PSMC1REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E99:9E'} // PSMC1FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9A:9F'} // PSMC1PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9B:9F'} // PSMC1DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:9F'} // PSMC1PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:E1'} // PSMC1ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:3F'} // PSMC1ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:9E'} // PSMC1ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAD:0F'} // PSMC1FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAE:3F'} // PSMC1STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAF:83'} // PSMC1STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:EF'} // PSMC2MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:E7'} // PSMC2SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB4:33'} // PSMC2CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB5:03'} // PSMC2OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB6:43'} // PSMC2POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB7:33'} // PSMC2BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:9E'} // PSMC2REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:9E'} // PSMC2FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:9F'} // PSMC2PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:9F'} // PSMC2DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:9F'} // PSMC2PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:E1'} // PSMC2ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:03'} // PSMC2ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBF:9E'} // PSMC2ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECD:0F'} // PSMC2FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECE:03'} // PSMC2STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECF:83'} // PSMC2STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED2:EF'} // PSMC3MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED3:E7'} // PSMC3SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED4:33'} // PSMC3CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED5:3F'} // PSMC3OEN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED6:7F'} // PSMC3POL bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED7:33'} // PSMC3BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED8:9E'} // PSMC3REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ED9:9E'} // PSMC3FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDA:9F'} // PSMC3PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDB:9F'} // PSMC3DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDC:9F'} // PSMC3PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDD:E1'} // PSMC3ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDE:3F'} // PSMC3ASDL bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EDF:9E'} // PSMC3ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EED:0F'} // PSMC3FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EEE:3F'} // PSMC3STR0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EEF:83'} // PSMC3STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:EF'} // PSMC4MDL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:E7'} // PSMC4SYNC bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:33'} // PSMC4CLK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:03'} // PSMC4OEN bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:43'} // PSMC4POL bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:33'} // PSMC4BLNK bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:9E'} // PSMC4REBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:9E'} // PSMC4FEBS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:9F'} // PSMC4PHS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:9F'} // PSMC4DCS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:9F'} // PSMC4PRS bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:E1'} // PSMC4ASDC bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:03'} // PSMC4ASDL bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:9E'} // PSMC4ASDS bits 6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2D:0F'} // PSMC4FFA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:03'} // PSMC4STR0 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:83'} // PSMC4STR1 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C1IN0-/C2IN0-/C3IN0-/C4IN0-/SS + // Pin 3 : RA1/AN1/C1IN1-/C2IN1-/C3IN1-/C4IN1-/OPA1OUT + // Pin 4 : RA2/AN2/C1IN0+/C2IN0+/C3IN0+/C4IN0+/DAC1OUT1/Vref-/DAC1Vref- + // Pin 5 : RA3/AN3/Vref+/C1IN1+/DAC1Vref+/DAC2Vref+/DAC3Vref+/DAC4Vref+ + // Pin 6 : RA4/C1OUT/OPA1IN+/T0CKI + // Pin 7 : RA5/AN4/C2OUT/OPA1IN-/SS/DAC2OUT1 + // Pin 8 : RE0/AN5/CCP3/PSMC4B + // Pin 9 : RE1/AN6/PSMC3B + // Pin 10 : RE2/AN7/PSMC3A + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/Vref+/PSMC1CLK/PSMC2CLK/PSMC3CLK/PSMC4CLK/OSC1/CLKIN + // Pin 14 : RA6/C2OUT/OSC2/CLKOUT/VCAP + // Pin 15 : RC0/SOSCO/T1CKI/PSMC1A + // Pin 16 : RC1/SOSCI/PSMC1B/CCP2 + // Pin 17 : RC2/PSMC1C/CCP1 + // Pin 18 : RC3/PSMC1D/SCK/SCL + // Pin 19 : RD0/OPA3IN+ + // Pin 20 : RD1/AN21/C1IN4-/C2IN4-/C3IN4-/C4IN4-/OPA3OUT + // Pin 21 : RD2/OPA3IN-/DAC4OUT1 + // Pin 22 : RD3/PSMC4A + // Pin 23 : RC4/PSMC1E/SDI/SDA + // Pin 24 : RC5/PSMC1F/SDO + // Pin 25 : RC6/PSMC2A/TX/CK + // Pin 26 : RC7/PSMC2B/RX/DT + // Pin 27 : RD4/PSMC3F + // Pin 28 : RD5/PSMC3E + // Pin 29 : RD6/PSMC3D/C3OUT + // Pin 30 : RD7/PSMC3C/C4OUT + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/C2IN1+/PSMC1IN/PSMC2IN/PSMC3IN/PSMC4IN/CCP1/INT + // Pin 34 : RB1/AN10/C1IN3-/C2IN3-/C3IN3-/C4IN3-/OPA2OUT + // Pin 35 : RB2/AN8/OPA2IN-/CLKR/DAC3OUT1 + // Pin 36 : RB3/AN9/C1IN2-/C2IN2-/C3IN2-/OPA2IN+/CCP2 + // Pin 37 : RB4/AN11/C3IN1+/SS + // Pin 38 : RB5/AN13/T1G/SDO/CCP3/C4IN2- + // Pin 39 : RB6/TX/CK/SDI/SDA/C4IN1+/ICSPCLK/ICDCLK + // Pin 40 : RB7/DAC1OUT2/DAC2OUT2/DAC3OUT2/DAC4OUT2/RX/DT/SCK/SCL/ICSPDAT/ICDDAT + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable bit + {$define _VCAPEN_OFF = $3FFF} // Vcap functionality is disabled on RA6. + {$define _VCAPEN_ON = $3FDF} // Vcap functionality is enabled on RA6 (Vddcore is connected to the pad) + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LPBOR : Low Power Brown-Out Reset Enable Bit + {$define _LPBOR_OFF = $3FFF} // Low power brown-out is disabled + {$define _LPBOR_ON = $37FF} // Low power brown-out is enabled + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1823.pas b/devices17/PIC16F1823.pas new file mode 100644 index 00000000..36f848f1 --- /dev/null +++ b/devices17/PIC16F1823.pas @@ -0,0 +1,756 @@ +unit PIC16F1823; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1823'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_RXDTSEL : bit absolute APFCON.7; + APFCON_SDOSEL : bit absolute APFCON.6; + APFCON_SSSEL : bit absolute APFCON.5; + APFCON_T1GSEL : bit absolute APFCON.3; + APFCON_TXCKSEL : bit absolute APFCON.2; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0BF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F8'} // PIR2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:07'} // CPSCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F8'} // PIE2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F3'} // ADCON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EC'} // APFCON bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI + // Pin 3 : SDO/RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/CLKR/T1G + // Pin 4 : RA3/SS/T1G/VPP/MCLR + // Pin 5 : RC5/P1A/CCP1/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P1C/SS/MDMIN + // Pin 8 : RC2/AN6/CPS6/C12IN2-/P1D/SDO/MDCIN1 + // Pin 9 : RC1/AN5/CPS5/C12IN1-/SDA/SDI + // Pin 10 : RC0/AN4/CPS4/C2IN+/SCL/SCK + // Pin 11 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/FLT0 + // Pin 12 : RA1/AN1/CPS1/C12IN0-/VREF/SRI/RX/DT/ICSPCLK + // Pin 13 : RA0/AN0/CPS0/C1IN+/DACOUT/TX/CK/ICSPDAT/ICDDAT + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1824.pas b/devices17/PIC16F1824.pas new file mode 100644 index 00000000..87614ac9 --- /dev/null +++ b/devices17/PIC16F1824.pas @@ -0,0 +1,889 @@ +unit PIC16F1824; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1824'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_SDOSEL : bit absolute APFCON0.6; + APFCON0_SSSEL : bit absolute APFCON0.5; + APFCON0_T1GSEL : bit absolute APFCON0.3; + APFCON0_TXCKSEL : bit absolute APFCON0.2; + APFCON1 : byte absolute $011E; + APFCON1_P1DSEL : bit absolute APFCON1.3; + APFCON1_P1CSEL : bit absolute APFCON1.2; + APFCON1_P2BSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON : byte absolute $0215; + SSP1CON_WCOL : bit absolute SSP1CON.7; + SSP1CON_SSPOV : bit absolute SSP1CON.6; + SSP1CON_SSPEN : bit absolute SSP1CON.5; + SSP1CON_CKP : bit absolute SSP1CON.4; + SSP1CON_SSPM3 : bit absolute SSP1CON.3; + SSP1CON_SSPM2 : bit absolute SSP1CON.2; + SSP1CON_SSPM1 : bit absolute SSP1CON.1; + SSP1CON_SSPM0 : bit absolute SSP1CON.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0 + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EC'} // APFCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:0F'} // APFCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/P2A/CCP2 + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/CLKR/SDO/P2B/T1G + // Pin 4 : RA3/SS/T1G/Vpp/MCLR + // Pin 5 : RC5/P1A/CCP1/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P2A/CCP2/P1C/SS/MDMIN + // Pin 8 : RC2/AN6/CPS6/C12IN2-/P1D/P2B/SDO/MDCIN1 + // Pin 9 : RC1/AN5/CPS5/C12IN1-/SDA/SDI/P1C/CCP4 + // Pin 10 : RC0/AN4/CPS4/C2IN+/SCL/SCK/P1D + // Pin 11 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0 + // Pin 12 : RA1/AN1/CPS1/C12IN0-/Vref+/SRI/RX/DT/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/CPS0/C1IN+/Vref-/DACOUT/TX/CK/ICSPDAT/ICDDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1825.pas b/devices17/PIC16F1825.pas new file mode 100644 index 00000000..fc16c207 --- /dev/null +++ b/devices17/PIC16F1825.pas @@ -0,0 +1,898 @@ +unit PIC16F1825; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1825'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_SDOSEL : bit absolute APFCON0.6; + APFCON0_SSSEL : bit absolute APFCON0.5; + APFCON0_T1GSEL : bit absolute APFCON0.3; + APFCON0_TXCKSEL : bit absolute APFCON0.2; + APFCON1 : byte absolute $011E; + APFCON1_P1DSEL : bit absolute APFCON1.3; + APFCON1_P1CSEL : bit absolute APFCON1.2; + APFCON1_P2BSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11B:DD'} // SRCON1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:EC'} // APFCON0 bits 4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:0F'} // APFCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:0F'} // ANSELC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/P2A/CCP2 + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/CLKR/SDO/P2B/T1G + // Pin 4 : RA3/SS1/T1G/Vpp/MCLR + // Pin 5 : RC5/P1A/CCP1/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P2A/CCP2/P1C/SS1/MDMIN + // Pin 8 : RC2/AN6/CPS6/C12IN2-/P1D/P2B/SDO/MDCIN1 + // Pin 9 : RC1/AN5/CPS5/C12IN1-/SDA/SDI/P1C/CCP4 + // Pin 10 : RC0/AN4/CPS4/C2IN+/SCL/SCK/P1D + // Pin 11 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0 + // Pin 12 : RA1/AN1/CPS1/C12IN0-/Vref+/SRI/RX/DT/ICSPCLK/ICDCLK + // Pin 13 : RA0/AN0/CPS0/C1IN+/Vref-/DACOUT/TX/CK/ICSPDAT/ICDDAT + // Pin 14 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1826.pas b/devices17/PIC16F1826.pas new file mode 100644 index 00000000..b9755f4a --- /dev/null +++ b/devices17/PIC16F1826.pas @@ -0,0 +1,771 @@ +unit PIC16F1826; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1826'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 18} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_SDO1SEL : bit absolute APFCON0.6; + APFCON0_SS1SEL : bit absolute APFCON0.5; + APFCON0_P1DSEL : bit absolute APFCON0.2; + APFCON0_P1CSEL : bit absolute APFCON0.1; + APFCON0_CCP1SEL : bit absolute APFCON0.0; + APFCON1 : byte absolute $011E; + APFCON1_TXCKSEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR'} // Bank 0 : PORTA, PORTB + {$SET_STATE_RAM '011-012:SFR'} // Bank 0 : PIR1, PIR2 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08D:SFR'} // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '091-092:SFR'} // Bank 1 : PIE1, PIE2 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10D:SFR'} // Bank 2 : LATA, LATB + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F8'} // PIR2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F8'} // PIE2 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:E7'} // APFCON0 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:01'} // APFCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:1F'} // ANSELA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:FE'} // ANSELB bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:20'} // WPUA bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RA2/AN2/CPS2/C12IN2-/C12IN+/Vref-/DACOUT + // Pin 2 : RA3/AN3/CPS3/C12IN3-/C1IN+/Vref+/C1OUT/SRQ + // Pin 3 : RA4/AN4/CPS4/C2OUT/T0CKI/SRNQ + // Pin 4 : RA5/MCLR/Vpp/SS1 + // Pin 5 : Vss + // Pin 6 : RB0/SRI/T1G/CCP1/P1A/INT/FLT0 + // Pin 7 : RB1/AN11/CPS11/RX/DT/SDA1/SDI1 + // Pin 8 : RB2/AN10/CPS10/MDMIN/TX/CK/RX/DT/SDO1 + // Pin 9 : RB3/AN9/CPS9/MDOUT/CCP1/P1A + // Pin 10 : RB4/AN8/CPS8/SCL1/SCK1/MDCIN2 + // Pin 11 : RB5/AN7/CPS7/P1B/TX/CK/SS1 + // Pin 12 : RB6/AN5/CPS5/T1CKI/T1OSI/P1C/ICSPCLK/ICDCLK + // Pin 13 : RB7/AN6/CPS6/T1OSO/P1D/MDCIN1/ICSPDAT/ICDDAT + // Pin 14 : Vdd + // Pin 15 : RA6/OSC2/CLKOUT/CLKR/P1D/SDO1 + // Pin 16 : RA7/OSC1/CLKIN/P1C + // Pin 17 : RA0/AN0/CPS0/C12IN0- + // Pin 18 : RA1/AN1/CPS1/C12IN1- + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-17,1-18,2-1,3-2,4-3,5-4,6-15,7-16'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 7FFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 3FFh write protected, 400h to 7FFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 7FFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1827.pas b/devices17/PIC16F1827.pas new file mode 100644 index 00000000..a5320f7a --- /dev/null +++ b/devices17/PIC16F1827.pas @@ -0,0 +1,894 @@ +unit PIC16F1827; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1827'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 18} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_SDO1SEL : bit absolute APFCON0.6; + APFCON0_SS1SEL : bit absolute APFCON0.5; + APFCON0_P2BSEL : bit absolute APFCON0.4; + APFCON0_CCP2SEL : bit absolute APFCON0.3; + APFCON0_P1DSEL : bit absolute APFCON0.2; + APFCON0_P1CSEL : bit absolute APFCON0.1; + APFCON0_CCP1SEL : bit absolute APFCON0.0; + APFCON1 : byte absolute $011E; + APFCON1_TXCKSEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR'} // Bank 0 : PORTA, PORTB + {$SET_STATE_RAM '011-01C:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08D:SFR'} // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '091-09E:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10D:SFR'} // Bank 2 : LATA, LATB + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-24F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:01'} // APFCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:1F'} // ANSELA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:FE'} // ANSELB bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:20'} // WPUA bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RA2/AN2/CPS2/C12IN2-/C12IN+/Vref-/DACOUT + // Pin 2 : RA3/AN3/CPS3/C12IN3-/C1IN+/Vref+/C1OUT/CCP3/SRQ + // Pin 3 : RA4/AN4/CPS4/C2OUT/T0CKI/CCP4/SRNQ + // Pin 4 : RA5/MCLR/Vpp/SS1 + // Pin 5 : Vss + // Pin 6 : RB0/SRI/T1G/CCP1/P1A/INT/FLT0 + // Pin 7 : RB1/AN11/CPS11/RX/DT/SDA1/SDI1 + // Pin 8 : RB2/AN10/CPS10/MDMIN/TX/CK/RX/DT/SDA2/SDI2/SDO1 + // Pin 9 : RB3/AN9/CPS9/MDOUT/CCP1/P1A + // Pin 10 : RB4/AN8/CPS8/SCL1/SCK1/MDCIN2 + // Pin 11 : RB5/AN7/CPS7/P1B/TX/CK/SCL2/SCK2/SS1 + // Pin 12 : RB6/AN5/CPS5/T1CKI/T1OSI/P1C/CCP2/P2A/ICSPCLK/ICDCLK + // Pin 13 : RB7/AN6/CPS6/T1OSO/P1D/P2B/MDCIN1/ICSPDAT/ICDDAT + // Pin 14 : Vdd + // Pin 15 : RA6/OSC2/CLKOUT/CLKR/P1D/P2B/SDO1 + // Pin 16 : RA7/OSC1/CLKIN/P1C/CCP2/P2A + // Pin 17 : RA0/AN0/CPS0/C12IN0-/SDO2 + // Pin 18 : RA1/AN1/CPS1/C12IN1-/SS2 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-17,1-18,2-1,3-2,4-3,5-4,6-15,7-16'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1828.pas b/devices17/PIC16F1828.pas new file mode 100644 index 00000000..d9cc0d1a --- /dev/null +++ b/devices17/PIC16F1828.pas @@ -0,0 +1,947 @@ +unit PIC16F1828; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1828'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_T1GSEL : bit absolute APFCON0.3; + APFCON0_TXCKSEL : bit absolute APFCON0.2; + APFCON1 : byte absolute $011E; + APFCON1_P1DSEL : bit absolute APFCON1.3; + APFCON1_P1CSEL : bit absolute APFCON1.2; + APFCON1_P2BSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON : byte absolute $0215; + SSP1CON_WCOL : bit absolute SSP1CON.7; + SSP1CON_SSPOV : bit absolute SSP1CON.6; + SSP1CON_SSPEN : bit absolute SSP1CON.5; + SSP1CON_CKP : bit absolute SSP1CON.4; + SSP1CON_SSPM3 : bit absolute SSP1CON.3; + SSP1CON_SSPM2 : bit absolute SSP1CON.2; + SSP1CON_SSPM1 : bit absolute SSP1CON.1; + SSP1CON_SSPM0 : bit absolute SSP1CON.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-013:SFR'} // Bank 0 : PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-093:SFR'} // Bank 1 : PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0 + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:8C'} // APFCON0 bits 6,5,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:3F'} // APFCON1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/P2A/CCP2 + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/CLKR/SDO/P2B/T1G + // Pin 4 : RA3/T1G/Vpp/MCLR + // Pin 5 : RC5/CCP1/P1A/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P1C/CCP2/P2A/MDMIN + // Pin 8 : RC6/AN8/CPS8/CCP4/SS + // Pin 9 : RC7/AN9/CPS9/SDO + // Pin 10 : RB7/CK/TX + // Pin 11 : RB6/SCL1/SCK1 + // Pin 12 : RB5/AN11/CPS11/RX/DT + // Pin 13 : RB4/AN10/CPS10/SDA1/SDI1 + // Pin 14 : RC2/AN6/CPS6/C12IN2-/P1D/P2B/MDCIN1 + // Pin 15 : RC1/AN5/CPS5/C12IN1-/P1C + // Pin 16 : RC0/AN4/CPS4/C2IN+/P1D + // Pin 17 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0 + // Pin 18 : RA1/AN1/CPS1/C12IN0-/Vref+/SRI/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/CPS0/C1IN+/Vref-/DACOUT/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1829.pas b/devices17/PIC16F1829.pas new file mode 100644 index 00000000..55b5415d --- /dev/null +++ b/devices17/PIC16F1829.pas @@ -0,0 +1,973 @@ +unit PIC16F1829; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1829'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_T1GSEL : bit absolute APFCON0.3; + APFCON0_TXCKSEL : bit absolute APFCON0.2; + APFCON1 : byte absolute $011E; + APFCON1_SDO2SEL : bit absolute APFCON1.5; + APFCON1_SS2SEL : bit absolute APFCON1.4; + APFCON1_P1DSEL : bit absolute APFCON1.3; + APFCON1_P1CSEL : bit absolute APFCON1.2; + APFCON1_P2BSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSELB1 : bit absolute ANSELB.5; + ANSELB_ANSELB0 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-01C:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-09E:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:8C'} // APFCON0 bits 6,5,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:3F'} // APFCON1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:30'} // ANSELB bits 7,6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/SDO2/T1CKI/P2A/CCP2 + // Pin 3 : RA4/AN3/CPS3/OSC2/CLKOUT/T1OSO/CLKR/SS2/P2B/T1G + // Pin 4 : RA3/T1G/Vpp/MCLR + // Pin 5 : RC5/CCP1/P1A/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P1C/CCP2/P2A/MDMIN + // Pin 8 : RC6/AN8/CPS8/CCP4/SS1 + // Pin 9 : RC7/AN9/CPS9/SDO + // Pin 10 : RB7/CK/TX/SCK2/SCL2 + // Pin 11 : RB6/SCL1/SCK1 + // Pin 12 : RB5/AN11/CPS11/RX/DT/SDA2/SDI2 + // Pin 13 : RB4/AN10/CPS10/SDA1/SDI1 + // Pin 14 : RC2/AN6/CPS6/C12IN2-/P1D/P2B/MDCIN1 + // Pin 15 : RC1/AN5/CPS5/C12IN1-/P1C/SDO2 + // Pin 16 : RC0/AN4/CPS4/C2IN+/P1D/SS2 + // Pin 17 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0 + // Pin 18 : RA1/AN1/CPS1/C12IN0-/Vref+/SRI/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/CPS0/C1IN+/Vref-/DACOUT/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1829LIN.pas b/devices17/PIC16F1829LIN.pas new file mode 100644 index 00000000..51168334 --- /dev/null +++ b/devices17/PIC16F1829LIN.pas @@ -0,0 +1,973 @@ +unit PIC16F1829LIN; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1829LIN'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_T1GSEL : bit absolute APFCON0.3; + APFCON0_TXCKSEL : bit absolute APFCON0.2; + APFCON1 : byte absolute $011E; + APFCON1_P1DSEL : bit absolute APFCON1.3; + APFCON1_P1CSEL : bit absolute APFCON1.2; + APFCON1_P2BSEL : bit absolute APFCON1.1; + APFCON1_CCP2SEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SPBRGL : byte absolute $019B; + SPBRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '011-01C:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '091-09E:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SPBRGL, SPBRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-396:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:8C'} // APFCON0 bits 6,5,4,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:0F'} // APFCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:17'} // ANSELA bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:CF'} // ANSELC bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : Vdd + // Pin 2 : RA5/CLKIN/OSC1/T1OSI/T1CKI/P2A/CCP2 + // Pin 3 : RA4/AN3/T1G/CPS3/OSC2/CLKOUT/T1OSO/CLKR/P2B + // Pin 4 : RA3/T1G/Vpp/MCLR + // Pin 5 : RC5/CCP1/P1A/DT/RX/MDCIN2 + // Pin 6 : RC4/C2OUT/SRNQ/P1B/CK/TX/MDOUT + // Pin 7 : RC3/AN7/CPS7/C12IN3-/P1C/CCP2/P2A/MDMIN + // Pin 8 : RC6/AN8/CPS8/CCP4/SS1 + // Pin 9 : RC7/AN9/CPS9/SDO + // Pin 10 : RB7/CK/TX/SCK2/SCL2 + // Pin 11 : RB6/SCL1/SCK1 + // Pin 12 : RB5/AN11/CPS11/RX/DT/SDA2/SDI2 + // Pin 13 : RB4/AN10/CPS10/SDA1/SDI1 + // Pin 14 : RC2/AN6/CPS6/C12IN2-/P1D/P2B/MDCIN1 + // Pin 15 : RC1/AN5/CPS5/C12IN1-/P1C + // Pin 16 : RC0/AN4/CPS4/C2IN+/P1D + // Pin 17 : RA2/AN2/CPS2/T0CKI/INT/C1OUT/SRQ/CCP3/FLT0 + // Pin 18 : RA1/AN1/CPS1/C12IN0-/Vref+/SRI/ICSPCLK/ICDCLK + // Pin 19 : RA0/AN0/CPS0/C1IN+/Vref-/DACOUT/ICSPDAT/ICDDAT + // Pin 20 : Vss + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F18313.pas b/devices17/PIC16F18313.pas new file mode 100644 index 00000000..7e8bd3ce --- /dev/null +++ b/devices17/PIC16F18313.pas @@ -0,0 +1,1289 @@ +unit PIC16F18313; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18313'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 8} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + NVMADRL : byte absolute $0891; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '111-112:SFR'} // Bank 2 : CM1CON0, CM1CON1 + {$SET_STATE_RAM '115-119:SFR'} // Bank 2 : CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E18-E18:SFR'} // Bank 28 : CWG1PPS + {$SET_STATE_RAM 'E1A-E1C:SFR'} // Bank 28 : MDCIN1PPS, MDCIN2PPS, MDMINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'F0F-F23:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:07'} // PCLATH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:31'} // PIR2 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:C3'} // PIR3 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:43'} // PIR4 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:31'} // PIE2 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:C3'} // PIE3 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:43'} // PIE4 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:0F'} // ADACT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:01'} // CMOUT bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:0B'} // CWG1AS1 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:62'} // PMD2 bits 7,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:73'} // PMD3 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:22'} // PMD4 bits 7,6,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:07'} // PMD5 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/C1IN1-/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : DAC1REF-/VREF-/ANA2/SMB_I2C/IOCA2/RA2 + // Pin 6 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/SMB_I2C/IOCA1/RA1 + // Pin 7 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 8 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-7,1-6,2-5,3-4,4-3,5-2'} // PORTA + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled while in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 07FFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 03FFh write-protected, 0400h to 07FFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 07FFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // HV on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18323.pas b/devices17/PIC16F18323.pas new file mode 100644 index 00000000..eb06408b --- /dev/null +++ b/devices17/PIC16F18323.pas @@ -0,0 +1,1456 @@ +unit PIC16F18323; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18323'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 2048} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + NVMADRL : byte absolute $0891; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-39A:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E15:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS + {$SET_STATE_RAM 'E18-E18:SFR'} // Bank 28 : CWG1PPS + {$SET_STATE_RAM 'E1A-E1C:SFR'} // Bank 28 : MDCIN1PPS, MDCIN2PPS, MDMINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2B:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F23:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:07'} // PCLATH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:71'} // PIR2 bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:C3'} // PIR3 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:43'} // PIR4 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:71'} // PIE2 bits 7,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:C3'} // PIE3 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:43'} // PIE4 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:0F'} // ADACT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:0F'} // CWG1AS1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '912:87'} // PMD1 bits 6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '914:73'} // PMD3 bits 7,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:22'} // PMD4 bits 7,6,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:07'} // PMD5 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:03'} // CLCDATA bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:1F'} // CLC1SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:1F'} // CLC1SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:1F'} // CLC1SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:1F'} // CLC1SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:1F'} // CLC2SEL0 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:1F'} // CLC2SEL1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:1F'} // CLC2SEL2 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:1F'} // CLC2SEL3 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : DAC1REF-/VREF-/ANA2/SMB_I2C/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/C2IN0-/SMB_I2C/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 07FFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 03FFh write-protected, 0400h to 07FFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 07FFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18324.pas b/devices17/PIC16F18324.pas new file mode 100644 index 00000000..4d4500ee --- /dev/null +++ b/devices17/PIC16F18324.pas @@ -0,0 +1,1848 @@ +unit PIC16F18324; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18324'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-39A:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E1C:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F3'} // PIR2 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F3'} // PIE2 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:22'} // PMD4 bits 7,6,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/ANA1/C1IN0-/C2IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz; + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 0FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 0FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18325.pas b/devices17/PIC16F18325.pas new file mode 100644 index 00000000..e5001940 --- /dev/null +++ b/devices17/PIC16F18325.pas @@ -0,0 +1,1909 @@ +unit PIC16F18325; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18325'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_SSP2IF : bit absolute PIR2.3; + PIR2_BCL2IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_SSP2IE : bit absolute PIE2.3; + PIE2_BCL2IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2BUF_SSP2BUF7 : bit absolute SSP2BUF.7; + SSP2BUF_SSP2BUF6 : bit absolute SSP2BUF.6; + SSP2BUF_SSP2BUF5 : bit absolute SSP2BUF.5; + SSP2BUF_SSP2BUF4 : bit absolute SSP2BUF.4; + SSP2BUF_SSP2BUF3 : bit absolute SSP2BUF.3; + SSP2BUF_SSP2BUF2 : bit absolute SSP2BUF.2; + SSP2BUF_SSP2BUF1 : bit absolute SSP2BUF.1; + SSP2BUF_SSP2BUF0 : bit absolute SSP2BUF.0; + SSP2ADD : byte absolute $021A; + SSP2ADD_SSP2ADD7 : bit absolute SSP2ADD.7; + SSP2ADD_SSP2ADD6 : bit absolute SSP2ADD.6; + SSP2ADD_SSP2ADD5 : bit absolute SSP2ADD.5; + SSP2ADD_SSP2ADD4 : bit absolute SSP2ADD.4; + SSP2ADD_SSP2ADD3 : bit absolute SSP2ADD.3; + SSP2ADD_SSP2ADD2 : bit absolute SSP2ADD.2; + SSP2ADD_SSP2ADD1 : bit absolute SSP2ADD.1; + SSP2ADD_SSP2ADD0 : bit absolute SSP2ADD.0; + SSP2MSK : byte absolute $021B; + SSP2MSK_SSP2MSK7 : bit absolute SSP2MSK.7; + SSP2MSK_SSP2MSK6 : bit absolute SSP2MSK.6; + SSP2MSK_SSP2MSK5 : bit absolute SSP2MSK.5; + SSP2MSK_SSP2MSK4 : bit absolute SSP2MSK.4; + SSP2MSK_SSP2MSK3 : bit absolute SSP2MSK.3; + SSP2MSK_SSP2MSK2 : bit absolute SSP2MSK.2; + SSP2MSK_SSP2MSK1 : bit absolute SSP2MSK.1; + SSP2MSK_SSP2MSK0 : bit absolute SSP2MSK.0; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP2MD : bit absolute PMD4.2; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP2CLKPPS : byte absolute $0E1D; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0E1E; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0E1F; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-39A:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E22:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:26'} // PMD4 bits 7,6,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/SMB_I2C/IOCC5/RC5 + // Pin 6 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/C2IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 1FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write-protected, 1000h to 1FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18326.pas b/devices17/PIC16F18326.pas new file mode 100644 index 00000000..b65ab87a --- /dev/null +++ b/devices17/PIC16F18326.pas @@ -0,0 +1,1922 @@ +unit PIC16F18326; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18326'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_SSP2IF : bit absolute PIR2.3; + PIR2_BCL2IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $008E; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_SSP2IE : bit absolute PIE2.3; + PIE2_BCL2IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $010E; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELC : byte absolute $018E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUC : byte absolute $020E; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2BUF_SSP2BUF7 : bit absolute SSP2BUF.7; + SSP2BUF_SSP2BUF6 : bit absolute SSP2BUF.6; + SSP2BUF_SSP2BUF5 : bit absolute SSP2BUF.5; + SSP2BUF_SSP2BUF4 : bit absolute SSP2BUF.4; + SSP2BUF_SSP2BUF3 : bit absolute SSP2BUF.3; + SSP2BUF_SSP2BUF2 : bit absolute SSP2BUF.2; + SSP2BUF_SSP2BUF1 : bit absolute SSP2BUF.1; + SSP2BUF_SSP2BUF0 : bit absolute SSP2BUF.0; + SSP2ADD : byte absolute $021A; + SSP2ADD_SSP2ADD7 : bit absolute SSP2ADD.7; + SSP2ADD_SSP2ADD6 : bit absolute SSP2ADD.6; + SSP2ADD_SSP2ADD5 : bit absolute SSP2ADD.5; + SSP2ADD_SSP2ADD4 : bit absolute SSP2ADD.4; + SSP2ADD_SSP2ADD3 : bit absolute SSP2ADD.3; + SSP2ADD_SSP2ADD2 : bit absolute SSP2ADD.2; + SSP2ADD_SSP2ADD1 : bit absolute SSP2ADD.1; + SSP2ADD_SSP2ADD0 : bit absolute SSP2ADD.0; + SSP2MSK : byte absolute $021B; + SSP2MSK_SSP2MSK7 : bit absolute SSP2MSK.7; + SSP2MSK_SSP2MSK6 : bit absolute SSP2MSK.6; + SSP2MSK_SSP2MSK5 : bit absolute SSP2MSK.5; + SSP2MSK_SSP2MSK4 : bit absolute SSP2MSK.4; + SSP2MSK_SSP2MSK3 : bit absolute SSP2MSK.3; + SSP2MSK_SSP2MSK2 : bit absolute SSP2MSK.2; + SSP2MSK_SSP2MSK1 : bit absolute SSP2MSK.1; + SSP2MSK_SSP2MSK0 : bit absolute SSP2MSK.0; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONC : byte absolute $028E; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLC : byte absolute $038E; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCCP : byte absolute $0397; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP2MD : bit absolute PMD4.2; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP2CLKPPS : byte absolute $0E1D; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0E1E; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0E1F; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08C:SFR'} // Bank 1 : TRISA + {$SET_STATE_RAM '08E-08E:SFR'} // Bank 1 : TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10C:SFR'} // Bank 2 : LATA + {$SET_STATE_RAM '10E-10E:SFR'} // Bank 2 : LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '18E-18E:SFR'} // Bank 3 : ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20C:SFR'} // Bank 4 : WPUA + {$SET_STATE_RAM '20E-20E:SFR'} // Bank 4 : WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28C:SFR'} // Bank 5 : ODCONA + {$SET_STATE_RAM '28E-28E:SFR'} // Bank 5 : ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30C:SFR'} // Bank 6 : SLRCONA + {$SET_STATE_RAM '30E-30E:SFR'} // Bank 6 : SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38C:SFR'} // Bank 7 : INLVLA + {$SET_STATE_RAM '38E-38E:SFR'} // Bank 7 : INLVLC + {$SET_STATE_RAM '391-393:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '397-39A:SFR'} // Bank 7 : IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E22:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'EA0-EA5:SFR'} // Bank 29 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08E:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28E:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '397:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '398:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '399:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:26'} // PMD4 bits 7,6,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/SMB_I2C/IOCC5/RC5 + // Pin 6 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 9 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 10 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 11 : DAC1REF-/VREF-/ANA2/SMB_I2C/IOCA2/RA2 + // Pin 12 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/IOCA1/RA1 + // Pin 13 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-13,1-12,2-11,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-10,1-9,2-8,3-7,4-6,5-5'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_UNIMPLEMENTED = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_UNIMPLEMENTED = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_RESERVED = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 3FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 1FFFh write-protected, 2000h to 3FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 3FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18344.pas b/devices17/PIC16F18344.pas new file mode 100644 index 00000000..2c5a73bd --- /dev/null +++ b/devices17/PIC16F18344.pas @@ -0,0 +1,1965 @@ +unit PIC16F18344; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18344'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-39A:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E1C:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS + {$SET_STATE_RAM 'E20-E22:SFR'} // Bank 28 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F3'} // PIR2 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F3'} // PIE2 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:22'} // PMD4 bits 7,6,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/IOCC5/RC5 + // Pin 6 : ANC4/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC6/IOCC6/RC6 + // Pin 9 : ANC7/IOCC7/RC7 + // Pin 10 : ANB7/IOCB7/RB7 + // Pin 11 : ANB6/SMB_I2C/IOCB6/RB6 + // Pin 12 : ANB5/IOCB5/RB5 + // Pin 13 : ANB4/SMB_I2C/IOCB4/RB4 + // Pin 14 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 15 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 16 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 17 : DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 18 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/C2IN0-/IOCA1/RA1 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 0FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 07FFh write-protected, 0800h to 0FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 0FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18345.pas b/devices17/PIC16F18345.pas new file mode 100644 index 00000000..5c45823e --- /dev/null +++ b/devices17/PIC16F18345.pas @@ -0,0 +1,2026 @@ +unit PIC16F18345; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18345'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_SSP2IF : bit absolute PIR2.3; + PIR2_BCL2IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_SSP2IE : bit absolute PIE2.3; + PIE2_BCL2IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2BUF_SSP2BUF7 : bit absolute SSP2BUF.7; + SSP2BUF_SSP2BUF6 : bit absolute SSP2BUF.6; + SSP2BUF_SSP2BUF5 : bit absolute SSP2BUF.5; + SSP2BUF_SSP2BUF4 : bit absolute SSP2BUF.4; + SSP2BUF_SSP2BUF3 : bit absolute SSP2BUF.3; + SSP2BUF_SSP2BUF2 : bit absolute SSP2BUF.2; + SSP2BUF_SSP2BUF1 : bit absolute SSP2BUF.1; + SSP2BUF_SSP2BUF0 : bit absolute SSP2BUF.0; + SSP2ADD : byte absolute $021A; + SSP2ADD_SSP2ADD7 : bit absolute SSP2ADD.7; + SSP2ADD_SSP2ADD6 : bit absolute SSP2ADD.6; + SSP2ADD_SSP2ADD5 : bit absolute SSP2ADD.5; + SSP2ADD_SSP2ADD4 : bit absolute SSP2ADD.4; + SSP2ADD_SSP2ADD3 : bit absolute SSP2ADD.3; + SSP2ADD_SSP2ADD2 : bit absolute SSP2ADD.2; + SSP2ADD_SSP2ADD1 : bit absolute SSP2ADD.1; + SSP2ADD_SSP2ADD0 : bit absolute SSP2ADD.0; + SSP2MSK : byte absolute $021B; + SSP2MSK_SSP2MSK7 : bit absolute SSP2MSK.7; + SSP2MSK_SSP2MSK6 : bit absolute SSP2MSK.6; + SSP2MSK_SSP2MSK5 : bit absolute SSP2MSK.5; + SSP2MSK_SSP2MSK4 : bit absolute SSP2MSK.4; + SSP2MSK_SSP2MSK3 : bit absolute SSP2MSK.3; + SSP2MSK_SSP2MSK2 : bit absolute SSP2MSK.2; + SSP2MSK_SSP2MSK1 : bit absolute SSP2MSK.1; + SSP2MSK_SSP2MSK0 : bit absolute SSP2MSK.0; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCH : byte absolute $0499; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC3 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC2 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC1 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC0 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCH : byte absolute $049C; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC3 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC2 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC1 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC0 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP2MD : bit absolute PMD4.2; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP2CLKPPS : byte absolute $0E1D; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0E1E; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0E1F; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-39A:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM 'E0F-E22:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:E3'} // NCO1CLK bits 4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:26'} // PMD4 bits 7,6,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '197:01'} // VREGCON bit 0 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/SMB_I2C/IOCC5/RC5 + // Pin 6 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC6/IOCC6/RC6 + // Pin 9 : ANC7/IOCC7/RC7 + // Pin 10 : ANB7/SMB_I2C/IOCB7/RB7 + // Pin 11 : ANB6/SMB_I2C/IOCB6/RB6 + // Pin 12 : ANB5/SMB_I2C/IOCB5/RB5 + // Pin 13 : ANB4/SMB_I2C/IOCB4/RB4 + // Pin 14 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 15 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 16 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 17 : DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 18 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C1IN0-/C2IN0-/IOCA1/RA1 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Unimplemented = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_Unimplemented = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_Reserved = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 1FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 0FFFh write-protected, 1000h to 1FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 1FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18346.pas b/devices17/PIC16F18346.pas new file mode 100644 index 00000000..b5a9a75f --- /dev/null +++ b/devices17/PIC16F18346.pas @@ -0,0 +1,2078 @@ +unit PIC16F18346; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18346'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PIR0 : byte absolute $0010; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_BCL1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_TMR6IF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_NVMIF : bit absolute PIR2.4; + PIR2_SSP2IF : bit absolute PIR2.3; + PIR2_BCL2IF : bit absolute PIR2.2; + PIR2_TMR4IF : bit absolute PIR2.1; + PIR2_NCO1IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_OSFIF : bit absolute PIR3.7; + PIR3_CSWIF : bit absolute PIR3.6; + PIR3_TMR3GIF : bit absolute PIR3.5; + PIR3_TMR3IF : bit absolute PIR3.4; + PIR3_CLC4IF : bit absolute PIR3.3; + PIR3_CLC3IF : bit absolute PIR3.2; + PIR3_CLC2IF : bit absolute PIR3.1; + PIR3_CLC1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0014; + PIR4_CWG2IF : bit absolute PIR4.7; + PIR4_CWG1IF : bit absolute PIR4.6; + PIR4_TMR5GIF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_CCP4IF : bit absolute PIR4.3; + PIR4_CCP3IF : bit absolute PIR4.2; + PIR4_CCP2IF : bit absolute PIR4.1; + PIR4_CCP1IF : bit absolute PIR4.0; + TMR0L : byte absolute $0015; + TMR0H : byte absolute $0016; + T0CON0 : byte absolute $0017; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $0018; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + TMR1L : byte absolute $0019; + TMR1H : byte absolute $001A; + T1CON : byte absolute $001B; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1SOSC : bit absolute T1CON.3; + T1CON_T1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $001C; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001D; + PR2 : byte absolute $001E; + T2CON : byte absolute $001F; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + TRISA : byte absolute $008C; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + PIE0 : byte absolute $0090; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_BCL1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_TMR6IE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_NVMIE : bit absolute PIE2.4; + PIE2_SSP2IE : bit absolute PIE2.3; + PIE2_BCL2IE : bit absolute PIE2.2; + PIE2_TMR4IE : bit absolute PIE2.1; + PIE2_NCO1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_OSFIE : bit absolute PIE3.7; + PIE3_CSWIE : bit absolute PIE3.6; + PIE3_TMR3GIE : bit absolute PIE3.5; + PIE3_TMR3IE : bit absolute PIE3.4; + PIE3_CLC4IE : bit absolute PIE3.3; + PIE3_CLC3IE : bit absolute PIE3.2; + PIE3_CLC2IE : bit absolute PIE3.1; + PIE3_CLC1IE : bit absolute PIE3.0; + PIE4 : byte absolute $0094; + PIE4_CWG2IE : bit absolute PIE4.7; + PIE4_CWG1IE : bit absolute PIE4.6; + PIE4_TMR5GIE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_CCP4IE : bit absolute PIE4.3; + PIE4_CCP3IE : bit absolute PIE4.2; + PIE4_CCP2IE : bit absolute PIE4.1; + PIE4_CCP1IE : bit absolute PIE4.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS5 : bit absolute ADCON0.7; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + ADACT : byte absolute $009F; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + LATA : byte absolute $010C; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH2 : bit absolute CM1CON1.5; + CM1CON1_C1PCH1 : bit absolute CM1CON1.4; + CM1CON1_C1PCH0 : bit absolute CM1CON1.3; + CM1CON1_C1NCH2 : bit absolute CM1CON1.2; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH2 : bit absolute CM2CON1.5; + CM2CON1_C2PCH1 : bit absolute CM2CON1.4; + CM2CON1_C2PCH0 : bit absolute CM2CON1.3; + CM2CON1_C2NCH2 : bit absolute CM2CON1.2; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DAC1EN : bit absolute DACCON0.7; + DACCON0_DAC1OE : bit absolute DACCON0.5; + DACCON0_DAC1PSS1 : bit absolute DACCON0.3; + DACCON0_DAC1PSS0 : bit absolute DACCON0.2; + DACCON0_DAC1NSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DAC1R4 : bit absolute DACCON1.4; + DACCON1_DAC1R3 : bit absolute DACCON1.3; + DACCON1_DAC1R2 : bit absolute DACCON1.2; + DACCON1_DAC1R1 : bit absolute DACCON1.1; + DACCON1_DAC1R0 : bit absolute DACCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELC : byte absolute $018E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + VREGCON : byte absolute $0197; + VREGCON_VREGPM : bit absolute VREGCON.1; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUC : byte absolute $020E; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + SSP1BUF : byte absolute $0211; + SSP1BUF_SSP1BUF7 : bit absolute SSP1BUF.7; + SSP1BUF_SSP1BUF6 : bit absolute SSP1BUF.6; + SSP1BUF_SSP1BUF5 : bit absolute SSP1BUF.5; + SSP1BUF_SSP1BUF4 : bit absolute SSP1BUF.4; + SSP1BUF_SSP1BUF3 : bit absolute SSP1BUF.3; + SSP1BUF_SSP1BUF2 : bit absolute SSP1BUF.2; + SSP1BUF_SSP1BUF1 : bit absolute SSP1BUF.1; + SSP1BUF_SSP1BUF0 : bit absolute SSP1BUF.0; + SSP1ADD : byte absolute $0212; + SSP1ADD_SSP1ADD7 : bit absolute SSP1ADD.7; + SSP1ADD_SSP1ADD6 : bit absolute SSP1ADD.6; + SSP1ADD_SSP1ADD5 : bit absolute SSP1ADD.5; + SSP1ADD_SSP1ADD4 : bit absolute SSP1ADD.4; + SSP1ADD_SSP1ADD3 : bit absolute SSP1ADD.3; + SSP1ADD_SSP1ADD2 : bit absolute SSP1ADD.2; + SSP1ADD_SSP1ADD1 : bit absolute SSP1ADD.1; + SSP1ADD_SSP1ADD0 : bit absolute SSP1ADD.0; + SSP1MSK : byte absolute $0213; + SSP1MSK_SSP1MSK7 : bit absolute SSP1MSK.7; + SSP1MSK_SSP1MSK6 : bit absolute SSP1MSK.6; + SSP1MSK_SSP1MSK5 : bit absolute SSP1MSK.5; + SSP1MSK_SSP1MSK4 : bit absolute SSP1MSK.4; + SSP1MSK_SSP1MSK3 : bit absolute SSP1MSK.3; + SSP1MSK_SSP1MSK2 : bit absolute SSP1MSK.2; + SSP1MSK_SSP1MSK1 : bit absolute SSP1MSK.1; + SSP1MSK_SSP1MSK0 : bit absolute SSP1MSK.0; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2BUF_SSP2BUF7 : bit absolute SSP2BUF.7; + SSP2BUF_SSP2BUF6 : bit absolute SSP2BUF.6; + SSP2BUF_SSP2BUF5 : bit absolute SSP2BUF.5; + SSP2BUF_SSP2BUF4 : bit absolute SSP2BUF.4; + SSP2BUF_SSP2BUF3 : bit absolute SSP2BUF.3; + SSP2BUF_SSP2BUF2 : bit absolute SSP2BUF.2; + SSP2BUF_SSP2BUF1 : bit absolute SSP2BUF.1; + SSP2BUF_SSP2BUF0 : bit absolute SSP2BUF.0; + SSP2ADD : byte absolute $021A; + SSP2ADD_SSP2ADD7 : bit absolute SSP2ADD.7; + SSP2ADD_SSP2ADD6 : bit absolute SSP2ADD.6; + SSP2ADD_SSP2ADD5 : bit absolute SSP2ADD.5; + SSP2ADD_SSP2ADD4 : bit absolute SSP2ADD.4; + SSP2ADD_SSP2ADD3 : bit absolute SSP2ADD.3; + SSP2ADD_SSP2ADD2 : bit absolute SSP2ADD.2; + SSP2ADD_SSP2ADD1 : bit absolute SSP2ADD.1; + SSP2ADD_SSP2ADD0 : bit absolute SSP2ADD.0; + SSP2MSK : byte absolute $021B; + SSP2MSK_SSP2MSK7 : bit absolute SSP2MSK.7; + SSP2MSK_SSP2MSK6 : bit absolute SSP2MSK.6; + SSP2MSK_SSP2MSK5 : bit absolute SSP2MSK.5; + SSP2MSK_SSP2MSK4 : bit absolute SSP2MSK.4; + SSP2MSK_SSP2MSK3 : bit absolute SSP2MSK.3; + SSP2MSK_SSP2MSK2 : bit absolute SSP2MSK.2; + SSP2MSK_SSP2MSK1 : bit absolute SSP2MSK.1; + SSP2MSK_SSP2MSK0 : bit absolute SSP2MSK.0; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + ODCONA : byte absolute $028C; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + ODCONB : byte absolute $028D; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONC : byte absolute $028E; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_CCP1EN : bit absolute CCP1CON.7; + CCP1CON_CCP1OUT : bit absolute CCP1CON.5; + CCP1CON_CCP1FMT : bit absolute CCP1CON.4; + CCP1CON_CCP1MODE3 : bit absolute CCP1CON.3; + CCP1CON_CCP1MODE2 : bit absolute CCP1CON.2; + CCP1CON_CCP1MODE1 : bit absolute CCP1CON.1; + CCP1CON_CCP1MODE0 : bit absolute CCP1CON.0; + CCP1CAP : byte absolute $0294; + CCP1CAP_CCP1CTS3 : bit absolute CCP1CAP.3; + CCP1CAP_CCP1CTS2 : bit absolute CCP1CAP.2; + CCP1CAP_CCP1CTS1 : bit absolute CCP1CAP.1; + CCP1CAP_CCP1CTS0 : bit absolute CCP1CAP.0; + CCPR2L : byte absolute $0295; + CCPR2H : byte absolute $0296; + CCP2CON : byte absolute $0297; + CCP2CON_CCP2EN : bit absolute CCP2CON.7; + CCP2CON_CCP2OUT : bit absolute CCP2CON.5; + CCP2CON_CCP2FMT : bit absolute CCP2CON.4; + CCP2CON_CCP2MODE3 : bit absolute CCP2CON.3; + CCP2CON_CCP2MODE2 : bit absolute CCP2CON.2; + CCP2CON_CCP2MODE1 : bit absolute CCP2CON.1; + CCP2CON_CCP2MODE0 : bit absolute CCP2CON.0; + CCP2CAP : byte absolute $0298; + CCP2CAP_CCP2CTS3 : bit absolute CCP2CAP.3; + CCP2CAP_CCP2CTS2 : bit absolute CCP2CAP.2; + CCP2CAP_CCP2CTS1 : bit absolute CCP2CAP.1; + CCP2CAP_CCP2CTS0 : bit absolute CCP2CAP.0; + CCPTMRS : byte absolute $029F; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + SLRCONA : byte absolute $030C; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + SLRCONB : byte absolute $030D; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONC : byte absolute $030E; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_CCP3EN : bit absolute CCP3CON.7; + CCP3CON_CCP3OUT : bit absolute CCP3CON.5; + CCP3CON_CCP3FMT : bit absolute CCP3CON.4; + CCP3CON_CCP3MODE3 : bit absolute CCP3CON.3; + CCP3CON_CCP3MODE2 : bit absolute CCP3CON.2; + CCP3CON_CCP3MODE1 : bit absolute CCP3CON.1; + CCP3CON_CCP3MODE0 : bit absolute CCP3CON.0; + CCP3CAP : byte absolute $0314; + CCP3CAP_CCP3CTS3 : bit absolute CCP3CAP.3; + CCP3CAP_CCP3CTS2 : bit absolute CCP3CAP.2; + CCP3CAP_CCP3CTS1 : bit absolute CCP3CAP.1; + CCP3CAP_CCP3CTS0 : bit absolute CCP3CAP.0; + CCPR4L : byte absolute $0315; + CCPR4H : byte absolute $0316; + CCP4CON : byte absolute $0317; + CCP4CON_CCP4EN : bit absolute CCP4CON.7; + CCP4CON_CCP4OUT : bit absolute CCP4CON.5; + CCP4CON_CCP4FMT : bit absolute CCP4CON.4; + CCP4CON_CCP4MODE3 : bit absolute CCP4CON.3; + CCP4CON_CCP4MODE2 : bit absolute CCP4CON.2; + CCP4CON_CCP4MODE1 : bit absolute CCP4CON.1; + CCP4CON_CCP4MODE0 : bit absolute CCP4CON.0; + CCP4CAP : byte absolute $0318; + CCP4CAP_CCP4CTS3 : bit absolute CCP4CAP.3; + CCP4CAP_CCP4CTS2 : bit absolute CCP4CAP.2; + CCP4CAP_CCP4CTS1 : bit absolute CCP4CAP.1; + CCP4CAP_CCP4CTS0 : bit absolute CCP4CAP.0; + INLVLA : byte absolute $038C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + INLVLB : byte absolute $038D; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLC : byte absolute $038E; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCAP : byte absolute $0391; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0392; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0393; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCCP : byte absolute $0397; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0398; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0399; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARH : byte absolute $039E; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + MDCARL : byte absolute $039F; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + TMR3L : byte absolute $0411; + TMR3H : byte absolute $0412; + T3CON : byte absolute $0413; + T3CON_TMR3CS1 : bit absolute T3CON.7; + T3CON_TMR3CS0 : bit absolute T3CON.6; + T3CON_T3CKPS1 : bit absolute T3CON.5; + T3CON_T3CKPS0 : bit absolute T3CON.4; + T3CON_T3SOSC : bit absolute T3CON.3; + T3CON_T3SYNC : bit absolute T3CON.2; + T3CON_TMR3ON : bit absolute T3CON.0; + T3GCON : byte absolute $0414; + T3GCON_TMR3GE : bit absolute T3GCON.7; + T3GCON_T3GPOL : bit absolute T3GCON.6; + T3GCON_T3GTM : bit absolute T3GCON.5; + T3GCON_T3GSPM : bit absolute T3GCON.4; + T3GCON_T3GGO_nDONE : bit absolute T3GCON.3; + T3GCON_T3GVAL : bit absolute T3GCON.2; + T3GCON_T3GSS1 : bit absolute T3GCON.1; + T3GCON_T3GSS0 : bit absolute T3GCON.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR5L : byte absolute $0418; + TMR5H : byte absolute $0419; + T5CON : byte absolute $041A; + T5CON_TMR5CS1 : bit absolute T5CON.7; + T5CON_TMR5CS0 : bit absolute T5CON.6; + T5CON_T5CKPS1 : bit absolute T5CON.5; + T5CON_T5CKPS0 : bit absolute T5CON.4; + T5CON_T5SOSC : bit absolute T5CON.3; + T5CON_T5SYNC : bit absolute T5CON.2; + T5CON_TMR5ON : bit absolute T5CON.0; + T5GCON : byte absolute $041B; + T5GCON_TMR5GE : bit absolute T5GCON.7; + T5GCON_T5GPOL : bit absolute T5GCON.6; + T5GCON_T5GTM : bit absolute T5GCON.5; + T5GCON_T5GSPM : bit absolute T5GCON.4; + T5GCON_T5GGO_nDONE : bit absolute T5GCON.3; + T5GCON_T5GVAL : bit absolute T5GCON.2; + T5GCON_T5GSS1 : bit absolute T5GCON.1; + T5GCON_T5GSS0 : bit absolute T5GCON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + CCDCON : byte absolute $041F; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NCO1ACCL : byte absolute $0498; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $0499; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $049A; + NCO1ACCU_NCO1ACC23 : bit absolute NCO1ACCU.7; + NCO1ACCU_NCO1ACC22 : bit absolute NCO1ACCU.6; + NCO1ACCU_NCO1ACC21 : bit absolute NCO1ACCU.5; + NCO1ACCU_NCO1ACC20 : bit absolute NCO1ACCU.4; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $049B; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $049C; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $049D; + NCO1INCU_NCO1INC23 : bit absolute NCO1INCU.7; + NCO1INCU_NCO1INC22 : bit absolute NCO1INCU.6; + NCO1INCU_NCO1INC21 : bit absolute NCO1INCU.5; + NCO1INCU_NCO1INC20 : bit absolute NCO1INCU.4; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $049E; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $049F; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + PWM5DCL : byte absolute $0617; + PWM5DCL_PWM5DCL1 : bit absolute PWM5DCL.7; + PWM5DCL_PWM5DCL0 : bit absolute PWM5DCL.6; + PWM5DCH : byte absolute $0618; + PWM5CON : byte absolute $0619; + PWM5CON_PWM5EN : bit absolute PWM5CON.7; + PWM5CON_PWM5OUT : bit absolute PWM5CON.5; + PWM5CON_PWM5POL : bit absolute PWM5CON.4; + PWM6DCL : byte absolute $061A; + PWM6DCL_PWM6DCL1 : bit absolute PWM6DCL.7; + PWM6DCL_PWM6DCL0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $061B; + PWM6CON : byte absolute $061C; + PWM6CON_PWM6EN : bit absolute PWM6CON.7; + PWM6CON_PWM6OUT : bit absolute PWM6CON.5; + PWM6CON_PWM6POL : bit absolute PWM6CON.4; + PWMTMRS : byte absolute $061F; + PWMTMRS_P6TSEL1 : bit absolute PWMTMRS.3; + PWMTMRS_P6TSEL0 : bit absolute PWMTMRS.2; + PWMTMRS_P5TSEL1 : bit absolute PWMTMRS.1; + PWMTMRS_P5TSEL0 : bit absolute PWMTMRS.0; + CWG1CLKCON : byte absolute $0691; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1DAT : byte absolute $0692; + CWG1DAT_DAT3 : bit absolute CWG1DAT.3; + CWG1DAT_DAT2 : bit absolute CWG1DAT.2; + CWG1DAT_DAT1 : bit absolute CWG1DAT.1; + CWG1DAT_DAT0 : bit absolute CWG1DAT.0; + CWG1DBR : byte absolute $0693; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $0694; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0695; + CWG1CON0_EN : bit absolute CWG1CON0.7; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON0_MODE2 : bit absolute CWG1CON0.2; + CWG1CON0_MODE1 : bit absolute CWG1CON0.1; + CWG1CON0_MODE0 : bit absolute CWG1CON0.0; + CWG1CON1 : byte absolute $0696; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0697; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0698; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0699; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0711; + CWG2DAT : byte absolute $0712; + CWG2DBR : byte absolute $0713; + CWG2DBF : byte absolute $0714; + CWG2CON0 : byte absolute $0715; + CWG2CON1 : byte absolute $0716; + CWG2AS0 : byte absolute $0717; + CWG2AS1 : byte absolute $0718; + CWG2STR : byte absolute $0719; + NVMADRL : byte absolute $0891; + NVMADRH : byte absolute $0892; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $0893; + NVMDATH : byte absolute $0894; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $0895; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $0896; + PCON0 : byte absolute $089B; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PMD0 : byte absolute $0911; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0912; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0913; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD3 : byte absolute $0914; + PMD3_CWG2MD : bit absolute PMD3.7; + PMD3_CWG1MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_PWM5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $0915; + PMD4_UART1MD : bit absolute PMD4.5; + PMD4_MSSP2MD : bit absolute PMD4.2; + PMD4_MSSP1MD : bit absolute PMD4.1; + PMD5 : byte absolute $0916; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + CPUDOZE : byte absolute $0918; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $0919; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $091A; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $091B; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_SOSCBE : bit absolute OSCCON3.5; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT1 : byte absolute $091C; + OSCSTAT1_EXTOR : bit absolute OSCSTAT1.7; + OSCSTAT1_HFOR : bit absolute OSCSTAT1.6; + OSCSTAT1_LFOR : bit absolute OSCSTAT1.4; + OSCSTAT1_SOR : bit absolute OSCSTAT1.3; + OSCSTAT1_ADOR : bit absolute OSCSTAT1.2; + OSCSTAT1_PLLR : bit absolute OSCSTAT1.0; + OSCEN : byte absolute $091D; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $091E; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $091F; + OSCFRQ_HFFRQ3 : bit absolute OSCFRQ.3; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + PPSLOCK : byte absolute $0E0F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E10; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E11; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E12; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E13; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + CCP1PPS : byte absolute $0E14; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0E15; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0E16; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0E17; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CWG1PPS : byte absolute $0E18; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0E19; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCIN1PPS : byte absolute $0E1A; + MDCIN1PPS_MDCIN1PPS4 : bit absolute MDCIN1PPS.4; + MDCIN1PPS_MDCIN1PPS3 : bit absolute MDCIN1PPS.3; + MDCIN1PPS_MDCIN1PPS2 : bit absolute MDCIN1PPS.2; + MDCIN1PPS_MDCIN1PPS1 : bit absolute MDCIN1PPS.1; + MDCIN1PPS_MDCIN1PPS0 : bit absolute MDCIN1PPS.0; + MDCIN2PPS : byte absolute $0E1B; + MDCIN2PPS_MDCIN2PPS4 : bit absolute MDCIN2PPS.4; + MDCIN2PPS_MDCIN2PPS3 : bit absolute MDCIN2PPS.3; + MDCIN2PPS_MDCIN2PPS2 : bit absolute MDCIN2PPS.2; + MDCIN2PPS_MDCIN2PPS1 : bit absolute MDCIN2PPS.1; + MDCIN2PPS_MDCIN2PPS0 : bit absolute MDCIN2PPS.0; + MDMINPPS : byte absolute $0E1C; + MDMINPPS_MDMINPPS4 : bit absolute MDMINPPS.4; + MDMINPPS_MDMINPPS3 : bit absolute MDMINPPS.3; + MDMINPPS_MDMINPPS2 : bit absolute MDMINPPS.2; + MDMINPPS_MDMINPPS1 : bit absolute MDMINPPS.1; + MDMINPPS_MDMINPPS0 : bit absolute MDMINPPS.0; + SSP2CLKPPS : byte absolute $0E1D; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0E1E; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0E1F; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + SSP1CLKPPS : byte absolute $0E20; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0E21; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0E22; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RXPPS : byte absolute $0E24; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0E25; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + CLCIN0PPS : byte absolute $0E28; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0E29; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0E2A; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0E2B; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + T3CKIPPS : byte absolute $0E2C; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E2D; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E2E; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E2F; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + RA0PPS : byte absolute $0E90; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0E91; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0E92; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $0E94; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0E95; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $0E9C; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0E9D; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0E9E; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0E9F; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0EA0; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0EA1; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0EA2; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0EA3; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0EA4; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0EA5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0EA6; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0EA7; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + CLCDATA : byte absolute $0F0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0F10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0F11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0F12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0F13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0F14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0F15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0F16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0F17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0F18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0F19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0F1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0F1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0F1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0F1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0F1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0F1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0F20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0F21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0F22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0F23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0F24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0F25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0F26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0F27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0F28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0F29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0F2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0F2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0F2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0F2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0F2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0F2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0F30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0F31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0F32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0F33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0F34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0F35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0F36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0F37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-01F:SFR'} // Bank 0 : PIR0, PIR1, PIR2, PIR3, PIR4, TMR0L, TMR0H, T0CON0, T0CON1, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-094:SFR'} // Bank 1 : PIE0, PIE1, PIE2, PIE3, PIE4 + {$SET_STATE_RAM '097-097:SFR'} // Bank 1 : WDTCON + {$SET_STATE_RAM '09B-09F:SFR'} // Bank 1 : ADRESL, ADRESH, ADCON0, ADCON1, ADACT + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '111-119:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18E:SFR'} // Bank 3 : ANSELA, ANSELB, ANSELC + {$SET_STATE_RAM '197-197:SFR'} // Bank 3 : VREGCON + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20E:SFR'} // Bank 4 : WPUA, WPUB, WPUC + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28E:SFR'} // Bank 5 : ODCONA, ODCONB, ODCONC + {$SET_STATE_RAM '291-298:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30E:SFR'} // Bank 6 : SLRCONA, SLRCONB, SLRCONC + {$SET_STATE_RAM '311-318:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : INLVLA, INLVLB, INLVLC + {$SET_STATE_RAM '391-39A:SFR'} // Bank 7 : IOCAP, IOCAN, IOCAF, IOCBP, IOCBN, IOCBF, IOCCP, IOCCN, IOCCF, CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARH, MDCARL + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '411-41F:SFR'} // Bank 8 : TMR3L, TMR3H, T3CON, T3GCON, TMR4, PR4, T4CON, TMR5L, TMR5H, T5CON, T5GCON, TMR6, PR6, T6CON, CCDCON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '498-49F:SFR'} // Bank 9 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '617-61C:SFR'} // Bank 12 : PWM5DCL, PWM5DCH, PWM5CON, PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '61F-61F:SFR'} // Bank 12 : PWMTMRS + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '691-699:SFR'} // Bank 13 : CWG1CLKCON, CWG1DAT, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '711-719:SFR'} // Bank 14 : CWG2CLKCON, CWG2DAT, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '891-896:SFR'} // Bank 17 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '89B-89B:SFR'} // Bank 17 : PCON0 + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '911-916:SFR'} // Bank 18 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '918-91F:SFR'} // Bank 18 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT1, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E22:SFR'} // Bank 28 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CWG1PPS, CWG2PPS, MDCIN1PPS, MDCIN2PPS, MDMINPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM 'E24-E25:SFR'} // Bank 28 : RXPPS, TXPPS + {$SET_STATE_RAM 'E28-E2F:SFR'} // Bank 28 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E90-E92:SFR'} // Bank 29 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM 'E94-E95:SFR'} // Bank 29 : RA4PPS, RA5PPS + {$SET_STATE_RAM 'E9C-EA7:SFR'} // Bank 29 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F0F-F37:SFR'} // Bank 30 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '017:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01B:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '08C:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '08D:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:37'} // LATA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:AD'} // DACCON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '197:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '20D:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '28C:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '293:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '294:0F'} // CCP1CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '298:0F'} // CCP2CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '30C:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:0F'} // CCP3CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:0F'} // CCP4CAP bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '391:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '393:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '394:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '395:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '396:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '39A:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:99'} // MDCON bits 6,5,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:0F'} // MDSRC bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:6F'} // MDCARH bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:6F'} // MDCARL bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '413:FD'} // T3CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41A:FD'} // T5CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41F:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '49E:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '49F:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:C0'} // PWM5DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:B0'} // PWM5CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61F:0F'} // PWMTMRS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:0F'} // CWG1DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '694:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '695:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '696:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '697:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '698:1F'} // CWG1AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // CWG2DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '715:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:1F'} // CWG2AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:DF'} // PCON0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '911:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '913:66'} // PMD2 bits 7,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '915:26'} // PMD4 bits 7,6,4,3,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '916:1F'} // PMD5 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '918:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '919:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91A:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '91B:F8'} // OSCCON3 bits 2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91C:DD'} // OSCSTAT1 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '91D:DC'} // OSCEN bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '91E:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:0F'} // OSCFRQ bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E12:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E13:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E14:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E15:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E16:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E17:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E18:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E19:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:1F'} // MDCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:1F'} // MDCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1C:1F'} // MDMINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1D:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1E:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1F:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E20:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E21:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E22:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E28:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E29:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2A:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2B:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2C:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2D:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:1F'} // RA0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:1F'} // RA1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // RA2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // RA4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // RA5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // RB4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // RB5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // RB6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9F:1F'} // RB7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA0:1F'} // RC0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // RC1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // RC2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // RC3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // RC4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // RC5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA6:1F'} // RC6PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA7:1F'} // RC7PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '08C:08'} // TRISA bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '892:80'} // NVMADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VDD + // Pin 2 : ECIN/OSC1/SOSCI/SOSCIN/CLKIN/ANA5/IOCA5/RA5 + // Pin 3 : OSC2/SOSCO/CLKOUT/ANA4/IOCA4/RA4 + // Pin 4 : MCLR/VPP/IOCA3/RA3 + // Pin 5 : ANC5/SMB_I2C/IOCC5/RC5 + // Pin 6 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 7 : ANC3/C1IN3-/C2IN3-/IOCC3/RC3 + // Pin 8 : ANC6/IOCC6/RC6 + // Pin 9 : ANC7/IOCC7/RC7 + // Pin 10 : ANB7/SMB_I2C/IOCB7/RB7 + // Pin 11 : ANB6/SMB_I2C/IOCB6/RB6 + // Pin 12 : ANB5/SMB_I2C/IOCB5/RB5 + // Pin 13 : ANB4/SMB_I2C/IOCB4/RB4 + // Pin 14 : ANC2/C1IN2-/C2IN2-/IOCC2/RC2 + // Pin 15 : ANC1/C1IN1-/C2IN1-/SMB_I2C/IOCC1/RC1 + // Pin 16 : ANC0/C2IN0+/SMB_I2C/IOCC0/RC0 + // Pin 17 : DAC1REF-/VREF-/ANA2/IOCA2/RA2 + // Pin 18 : ICSPCLK/ICDCLK/DAC1REF+/VREF+/ANA1/C2IN0-/IOCA1/RA1 + // Pin 19 : ICSPDAT/ICDDAT/DAC1OUT/ANA0/C1IN0+/IOCA0/RA0 + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-19,1-18,2-17,3-4,4-3,5-2'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-13,5-12,6-11,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-16,1-15,2-14,3-7,4-6,5-5,6-8,7-9'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : FEXTOSC External Oscillator mode Selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC (external clock) above 8 MHz + {$define _FEXTOSC_ECM = $3FFE} // EC (external clock) for 100 kHz to 8 MHz + {$define _FEXTOSC_ECL = $3FFD} // EC (external clock) below 100 kHz + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_UNIMPLEMENTED = $3FFB} // Unimplemented + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4 MHz + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) from 100 kHz to 4 MHz + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768 kHz + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_UNIMPLEMENTED = $3FDF} // Unimplemented + {$define _RSTOSC_LFINT = $3FCF} // LFINTOSC (31kHz) + {$define _RSTOSC_SOSC = $3FBF} // SOSC (31kHz) + {$define _RSTOSC_RESERVED = $3FAF} // Reserved + {$define _RSTOSC_EXT4X = $3F9F} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with 2x PLL (32MHz) + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; I/O or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR; Weak pull-up enabled + {$define _MCLRE_OFF = $3FFE} // MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit. + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // WDTE : Watchdog Timer Enable bits + {$define _WDTE_ON = $3FFF} // WDT enabled, SWDTEN is ignored + {$define _WDTE_SLEEP = $3FFB} // WDT enabled while running and disabled in SLEEP/IDLE; SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FF7} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FF3} // WDT disabled; SWDTEN is ignored + + // LPBOREN : Low-power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out Reset Enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled, SBOREN bit ignored + {$define _BOREN_SLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out Reset enabled according to SBOREN + {$define _BOREN_OFF = $3F3F} // Brown-out Reset disabled + + // BORV : Brown-out Reset Voltage selection bit + {$define _BORV_LOW = $3FFF} // Brown-out voltage (Vbor) set to 2.45V + {$define _BORV_HIGH = $3DFF} // Brown-out voltage (Vbor) set to 2.7V + + // PPS1WAY : PPSLOCK bit One-Way Set Enable bit + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence) + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a Reset + + // DEBUG : Debugger enable bit + {$define _DEBUG_OFF = $3FFF} // Background debugger disabled + {$define _DEBUG_ON = $1FFF} // Background debugger enabled + + // WRT : User NVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 0000h to 01FFh write-protected, 0200h to 3FFFh may be modified + {$define _WRT_HALF = $3FFD} // 0000h to 1FFFh write-protected, 2000h to 3FFFh may be modified + {$define _WRT_ALL = $3FFC} // 0000h to 3FFFh write protected, no addresses may be modified + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/VPP must be used for programming. + + // CP : User NVM Program Memory Code Protection bit + {$define _CP_OFF = $3FFF} // User NVM code protection disabled + {$define _CP_ON = $3FFE} // User NVM code protection enabled + + // CPD : Data NVM Memory Code Protection bit + {$define _CPD_OFF = $3FFF} // Data NVM code protection disabled + {$define _CPD_ON = $3FFD} // Data NVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18424.pas b/devices17/PIC16F18424.pas new file mode 100644 index 00000000..e8b42b0b --- /dev/null +++ b/devices17/PIC16F18424.pas @@ -0,0 +1,2085 @@ +unit PIC16F18424; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18424'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $1E9E; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECC:SFR'} // Bank 61 : RX1DTPPS, TX1CKPPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:33'} // PIR3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:11'} // PMD6 bits 7,6,5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/MDSRC/SS2_n/ICDDAT/ICSPDAT/IOCA0 + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/ICDCLK/ICSPCLK/IOCA1 + // Pin 3 : RA2/ANA2/T0CKI/CCP3IN/CWG1IN/CWG2IN/ZCD1/INT0/IOCA2 + // Pin 4 : RA3/MCLR_n/T6IN/VPP/IOCA3 + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/SOSCO/CLKOUT/OSC2/IOCA4 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/CLCIN3/SOSCI/CLKIN/OSC1/IOCA5 + // Pin 7 : RC0/ANC0/C2IN0+/T5CKI/SCK1/SCL1/IOCC0 + // Pin 8 : RC1/ANC1/C1IN1-/C2IN1-/T4IN/CCP4IN/SDI1/SDA1/CLCIN2/IOCC1 + // Pin 9 : RC2/ANC2/C1IN2-/C2IN2-/MDCARL/IOCC2 + // Pin 10 : RC3/ANC3/C1IN3-/C2IN3-/T5G/CCP2IN/SS1_n/CLCIN0/IOCC3 + // Pin 11 : RC4/ANC4/T3G/SCK2/SCL2/CK1/CLCIN1/IOCC4 + // Pin 12 : RC5/ANC5/MDCARH/T3CKI/CCP1IN/SDI2/SDA2/RX1/DT1/IOCC5 + // Pin 13 : VDD + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-7,1-8,2-9,3-10,4-11,5-12'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCDDIS_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18425.pas b/devices17/PIC16F18425.pas new file mode 100644 index 00000000..6157d2a9 --- /dev/null +++ b/devices17/PIC16F18425.pas @@ -0,0 +1,2118 @@ +unit PIC16F18425; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18425'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $1E9E; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:13'} // PMD6 bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/MDSRC/SS2_n/ICDDAT/ICSPDAT + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/ICDCLK/ICSPCLK + // Pin 3 : RA2/ANA2/T0CKI/CCP3IN/CWG1IN/CWG2IN/ZCD1/INT0 + // Pin 4 : RA3/MCLR_n/T6IN/VPP + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/SOSCO/CLKOUT/OSC2 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/CLCIN3/SOSCI/CLKIN/OSC1 + // Pin 7 : RC0/ANC0/C2IN0+/T5CKI/SCK1/SCL1 + // Pin 8 : RC1/ANC1/C1IN1-/C2IN1-/T4IN/CCP4IN/SDI1/SDA1/CLCIN2 + // Pin 9 : RC2/ANC2/C1IN2-/C2IN2-/MDCARL + // Pin 10 : RC3/ANC3/C1IN3-/C2IN3-/T5G/CCP2IN/SS1_n/CLCIN0 + // Pin 11 : RC4/ANC4/T3G/SCK2/SCL2/CK1/CLCIN1 + // Pin 12 : RC5/ANC5/MDCARH/T3CKI/CCP1IN/SDI2/SDA2/RX1/DT1 + // Pin 13 : VDD + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-7,1-8,2-9,3-10,4-11,5-12'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCDDIS_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18426.pas b/devices17/PIC16F18426.pas new file mode 100644 index 00000000..a80b15e4 --- /dev/null +++ b/devices17/PIC16F18426.pas @@ -0,0 +1,2118 @@ +unit PIC16F18426; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18426'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 14} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTC : byte absolute $000E; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISC : byte absolute $0014; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATC : byte absolute $001A; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $1E9E; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00C:SFR'} // Bank 0 : PORTA + {$SET_STATE_RAM '00E-00E:SFR'} // Bank 0 : PORTC + {$SET_STATE_RAM '012-012:SFR'} // Bank 0 : TRISA + {$SET_STATE_RAM '014-014:SFR'} // Bank 0 : TRISC + {$SET_STATE_RAM '018-018:SFR'} // Bank 0 : LATA + {$SET_STATE_RAM '01A-01A:SFR'} // Bank 0 : LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F20-1F25:SFR'} // Bank 62 : RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:3F'} // PORTC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:3F'} // TRISC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:3F'} // LATC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:13'} // PMD6 bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:3F'} // ANSELC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:3F'} // WPUC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:3F'} // ODCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:3F'} // SLRCONC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:3F'} // INLVLC bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:3F'} // IOCCP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:3F'} // IOCCN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:3F'} // IOCCF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/MDSRC/SS2_n/ICDDAT/ICSPDAT/IOCA0 + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/ICDCLK/ICSPCLK/IOCA1 + // Pin 3 : RA2/ANA2/T0CKI/CCP3IN/CWG1IN/CWG2IN/ZCD1/INT0/IOCA2 + // Pin 4 : RA3/MCLR_n/T6IN/VPP/IOCA3 + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/SOSCO/CLKOUT/OSC2/IOCA4 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/CLCIN3/SOSCI/CLKIN/OSC1/IOCA5 + // Pin 7 : RC0/ANC0/C2IN0+/T5CKI/SCK1/SCL1/IOCC0 + // Pin 8 : RC1/ANC1/C1IN1-/C2IN1-/T4IN/CCP4IN/SDI1/SDA1/CLCIN2/IOCC1 + // Pin 9 : RC2/ANC2/C1IN2-/C2IN2-/MDCARL/IOCC2 + // Pin 10 : RC3/ANC3/C1IN3-/C2IN3-/T5G/CCP2IN/SS1_n/CLCIN0/IOCC3 + // Pin 11 : RC4/ANC4/T3G/SCK2/SCL2/CK1/CLCIN1/IOCC4 + // Pin 12 : RC5/ANC5/MDCARH/T3CKI/CCP1IN/SDI2/SDA2/RX1/DT1/IOCC5 + // Pin 13 : VDD + // Pin 14 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00E:0-7,1-8,2-9,3-10,4-11,5-12'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCDDIS_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18444.pas b/devices17/PIC16F18444.pas new file mode 100644 index 00000000..77857c4a --- /dev/null +++ b/devices17/PIC16F18444.pas @@ -0,0 +1,2060 @@ +unit PIC16F18444; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18444'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CON_OE : bit absolute CCP3CON.6; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_PORT : bit absolute INTPPS.3; + INTPPS_PIN2 : bit absolute INTPPS.2; + INTPPS_PIN1 : bit absolute INTPPS.1; + INTPPS_PIN0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_PORT1 : bit absolute T1CKIPPS.4; + T1CKIPPS_PORT0 : bit absolute T1CKIPPS.3; + T1GPPS : byte absolute $1E93; + T3CKIPPS : byte absolute $1E94; + T3GPPS : byte absolute $1E95; + T5CKIPPS : byte absolute $1E96; + T5GPPS : byte absolute $1E97; + T2INPPS : byte absolute $1E9C; + T4INPPS : byte absolute $1E9D; + T6INPPS : byte absolute $1E9E; + CCP1PPS : byte absolute $1EA1; + CCP2PPS : byte absolute $1EA2; + CCP3PPS : byte absolute $1EA3; + CCP4PPS : byte absolute $1EA4; + SMT1WINPPS : byte absolute $1EA9; + SMT1SIGPPS : byte absolute $1EAA; + CWG1PPS : byte absolute $1EB1; + CWG2PPS : byte absolute $1EB2; + MDCARLPPS : byte absolute $1EB8; + MDCARHPPS : byte absolute $1EB9; + MDSRCPPS : byte absolute $1EBA; + CLCIN0PPS : byte absolute $1EBB; + CLCIN1PPS : byte absolute $1EBC; + CLCIN2PPS : byte absolute $1EBD; + CLCIN3PPS : byte absolute $1EBE; + ADACTPPS : byte absolute $1EC3; + SSP1CLKPPS : byte absolute $1EC5; + SSP1DATPPS : byte absolute $1EC6; + SSP1SSPPS : byte absolute $1EC7; + RX1PPS : byte absolute $1ECB; + CK1PPS : byte absolute $1ECC; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECC:SFR'} // Bank 61 : RX1PPS, CK1PPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F1C-1F27:SFR'} // Bank 62 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:33'} // PIR3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:33'} // PIE3 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:11'} // PMD6 bits 7,6,5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // CK1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F43:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F44:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F45:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F46:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F47:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F48:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F49:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4A:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/ICDDAT/ICSPDAT/IOCA0 + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/MDSRC/SS2_n/ICDCLK/ICSPCLK/IOCA1 + // Pin 3 : RA2/ANA2/T0CKI/CWG1IN/CWG2IN/ZCD1/CLCIN0/INT0/IOCA2 + // Pin 4 : RA3/MCLR_n/VPP/IOCA3 + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/CCP4IN/SOSCO/CLKOUT/OSC2/IOCA4 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/SOSCI/CLKIN/OSC1/IOCA5 + // Pin 7 : RB4/ANB4/T5G/SDI1/SDA1/CLCIN2/IOCB4 + // Pin 8 : RB5/ANB5/CCP3IN/SCK2/SCL2/RX1/DT1/CLCIN3/IOCB5 + // Pin 9 : RB6/ANB6/SCK1/SCL1/IOCB6 + // Pin 10 : RB7/ANB7/T6IN/SDI2/SDA2/CK1/IOCB7 + // Pin 11 : RC0/ANC0/C2IN0+/T3CKI/T3G/IOCC0 + // Pin 12 : RC1/ANC1/C1IN1-/C2IN1-/IOCC1 + // Pin 13 : RC2/ANC2/ADACT/C1IN2-/C2IN2-/MDCARL/T5CKI/IOCC2 + // Pin 14 : RC3/ANC3/C1IN3-/C2IN3-/CCP2IN/CLCIN1/IOCC3 + // Pin 15 : RC4/ANC4/IOCC4 + // Pin 16 : RC5/ANC5/MDCARH/T4IN/CCP1IN/IOCC5 + // Pin 17 : RC6/ANC6/SS1_n/IOCC6 + // Pin 18 : RC7/ANC7/IOCC7 + // Pin 19 : VDD + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-7,5-8,6-9,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18445.pas b/devices17/PIC16F18445.pas new file mode 100644 index 00000000..1a14ed5a --- /dev/null +++ b/devices17/PIC16F18445.pas @@ -0,0 +1,2079 @@ +unit PIC16F18445; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18445'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_PORT : bit absolute INTPPS.3; + INTPPS_PIN2 : bit absolute INTPPS.2; + INTPPS_PIN1 : bit absolute INTPPS.1; + INTPPS_PIN0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_PORT1 : bit absolute T1CKIPPS.4; + T1CKIPPS_PORT0 : bit absolute T1CKIPPS.3; + T1GPPS : byte absolute $1E93; + T3CKIPPS : byte absolute $1E94; + T3GPPS : byte absolute $1E95; + T5CKIPPS : byte absolute $1E96; + T5GPPS : byte absolute $1E97; + T2INPPS : byte absolute $1E9C; + T4INPPS : byte absolute $1E9D; + T6INPPS : byte absolute $1E9E; + CCP1PPS : byte absolute $1EA1; + CCP2PPS : byte absolute $1EA2; + CCP3PPS : byte absolute $1EA3; + CCP4PPS : byte absolute $1EA4; + SMT1WINPPS : byte absolute $1EA9; + SMT1SIGPPS : byte absolute $1EAA; + CWG1PPS : byte absolute $1EB1; + CWG2PPS : byte absolute $1EB2; + MDCARLPPS : byte absolute $1EB8; + MDCARHPPS : byte absolute $1EB9; + MDSRCPPS : byte absolute $1EBA; + CLCIN0PPS : byte absolute $1EBB; + CLCIN1PPS : byte absolute $1EBC; + CLCIN2PPS : byte absolute $1EBD; + CLCIN3PPS : byte absolute $1EBE; + ADACTPPS : byte absolute $1EC3; + SSP1CLKPPS : byte absolute $1EC5; + SSP1DATPPS : byte absolute $1EC6; + SSP1SSPPS : byte absolute $1EC7; + SSP2CLKPPS : byte absolute $1EC8; + SSP2DATPPS : byte absolute $1EC9; + SSP2SSPPS : byte absolute $1ECA; + RX1PPS : byte absolute $1ECB; + CK1PPS : byte absolute $1ECC; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1PPS, CK1PPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F1C-1F27:SFR'} // Bank 62 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:13'} // PMD6 bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // CK1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F43:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F44:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F45:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F46:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F47:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F48:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F49:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4A:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/ICDDAT/ICSPDAT + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/MDSRC/SS2_n/ICDCLK/ICSPCLK + // Pin 3 : RA2/ANA2/T0CKI/CWG1IN/CWG2IN/ZCD1/CLCIN0/INT0 + // Pin 4 : RA3/MCLR_n/VPP + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/CCP4IN/SOSCO/CLKOUT/OSC2 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/SOSCI/CLKIN/OSC1 + // Pin 7 : RB4/ANB4/T5G/SDI1/SDA1/CLCIN2 + // Pin 8 : RB5/ANB5/CCP3IN/SCK2/SCL2/RX1/DT1/CLCIN3 + // Pin 9 : RB6/ANB6/SCK1/SCL1 + // Pin 10 : RB7/ANB7/T6IN/SDI2/SDA2/CK1 + // Pin 11 : RC0/ANC0/C2IN0+/T3CKI/T3G + // Pin 12 : RC1/ANC1/C1IN1-/C2IN1- + // Pin 13 : RC2/ANC2/ADACT/C1IN2-/C2IN2-/MDCARL/T5CKI + // Pin 14 : RC3/ANC3/C1IN3-/C2IN3-/CCP2IN/CLCIN1 + // Pin 15 : RC4/ANC4 + // Pin 16 : RC5/ANC5/MDCARH/T4IN/CCP1IN + // Pin 17 : RC6/ANC6/SS1_n + // Pin 18 : RC7/ANC7 + // Pin 19 : VDD + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-7,5-8,6-9,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18446.pas b/devices17/PIC16F18446.pas new file mode 100644 index 00000000..6c544f24 --- /dev/null +++ b/devices17/PIC16F18446.pas @@ -0,0 +1,2079 @@ +unit PIC16F18446; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18446'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 20} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + TRISA : byte absolute $0012; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_PORT : bit absolute INTPPS.3; + INTPPS_PIN2 : bit absolute INTPPS.2; + INTPPS_PIN1 : bit absolute INTPPS.1; + INTPPS_PIN0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_PORT1 : bit absolute T1CKIPPS.4; + T1CKIPPS_PORT0 : bit absolute T1CKIPPS.3; + T1GPPS : byte absolute $1E93; + T3CKIPPS : byte absolute $1E94; + T3GPPS : byte absolute $1E95; + T5CKIPPS : byte absolute $1E96; + T5GPPS : byte absolute $1E97; + T2INPPS : byte absolute $1E9C; + T4INPPS : byte absolute $1E9D; + T6INPPS : byte absolute $1E9E; + CCP1PPS : byte absolute $1EA1; + CCP2PPS : byte absolute $1EA2; + CCP3PPS : byte absolute $1EA3; + CCP4PPS : byte absolute $1EA4; + SMT1WINPPS : byte absolute $1EA9; + SMT1SIGPPS : byte absolute $1EAA; + CWG1PPS : byte absolute $1EB1; + CWG2PPS : byte absolute $1EB2; + MDCARLPPS : byte absolute $1EB8; + MDCARHPPS : byte absolute $1EB9; + MDSRCPPS : byte absolute $1EBA; + CLCIN0PPS : byte absolute $1EBB; + CLCIN1PPS : byte absolute $1EBC; + CLCIN2PPS : byte absolute $1EBD; + CLCIN3PPS : byte absolute $1EBE; + ADACTPPS : byte absolute $1EC3; + SSP1CLKPPS : byte absolute $1EC5; + SSP1DATPPS : byte absolute $1EC6; + SSP1SSPPS : byte absolute $1EC7; + SSP2CLKPPS : byte absolute $1EC8; + SSP2DATPPS : byte absolute $1EC9; + SSP2SSPPS : byte absolute $1ECA; + RX1PPS : byte absolute $1ECB; + CK1PPS : byte absolute $1ECC; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31B:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA4:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB2:SFR'} // Bank 61 : CWG1PPS, CWG2PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1PPS, CK1PPS + {$SET_STATE_RAM '1F10-1F12:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS + {$SET_STATE_RAM '1F14-1F15:SFR'} // Bank 62 : RA4PPS, RA5PPS + {$SET_STATE_RAM '1F1C-1F27:SFR'} // Bank 62 : RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00C:3F'} // PORTA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00D:F0'} // PORTB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:3F'} // TRISA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:F0'} // TRISB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:3F'} // LATA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '019:F0'} // LATB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:BF'} // CCP3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:BF'} // CCP4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:0F'} // PIR6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:33'} // PIR7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:07'} // PIR8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:0F'} // PIE6 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:33'} // PIE7 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:07'} // PIE8 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:6F'} // PMD4 bits 7,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:60'} // PMD5 bits 7,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:13'} // PMD6 bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // PMD7 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:AD'} // DAC1CON0 bits 6,4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // CK1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:37'} // ANSELA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F39:3F'} // WPUA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:37'} // ODCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:37'} // SLRCONA bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3C:3F'} // INLVLA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3D:3F'} // IOCAP bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3E:3F'} // IOCAN bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3F:3F'} // IOCAF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F43:F0'} // ANSELB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F44:F0'} // WPUB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F45:F0'} // ODCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F46:F0'} // SLRCONB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F47:F0'} // INLVLB bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F48:F0'} // IOCBP bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F49:F0'} // IOCBN bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4A:F0'} // IOCBF bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0+/DAC1OUT1/ICDDAT/ICSPDAT + // Pin 2 : RA1/ANA1/ADCVREF+/C1IN0-/C2IN0-/DAC1VREF+/MDSRC/SS2_n/ICDCLK/ICSPCLK + // Pin 3 : RA2/ANA2/T0CKI/CWG1IN/CWG2IN/ZCD1/CLCIN0/INT0 + // Pin 4 : RA3/MCLR_n/VPP + // Pin 5 : RA4/ANA4/T1G/SMT1WIN/CCP4IN/SOSCO/CLKOUT/OSC2 + // Pin 6 : RA5/ANA5/T1CKI/T2IN/SMT1SIG/SOSCI/CLKIN/OSC1 + // Pin 7 : RB4/ANB4/T5G/SDI1/SDA1/CLCIN2 + // Pin 8 : RB5/ANB5/CCP3IN/SCK2/SCL2/RX1/DT1/CLCIN3 + // Pin 9 : RB6/ANB6/SCK1/SCL1 + // Pin 10 : RB7/ANB7/T6IN/SDI2/SDA2/CK1 + // Pin 11 : RC0/ANC0/C2IN0+/T3CKI/T3G + // Pin 12 : RC1/ANC1/C1IN1-/C2IN1- + // Pin 13 : RC2/ANC2/ADACT/C1IN2-/C2IN2-/MDCARL/T5CKI + // Pin 14 : RC3/ANC3/C1IN3-/C2IN3-/CCP2IN/CLCIN1 + // Pin 15 : RC4/ANC4 + // Pin 16 : RC5/ANC5/MDCARH/T4IN/CCP1IN + // Pin 17 : RC6/ANC6/SS1_n + // Pin 18 : RC7/ANC7 + // Pin 19 : VDD + // Pin 20 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6'} // PORTA + {$MAP_RAM_TO_PIN '00D:4-7,5-8,6-9,7-10'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18455.pas b/devices17/PIC16F18455.pas new file mode 100644 index 00000000..3ff5c3c7 --- /dev/null +++ b/devices17/PIC16F18455.pas @@ -0,0 +1,2502 @@ +unit PIC16F18455; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18455'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATE : byte absolute $001C; + LATE_LATE3 : bit absolute LATE.3; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CON_OE : bit absolute CCP3CON.6; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLK : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP5MD : bit absolute PMD4.4; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG3MD : bit absolute PMD5.7; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U2MD : bit absolute PMD6.5; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMU2MD : bit absolute PMD7.6; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $1E9E; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $1EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $1EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $1EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $1EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVB7 : bit absolute INLVLB.7; + INLVLB_INLVB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + ODCONE : byte absolute $1F66; + SLRCONE : byte absolute $1F67; + INLVLE : byte absolute $1F68; + INLVLE_INLVE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEPEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-016:SFR'} // Bank 0 : TRISE + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01C:SFR'} // Bank 0 : LATE + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLK, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA5:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM '1EA9-1EAC:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM '1EB1-1EB3:SFR'} // Bank 61 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F6B:SFR'} // Bank 62 : WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:08'} // LATE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:37'} // PIR7 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:37'} // PIE7 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:7F'} // PMD4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:E0'} // PMD5 bits 4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:33'} // PMD6 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:7F'} // PMD7 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:00'} // ODCONE bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:00'} // SLRCONE bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0-/C2IN0-/CLCIN0/IOCA0 + // Pin 2 : RA1/ANA1/C1IN1-/C2IN1-/CLCIN1/IOCA1 + // Pin 3 : RA2/ANA2/ADCVREF-/C1IN0+/C2IN0+/DAC1VREF-/DAC1OUT1/IOCA2 + // Pin 4 : RA3/ANA3/ADCVREF+/C1IN1+/DAC1VREF+/MDCARL/IOCA3 + // Pin 5 : RA4/ANA4/MDCARH/T0CKI/CCP5IN/IOCA4 + // Pin 6 : RA5/ANA5/MDSRC/SS1_n/IOCA5 + // Pin 7 : RA6/ANA6/IOCA6/OSC2/CLKOUT + // Pin 8 : RA7/ANA7/OSC1/CLKIN + // Pin 9 : RB0/ANB0/C2IN1+/CCP4IN/CWG1IN/ZCD1/IOCB0/INT0 + // Pin 10 : RB1/ANB1/C1IN3-/C2IN3-/CWG2IN/SCK2/SCL2/IOCB1 + // Pin 11 : RB2/ANB2/CWG3IN/SDI2/SDA2/SS2_n/IOCB2 + // Pin 12 : RB3/ANB3/C1IN2-/C2IN2-/IOCB3 + // Pin 13 : RB4/ANB4/ADACT/T5G/SMT2WIN/IOCB4 + // Pin 14 : RB5/ANB5/T1G/SMT2SIG/CCP3IN/IOCB5 + // Pin 15 : RB6/ANB6/CK2/CLCIN2/IOCB6/ICSPCLK/ICDCLK + // Pin 16 : RB7/ANB7/DAC1OUT2/T6IN/RX2/DT2/IOCB7/ICSPDAT/ICDDAT + // Pin 17 : RC0/ANC0/T1CKI/T3CKI/T3G/SMT1WIN/IOCC0/SOSCO + // Pin 18 : RC1/ANC1/SMT1SIG/CCP2IN/IOCC1/SOSCI + // Pin 19 : RC2/ANC2/T5CKI/CCP1IN/IOCC2 + // Pin 20 : RC3/ANC3/T2IN/SCK1/SCL1/IOCC3 + // Pin 21 : RC4/ANC4/SDI1/SDA1/IOCC4 + // Pin 22 : RC5/ANC5/T4IN/IOCC5 + // Pin 23 : RC6/ANC6/CK1/IOCC6 + // Pin 24 : RC7/ANC7/RX1/DT1/IOCC7 + // Pin 25 : RE3/IOCE3/MCLR_n/VPP + // Pin 26 : VDD + // Pin 27 : VSS + // Pin 28 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,5-22,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCDDIS_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18456.pas b/devices17/PIC16F18456.pas new file mode 100644 index 00000000..e12bb6b8 --- /dev/null +++ b/devices17/PIC16F18456.pas @@ -0,0 +1,2504 @@ +unit PIC16F18456; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18456'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0016; + TRISE_TRISE3 : bit absolute TRISE.3; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATE : byte absolute $001C; + LATE_LATE3 : bit absolute LATE.3; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM1 : bit absolute ADCON0.3; + ADCON0_FM0 : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_GAOE : bit absolute ADCON1.4; + ADCON1_GBOE : bit absolute ADCON1.3; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_NREF3 : bit absolute ADREF.7; + ADREF_NREF2 : bit absolute ADREF.6; + ADREF_NREF1 : bit absolute ADREF.5; + ADREF_NREF0 : bit absolute ADREF.4; + ADREF_PREF3 : bit absolute ADREF.3; + ADREF_PREF2 : bit absolute ADREF.2; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1H : byte absolute $020D; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_NOT_SYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1CLK : byte absolute $0211; + TMR3L : byte absolute $0212; + TMR3H : byte absolute $0213; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5H : byte absolute $0219; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + ADCPCON0 : byte absolute $029F; + ADCPCON0_CPON : bit absolute ADCPCON0.7; + ADCPCON0_CPRDY : bit absolute ADCPCON0.0; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CON_OE : bit absolute CCP3CON.6; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCH : byte absolute $058D; + NCO1ACCU : byte absolute $058E; + NCO1INCL : byte absolute $058F; + NCO1INCH : byte absolute $0590; + NCO1INCU : byte absolute $0591; + NCO1CON : byte absolute $0592; + NCO1CON_PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_CKS3 : bit absolute NCO1CLK.3; + NCO1CLK_CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_CKS0 : bit absolute NCO1CLK.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_MD16 : bit absolute T0CON0.4; + T0CON1 : byte absolute $059F; + T0CON1_ASYNC : bit absolute T0CON1.4; + T0CON1_CKPS3 : bit absolute T0CON1.3; + CWG1CLK : byte absolute $060C; + CWG1CLK_CLK : bit absolute CWG1CLK.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_DAT3 : bit absolute CWG1ISM.3; + CWG1ISM_DAT2 : bit absolute CWG1ISM.2; + CWG1ISM_DAT1 : bit absolute CWG1ISM.1; + CWG1ISM_DAT0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSDBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSDBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLK : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3DAT : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS0_LSBD1 : bit absolute CWG3AS0.5; + CWG3AS0_LSBD0 : bit absolute CWG3AS0.4; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTIE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_NCO1MD : bit absolute PMD2.7; + PMD3 : byte absolute $0799; + PMD3_DAC1MD : bit absolute PMD3.6; + PMD3_ADCMD : bit absolute PMD3.5; + PMD3_CMP2MD : bit absolute PMD3.2; + PMD3_CMP1MD : bit absolute PMD3.1; + PMD3_ZCDMD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_PWM7MD : bit absolute PMD4.6; + PMD4_PWM6MD : bit absolute PMD4.5; + PMD4_CCP5MD : bit absolute PMD4.4; + PMD4_CCP4MD : bit absolute PMD4.3; + PMD4_CCP3MD : bit absolute PMD4.2; + PMD4_CCP2MD : bit absolute PMD4.1; + PMD4_CCP1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_CWG3MD : bit absolute PMD5.7; + PMD5_CWG2MD : bit absolute PMD5.6; + PMD5_CWG1MD : bit absolute PMD5.5; + PMD6 : byte absolute $079C; + PMD6_U2MD : bit absolute PMD6.5; + PMD6_U1MD : bit absolute PMD6.4; + PMD6_MSSP2MD : bit absolute PMD6.1; + PMD6_MSSP1MD : bit absolute PMD6.0; + PMD7 : byte absolute $079D; + PMD7_SMU2MD : bit absolute PMD7.6; + PMD7_SMT1MD : bit absolute PMD7.5; + PMD7_CLC4MD : bit absolute PMD7.4; + PMD7_CLC3MD : bit absolute PMD7.3; + PMD7_CLC2MD : bit absolute PMD7.2; + PMD7_CLC1MD : bit absolute PMD7.1; + PMD7_DSM1MD : bit absolute PMD7.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_PM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_nMEMV : bit absolute PCON1.1; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADRL7 : bit absolute NVMADRL.7; + NVMADRL_NVMADRL6 : bit absolute NVMADRL.6; + NVMADRL_NVMADRL5 : bit absolute NVMADRL.5; + NVMADRL_NVMADRL4 : bit absolute NVMADRL.4; + NVMADRL_NVMADRL3 : bit absolute NVMADRL.3; + NVMADRL_NVMADRL2 : bit absolute NVMADRL.2; + NVMADRL_NVMADRL1 : bit absolute NVMADRL.1; + NVMADRL_NVMADRL0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADRH6 : bit absolute NVMADRH.6; + NVMADRH_NVMADRH5 : bit absolute NVMADRH.5; + NVMADRH_NVMADRH4 : bit absolute NVMADRH.4; + NVMADRH_NVMADRH3 : bit absolute NVMADRH.3; + NVMADRH_NVMADRH2 : bit absolute NVMADRH.2; + NVMADRH_NVMADRH1 : bit absolute NVMADRH.1; + NVMADRH_NVMADRH0 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDATL7 : bit absolute NVMDATL.7; + NVMDATL_NVMDATL6 : bit absolute NVMDATL.6; + NVMDATL_NVMDATL5 : bit absolute NVMDATL.5; + NVMDATL_NVMDATL4 : bit absolute NVMDATL.4; + NVMDATL_NVMDATL3 : bit absolute NVMDATL.3; + NVMDATL_NVMDATL2 : bit absolute NVMDATL.2; + NVMDATL_NVMDATL1 : bit absolute NVMDATL.1; + NVMDATL_NVMDATL0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDATH5 : bit absolute NVMDATH.5; + NVMDATH_NVMDATH4 : bit absolute NVMDATH.4; + NVMDATH_NVMDATH3 : bit absolute NVMDATH.3; + NVMDATH_NVMDATH2 : bit absolute NVMDATH.2; + NVMDATH_NVMDATH1 : bit absolute NVMDATH.1; + NVMDATH_NVMDATH0 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MD1CON0 : byte absolute $0897; + MD1CON0_OPOL : bit absolute MD1CON0.4; + MD1CON0_BIT : bit absolute MD1CON0.0; + MD1CON1 : byte absolute $0898; + MD1CON1_CHPOL : bit absolute MD1CON1.5; + MD1CON1_CHSYNC : bit absolute MD1CON1.4; + MD1CON1_CLPOL : bit absolute MD1CON1.1; + MD1CON1_CLSYNC : bit absolute MD1CON1.0; + MD1SRC : byte absolute $0899; + MD1SRC_MS4 : bit absolute MD1SRC.4; + MD1SRC_MS3 : bit absolute MD1SRC.3; + MD1SRC_MS2 : bit absolute MD1SRC.2; + MD1SRC_MS1 : bit absolute MD1SRC.1; + MD1SRC_MS0 : bit absolute MD1SRC.0; + MD1CARL : byte absolute $089A; + MD1CARL_CL3 : bit absolute MD1CARL.3; + MD1CARL_CL2 : bit absolute MD1CARL.2; + MD1CARL_CL1 : bit absolute MD1CARL.1; + MD1CARL_CL0 : bit absolute MD1CARL.0; + MD1CARH : byte absolute $089B; + MD1CARH_CH3 : bit absolute MD1CARH.3; + MD1CARH_CH2 : bit absolute MD1CARH.2; + MD1CARH_CH1 : bit absolute MD1CARH.1; + MD1CARH_CH0 : bit absolute MD1CARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NCH : byte absolute $0992; + CM1NCH_NCH2 : bit absolute CM1NCH.2; + CM1NCH_NCH1 : bit absolute CM1NCH.1; + CM1NCH_NCH0 : bit absolute CM1NCH.0; + CM1PCH : byte absolute $0993; + CM1PCH_PCH2 : bit absolute CM1PCH.2; + CM1PCH_PCH1 : bit absolute CM1PCH.1; + CM1PCH_PCH0 : bit absolute CM1PCH.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NCH : byte absolute $0996; + CM2PCH : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + T6INPPS : byte absolute $1E9E; + T6INPPS_T6INPPS4 : bit absolute T6INPPS.4; + T6INPPS_T6INPPS3 : bit absolute T6INPPS.3; + T6INPPS_T6INPPS2 : bit absolute T6INPPS.2; + T6INPPS_T6INPPS1 : bit absolute T6INPPS.1; + T6INPPS_T6INPPS0 : bit absolute T6INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $1EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $1EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $1EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $1EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RX1DTPPS : byte absolute $1ECB; + RX1DTPPS_RX1DTPPS4 : bit absolute RX1DTPPS.4; + RX1DTPPS_RX1DTPPS3 : bit absolute RX1DTPPS.3; + RX1DTPPS_RX1DTPPS2 : bit absolute RX1DTPPS.2; + RX1DTPPS_RX1DTPPS1 : bit absolute RX1DTPPS.1; + RX1DTPPS_RX1DTPPS0 : bit absolute RX1DTPPS.0; + TX1CKPPS : byte absolute $1ECC; + TX1CKPPS_TX1CKPPS4 : bit absolute TX1CKPPS.4; + TX1CKPPS_TX1CKPPS3 : bit absolute TX1CKPPS.3; + TX1CKPPS_TX1CKPPS2 : bit absolute TX1CKPPS.2; + TX1CKPPS_TX1CKPPS1 : bit absolute TX1CKPPS.1; + TX1CKPPS_TX1CKPPS0 : bit absolute TX1CKPPS.0; + RX2DTPPS : byte absolute $1ECD; + RX2DTPPS_RX2DTPPS4 : bit absolute RX2DTPPS.4; + RX2DTPPS_RX2DTPPS3 : bit absolute RX2DTPPS.3; + RX2DTPPS_RX2DTPPS2 : bit absolute RX2DTPPS.2; + RX2DTPPS_RX2DTPPS1 : bit absolute RX2DTPPS.1; + RX2DTPPS_RX2DTPPS0 : bit absolute RX2DTPPS.0; + TX2CKPPS : byte absolute $1ECE; + TX2CKPPS_TX2CKPPS4 : bit absolute TX2CKPPS.4; + TX2CKPPS_TX2CKPPS3 : bit absolute TX2CKPPS.3; + TX2CKPPS_TX2CKPPS2 : bit absolute TX2CKPPS.2; + TX2CKPPS_TX2CKPPS1 : bit absolute TX2CKPPS.1; + TX2CKPPS_TX2CKPPS0 : bit absolute TX2CKPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVA7 : bit absolute INLVLA.7; + INLVLA_INLVA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVB7 : bit absolute INLVLB.7; + INLVLB_INLVB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVC7 : bit absolute INLVLC.7; + INLVLC_INLVC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + ODCONE : byte absolute $1F66; + SLRCONE : byte absolute $1F67; + INLVLE : byte absolute $1F68; + INLVLE_INLVE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEPEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + PCLATH_SHAD : byte absolute $1FE7; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-016:SFR'} // Bank 0 : TRISE + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01C:SFR'} // Bank 0 : LATE + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '29F-29F:SFR'} // Bank 5 : ADCPCON0 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLK, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLK, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3DAT, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79D:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5, PMD6, PMD7 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MD1CON0, MD1CON1, MD1SRC, MD1CARL, MD1CARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NCH, CM1PCH, CM2CON0, CM2CON1, CM2NCH, CM2PCH + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2INPPS, T4INPPS, T6INPPS + {$SET_STATE_RAM '1EA1-1EA5:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM '1EA9-1EAC:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM '1EB1-1EB3:SFR'} // Bank 61 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1ECE:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RX1DTPPS, TX1CKPPS, RX2DTPPS, TX2CKPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F6B:SFR'} // Bank 62 : WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:08'} // LATE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F9'} // ADCON1 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:1F'} // T1CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:1F'} // T3CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:1F'} // T5CLK bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '30E:BF'} // CCP1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '312:BF'} // CCP2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:EF'} // NCO1CLK bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3DAT bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:1F'} // CWG3AS1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:37'} // PIR7 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:37'} // PIE7 bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:C7'} // PMD0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:7F'} // PMD1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:80'} // PMD2 bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:67'} // PMD3 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:7F'} // PMD4 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:E0'} // PMD5 bits 4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '79C:33'} // PMD6 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:7F'} // PMD7 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:02'} // PCON1 bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '81B:7F'} // NVMADRH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MD1CON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MD1CON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MD1SRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MD1CARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MD1CARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PCH bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E12:3F'} // CLC1SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E13:3F'} // CLC1SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E14:3F'} // CLC1SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E15:3F'} // CLC1SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1C:3F'} // CLC2SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1D:3F'} // CLC2SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1E:3F'} // CLC2SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1F:3F'} // CLC2SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E26:3F'} // CLC3SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E27:3F'} // CLC3SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E28:3F'} // CLC3SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E29:3F'} // CLC3SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E30:3F'} // CLC4SEL0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E31:3F'} // CLC4SEL1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E32:3F'} // CLC4SEL2 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E33:3F'} // CLC4SEL3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:1F'} // INTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:1F'} // T0CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2DTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2CKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:00'} // ODCONE bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:00'} // SLRCONE bits 7,6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : RA0/ANA0/C1IN0-/C2IN0-/CLCIN0/IOCA0 + // Pin 2 : RA1/ANA1/C1N1-/C1N1+/CLCIN1/IOCA1 + // Pin 3 : RA2/ANA2/ADCVREF-/C1IN0+/C2IN0+/DAC1VREF-/DAC1OUT1/IOCA2 + // Pin 4 : RA3/ANA3/ADCVREF+/C1IN1+/DAC1VREF+/MDCARL/IOCA3 + // Pin 5 : RA4/ANA4/MDCARH/T0CKL/CCP5IN/IOCA4 + // Pin 6 : RA5/ANA5/MDSRC/SS1_n/IOCA5 + // Pin 7 : RA6/ANA6/OSC2/CLKOUT/IOCA6 + // Pin 8 : RA7/ANA7/OSC1/CLKIN/IOCA7 + // Pin 9 : RB0/ANB0/C2IN1+/CCP4IN/CWG1IN/ZCD1/INT0/IOCB0 + // Pin 10 : RB1/ANB1/C1IN3-/C2IN3-/CWG2IN/SLK2/SCL2/IOCB1 + // Pin 11 : RB2/ANB2/CWG3IN/SDI2/SDA2/SS2_n/IOCB2 + // Pin 12 : RB3/ANB3/C1IN2-/CSIN2-/IOCB3 + // Pin 13 : RB4/ANB4/ADACT/T5G/SMT2WIN/IOCB4 + // Pin 14 : RB5/ANB5/T1G/SMT2SIG/CCP3IN/IOCB5 + // Pin 15 : RB6/ANB6/CK2/CLCIN2/ICSPCLK/ICDCLK/IOCB6 + // Pin 16 : RB7/ANB7/DAC1OUT2/T6IN/RX2/DT2/ICSPDAT/ICDDAT/IOCB7 + // Pin 17 : RC0/ANC0/T1CKI/T3CK/T3G/SMT1WIN/SOSCO/IOCC0 + // Pin 18 : RC1/ANC1/SMT1SIG/CCP2IN/SOSCI/IOCC1 + // Pin 19 : RC2/ANC2/T5CKI/CCP1IN/IOCC2 + // Pin 20 : RC3/ANC3/T2IN/SCK1/SCL1/IOCC3 + // Pin 21 : RC4/ANC4/SDI1/SDA1/IOCC4 + // Pin 22 : RC5/ANC5/T4IN/IOCC5 + // Pin 23 : RC6/ANC6/CK1/IOCC6 + // Pin 24 : RC7/ANC7/RX1/DT1/IOCC7 + // Pin 25 : RE3/MCLR_n/VPP/IOCE3 + // Pin 26 : VDD + // Pin 27 : VSS + // Pin 28 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,5-22,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_RESERVED = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_RESERVED = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTS : Power-up Timer Enable bit + {$define _PWRTS_OFF = $3FFF} // PWRT disabled + {$define _PWRTS_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTS_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTS_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 2.45V + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCDDIS : Zero-cross detect disable + {$define _ZCDDIS_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCDDIS_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the 32kHz secondary oscillator + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_BB512 = $3FFF} // 512 words boot block size + {$define _BBSIZE_BB1K = $3FFE} // 1024 words boot block size + {$define _BBSIZE_BB2K = $3FFD} // 2048 words boot block size + {$define _BBSIZE_BB4K = $3FFC} // 4096 words boot block size + {$define _BBSIZE_BB8K = $3FFB} // 8192 words boot block size + {$define _BBSIZE_BB16K = $3FFA} // * half of user program memory + {$define _BBSIZE_BB32K = $3FF9} // * half of user program memory + {$define _BBSIZE_BB64K = $3FF8} // * half of user program memory + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block not write protected + {$define _WRTAPP_ON = $3F7F} // Application Block write protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block not write protected + {$define _WRTB_ON = $3EFF} // Boot Block write protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Register not write protected + {$define _WRTC_ON = $3DFF} // Configuration Register write protected + + // WRTD : Data EEPROM write protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF not write protected + {$define _WRTSAF_ON = $37FF} // SAF write protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F1847.pas b/devices17/PIC16F1847.pas new file mode 100644 index 00000000..c50b852d --- /dev/null +++ b/devices17/PIC16F1847.pas @@ -0,0 +1,903 @@ +unit PIC16F1847; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1847'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 18} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCL1IF : bit absolute PIR2.3; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCL1IE : bit absolute PIE2.3; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON0 : byte absolute $011D; + APFCON0_RXDTSEL : bit absolute APFCON0.7; + APFCON0_SDO1SEL : bit absolute APFCON0.6; + APFCON0_SS1SEL : bit absolute APFCON0.5; + APFCON0_P2BSEL : bit absolute APFCON0.4; + APFCON0_CCP2SEL : bit absolute APFCON0.3; + APFCON0_P1DSEL : bit absolute APFCON0.2; + APFCON0_P1CSEL : bit absolute APFCON0.1; + APFCON0_CCP1SEL : bit absolute APFCON0.0; + APFCON1 : byte absolute $011E; + APFCON1_TXCKSEL : bit absolute APFCON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUA : byte absolute $020C; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS : byte absolute $029E; + CCPTMRS_C4TSEL1 : bit absolute CCPTMRS.7; + CCPTMRS_C4TSEL0 : bit absolute CCPTMRS.6; + CCPTMRS_C3TSEL1 : bit absolute CCPTMRS.5; + CCPTMRS_C3TSEL0 : bit absolute CCPTMRS.4; + CCPTMRS_C2TSEL1 : bit absolute CCPTMRS.3; + CCPTMRS_C2TSEL0 : bit absolute CCPTMRS.2; + CCPTMRS_C1TSEL1 : bit absolute CCPTMRS.1; + CCPTMRS_C1TSEL0 : bit absolute CCPTMRS.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CLKRCON : byte absolute $039A; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKROE : bit absolute CLKRCON.6; + CLKRCON_CLKRSLR : bit absolute CLKRCON.5; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + MDCON : byte absolute $039C; + MDCON_MDEN : bit absolute MDCON.7; + MDCON_MDOE : bit absolute MDCON.6; + MDCON_MDSLR : bit absolute MDCON.5; + MDCON_MDOPOL : bit absolute MDCON.4; + MDCON_MDOUT : bit absolute MDCON.3; + MDCON_MDBIT : bit absolute MDCON.0; + MDSRC : byte absolute $039D; + MDSRC_MDMSODIS : bit absolute MDSRC.7; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $039E; + MDCARL_MDCLODIS : bit absolute MDCARL.7; + MDCARL_MDCLPOL : bit absolute MDCARL.6; + MDCARL_MDCLSYNC : bit absolute MDCARL.5; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $039F; + MDCARH_MDCHODIS : bit absolute MDCARH.7; + MDCARH_MDCHPOL : bit absolute MDCARH.6; + MDCARH_MDCHSYNC : bit absolute MDCARH.5; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00D:SFR'} // Bank 0 : PORTA, PORTB + {$SET_STATE_RAM '011-01C:SFR'} // Bank 0 : PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08D:SFR'} // Bank 1 : TRISA, TRISB + {$SET_STATE_RAM '091-09E:SFR'} // Bank 1 : PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10D:SFR'} // Bank 2 : LATA, LATB + {$SET_STATE_RAM '111-11B:SFR'} // Bank 2 : CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11E:SFR'} // Bank 2 : APFCON0, APFCON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-20D:SFR'} // Bank 4 : WPUA, WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29E:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-313:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '39A-39A:SFR'} // Bank 7 : CLKRCON + {$SET_STATE_RAM '39C-39F:SFR'} // Bank 7 : MDCON, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:F9'} // PIR2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:3A'} // PIR3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:03'} // PIR4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:F9'} // PIE2 bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:3A'} // PIE3 bits 7,6,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:03'} // PIE4 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '10C:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:01'} // APFCON1 bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:1F'} // ANSELA bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:FE'} // ANSELB bit 0 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20C:20'} // WPUA bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:3F'} // CCP3CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '39C:F9'} // MDCON bits 2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '39D:8F'} // MDSRC bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39E:EF'} // MDCARL bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '39F:EF'} // MDCARH bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RA2/AN2/C12IN2-/C12IN+/Vref-/DACOUT + // Pin 2 : RA3/AN3/C12IN3-/C1IN+/Vref+/C1OUT/CCP3/SRQ + // Pin 3 : RA4/AN4/C2OUT/T0CKI/CCP4/SRNQ + // Pin 4 : RA5/MCLR/Vpp/SS1 + // Pin 5 : Vss + // Pin 6 : RB0/T1G/CCP1/P1A/INT/SRI/FLT0 + // Pin 7 : RB1/AN11/RX/DT/SDA1/SDI1 + // Pin 8 : RB2/AN10/MDMIN/TX/CK/RX/DT/SDA2/SDI2/SDO1 + // Pin 9 : RB3/AN9/MDOUT/CCP1/P1A + // Pin 10 : RB4/AN8/SCL1/SCK1/MDCIN2 + // Pin 11 : RB5/AN7/P1B/TX/CK/SCL2/SCK2/SS1 + // Pin 12 : RB6/AN5/T1CKI/T1OSI/P1C/CCP2/P2A/ICSPCLK/ICDCLK + // Pin 13 : RB7/AN6/T1OSO/P1D/P2B/MDCIN1/ICSPDAT/ICDDAT + // Pin 14 : Vdd + // Pin 15 : RA6/OSC2/CLKOUT/CLKR/P1D/P2B/SDO1 + // Pin 16 : RA7/OSC1/CLKIN/P1C/CCP2/P2A + // Pin 17 : RA0/AN0/C12IN0-/SDO2 + // Pin 18 : RA1/AN1/C12IN1-/SS2 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-17,1-18,2-1,3-2,4-3,5-4,6-15,7-16'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-6,1-7,2-8,3-9,4-10,5-11,6-12,7-13'} // PORTB + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F18854.pas b/devices17/PIC16F18854.pas new file mode 100644 index 00000000..629cd805 --- /dev/null +++ b/devices17/PIC16F18854.pas @@ -0,0 +1,2721 @@ +unit PIC16F18854; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18854'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $0E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $0E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $0E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $0E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $0E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $0EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $0EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $0EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $0EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $0EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $0EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $0EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $0EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $0EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $0EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $0EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $0EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $0EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $0EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $0ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $0F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $0F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $0F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $0F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $0F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $0F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $0F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $0F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $0F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $0F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $0F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $0F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $0F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $0F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $0F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $0F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $0F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $0F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $0F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $0F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $0F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $0F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $0F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $0F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + WPUE : byte absolute $0F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $0F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $0F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $0F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $0F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-018:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'E0F-E37:SFR'} // Bank 28 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'E8F-E97:SFR'} // Bank 29 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E9C-E9E:SFR'} // Bank 29 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM 'EA1-EA5:SFR'} // Bank 29 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM 'EA9-EAC:SFR'} // Bank 29 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM 'EB1-EB3:SFR'} // Bank 29 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM 'EB8-EBE:SFR'} // Bank 29 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'EC3-EC3:SFR'} // Bank 29 : ADCACTPPS + {$SET_STATE_RAM 'EC5-ECC:SFR'} // Bank 29 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM 'F10-F27:SFR'} // Bank 30 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F38-F41:SFR'} // Bank 30 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM 'F43-F4C:SFR'} // Bank 30 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM 'F4E-F57:SFR'} // Bank 30 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM 'F65-F65:SFR'} // Bank 30 : WPUE + {$SET_STATE_RAM 'F68-F6B:SFR'} // Bank 30 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:F0'} // PWM7CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : AVSS/VSS + // Pin 9 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 11 : SOSCO/ANC0/IOCC0/RC0 + // Pin 12 : SOSCI/ANC1/IOCC1/RC1 + // Pin 13 : ANC2/IOCC2/RC2 + // Pin 14 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 15 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 16 : ANC5/IOCC5/RC5 + // Pin 17 : ANC6/IOCC6/RC6 + // Pin 18 : ANC7/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : AVDD/VDD + // Pin 21 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 22 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 23 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 24 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 25 : ANB4/IOCB4/RB4 + // Pin 26 : ANB5/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x07FF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x0FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18855.pas b/devices17/PIC16F18855.pas new file mode 100644 index 00000000..6be7b358 --- /dev/null +++ b/devices17/PIC16F18855.pas @@ -0,0 +1,2722 @@ +unit PIC16F18855; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18855'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCD1CON : byte absolute $091F; + ZCD1CON_INTP : bit absolute ZCD1CON.1; + ZCD1CON_INTN : bit absolute ZCD1CON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $0E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $0E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $0E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $0E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $0E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $0EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $0EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $0EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $0EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $0EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $0EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $0EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $0EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $0EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $0EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $0EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $0EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $0EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $0EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $0ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $0F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $0F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $0F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $0F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $0F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $0F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $0F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $0F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $0F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $0F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $0F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $0F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $0F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $0F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $0F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $0F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $0F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $0F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $0F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $0F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $0F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $0F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $0F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $0F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + WPUE : byte absolute $0F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $0F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $0F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $0F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $0F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-018:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCD1CON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'E0F-E37:SFR'} // Bank 28 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'E8F-E97:SFR'} // Bank 29 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E9C-E9E:SFR'} // Bank 29 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM 'EA1-EA5:SFR'} // Bank 29 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM 'EA9-EAC:SFR'} // Bank 29 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM 'EB1-EB3:SFR'} // Bank 29 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM 'EB8-EBE:SFR'} // Bank 29 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'EC3-EC3:SFR'} // Bank 29 : ADCACTPPS + {$SET_STATE_RAM 'EC5-ECC:SFR'} // Bank 29 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM 'F10-F27:SFR'} // Bank 30 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F38-F41:SFR'} // Bank 30 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM 'F43-F4C:SFR'} // Bank 30 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM 'F4E-F57:SFR'} // Bank 30 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM 'F65-F65:SFR'} // Bank 30 : WPUE + {$SET_STATE_RAM 'F68-F6B:SFR'} // Bank 30 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:F0'} // PWM7CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3/MCLR + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : AVSS/VSS + // Pin 9 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 11 : SOSCO/ANC0/IOCC0/RC0 + // Pin 12 : SOSCI/ANC1/IOCC1/RC1 + // Pin 13 : ANC2/IOCC2/RC2 + // Pin 14 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 15 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 16 : ANC5/IOCC5/RC5 + // Pin 17 : ANC6/IOCC6/RC6 + // Pin 18 : ANC7/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : AVDD/VDD + // Pin 21 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 22 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 23 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 24 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 25 : ANB4/IOCB4/RB4 + // Pin 26 : ANB5/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x0FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x1FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18856.pas b/devices17/PIC16F18856.pas new file mode 100644 index 00000000..b282b0bc --- /dev/null +++ b/devices17/PIC16F18856.pas @@ -0,0 +1,2740 @@ +unit PIC16F18856; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18856'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $0E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $0E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $0E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $0E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $0E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $0EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $0EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $0EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $0EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $0EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $0EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $0EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $0EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $0EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $0EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $0EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $0EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $0EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $0EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $0ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $0F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $0F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $0F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $0F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $0F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $0F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $0F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $0F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $0F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $0F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $0F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $0F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $0F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $0F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $0F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $0F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $0F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $0F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $0F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $0F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $0F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $0F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $0F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $0F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + WPUE : byte absolute $0F65; + WPUE_WPUE3 : bit absolute WPUE.3; + INLVLE : byte absolute $0F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $0F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $0F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $0F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-018:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E37:SFR'} // Bank 28 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'E8F-E97:SFR'} // Bank 29 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E9C-E9E:SFR'} // Bank 29 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM 'EA1-EA5:SFR'} // Bank 29 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM 'EA9-EAC:SFR'} // Bank 29 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM 'EB1-EB3:SFR'} // Bank 29 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM 'EB8-EBE:SFR'} // Bank 29 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'EC3-EC3:SFR'} // Bank 29 : ADCACTPPS + {$SET_STATE_RAM 'EC5-ECC:SFR'} // Bank 29 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM 'F10-F27:SFR'} // Bank 30 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM 'F38-F41:SFR'} // Bank 30 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM 'F43-F4C:SFR'} // Bank 30 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM 'F4E-F57:SFR'} // Bank 30 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM 'F65-F65:SFR'} // Bank 30 : WPUE + {$SET_STATE_RAM 'F68-F6B:SFR'} // Bank 30 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:F0'} // PWM7CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : AVSS/VSS + // Pin 9 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 11 : SOSCO/ANC0/IOCC0/RC0 + // Pin 12 : SOSCI/ANC1/IOCC1/RC1 + // Pin 13 : ANC2/IOCC2/RC2 + // Pin 14 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 15 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 16 : ANC5/IOCC5/RC5 + // Pin 17 : ANC6/IOCC6/RC6 + // Pin 18 : ANC7/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : AVDD/VDD + // Pin 21 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 22 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 23 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 24 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 25 : ANB4/IOCB4/RB4 + // Pin 26 : ANB5/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:! (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x1FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x3FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18857.pas b/devices17/PIC16F18857.pas new file mode 100644 index 00000000..9bab3466 --- /dev/null +++ b/devices17/PIC16F18857.pas @@ -0,0 +1,2770 @@ +unit PIC16F18857; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18857'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 32768} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $1E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $1E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $1E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $1EA5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $1EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $1EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $1EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $1ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $1ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $1F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $1F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $1F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $1F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $1F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $1F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + WPUE : byte absolute $1F65; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD5 : bit absolute BSR_SHAD.5; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, TRISA, TRISB, TRISC + {$SET_STATE_RAM '016-018:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CEF:GPR'} + {$SET_STATE_RAM 'D20-D6F:GPR'} + {$SET_STATE_RAM 'DA0-DEF:GPR'} + {$SET_STATE_RAM 'E20-E6F:GPR'} + {$SET_STATE_RAM 'EA0-EEF:GPR'} + {$SET_STATE_RAM 'F20-F6F:GPR'} + {$SET_STATE_RAM 'FA0-FEF:GPR'} + {$SET_STATE_RAM '1020-106F:GPR'} + {$SET_STATE_RAM '10A0-10EF:GPR'} + {$SET_STATE_RAM '1120-116F:GPR'} + {$SET_STATE_RAM '11A0-11EF:GPR'} + {$SET_STATE_RAM '1220-126F:GPR'} + {$SET_STATE_RAM '12A0-12EF:GPR'} + {$SET_STATE_RAM '1320-136F:GPR'} + {$SET_STATE_RAM '13A0-13EF:GPR'} + {$SET_STATE_RAM '1420-146F:GPR'} + {$SET_STATE_RAM '14A0-14EF:GPR'} + {$SET_STATE_RAM '1520-156F:GPR'} + {$SET_STATE_RAM '15A0-15EF:GPR'} + {$SET_STATE_RAM '1620-166F:GPR'} + {$SET_STATE_RAM '16A0-16EF:GPR'} + {$SET_STATE_RAM '1720-176F:GPR'} + {$SET_STATE_RAM '17A0-17EF:GPR'} + {$SET_STATE_RAM '1820-186F:GPR'} + {$SET_STATE_RAM '18A0-18EF:GPR'} + {$SET_STATE_RAM '1920-196F:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM '1EA1-1EA5:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM '1EA9-1EAC:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM '1EB1-1EB3:SFR'} // Bank 61 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM '1F10-1F27:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F41:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM '1F43-1F4C:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM '1F4E-1F57:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA5:1F'} // CCP5PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:3F'} // BSR_SHAD bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : AVSS/VSS + // Pin 9 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 10 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 11 : SOSCO/ANC0/IOCC0/RC0 + // Pin 12 : SOSCI/ANC1/IOCC1/RC1 + // Pin 13 : ANC2/IOCC2/RC2 + // Pin 14 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 15 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 16 : ANC5/IOCC5/RC5 + // Pin 17 : ANC6/IOCC6/RC6 + // Pin 18 : ANC7/IOCC7/RC7 + // Pin 19 : VSS + // Pin 20 : AVDD/VDD + // Pin 21 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 22 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 23 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 24 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 25 : ANB4/IOCB4/RB4 + // Pin 26 : ANB5/IOCB5/RB5 + // Pin 27 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 28 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x3FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x7FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18875.pas b/devices17/PIC16F18875.pas new file mode 100644 index 00000000..cf65036d --- /dev/null +++ b/devices17/PIC16F18875.pas @@ -0,0 +1,2957 @@ +unit PIC16F18875; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18875'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0014; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0015; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $0019; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001A; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCD1CON : byte absolute $091F; + ZCD1CON_INTP : bit absolute ZCD1CON.1; + ZCD1CON_INTN : bit absolute ZCD1CON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $0E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $0E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $0E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $0E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $0E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $0EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $0EA5; + CCP5PPS_CCP5PPS5 : bit absolute CCP5PPS.5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $0EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $0EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $0EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $0EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $0EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $0EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $0EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $0EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $0EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $0EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $0EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $0EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $0ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $0F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $0F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $0F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $0F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $0F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $0F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $0F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $0F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $0F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $0F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $0F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $0F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $0F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $0F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $0F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $0F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $0F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $0F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $0F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $0F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $0F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $0F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $0F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $0F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + ANSELD : byte absolute $0F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $0F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $0F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $0F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $0F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + CCDND : byte absolute $0F61; + CCDND_CCDND7 : bit absolute CCDND.7; + CCDND_CCDND6 : bit absolute CCDND.6; + CCDND_CCDND5 : bit absolute CCDND.5; + CCDND_CCDND4 : bit absolute CCDND.4; + CCDND_CCDND3 : bit absolute CCDND.3; + CCDND_CCDND2 : bit absolute CCDND.2; + CCDND_CCDND1 : bit absolute CCDND.1; + CCDND_CCDND0 : bit absolute CCDND.0; + CCDPD : byte absolute $0F62; + CCDPD_CCDPD7 : bit absolute CCDPD.7; + CCDPD_CCDPD6 : bit absolute CCDPD.6; + CCDPD_CCDPD5 : bit absolute CCDPD.5; + CCDPD_CCDPD4 : bit absolute CCDPD.4; + CCDPD_CCDPD3 : bit absolute CCDPD.3; + CCDPD_CCDPD2 : bit absolute CCDPD.2; + CCDPD_CCDPD1 : bit absolute CCDPD.1; + CCDPD_CCDPD0 : bit absolute CCDPD.0; + ANSELE : byte absolute $0F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $0F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $0F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $0F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $0F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $0F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $0F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $0F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + CCDNE : byte absolute $0F6C; + CCDNE_CCDNE2 : bit absolute CCDNE.2; + CCDNE_CCDNE1 : bit absolute CCDNE.1; + CCDNE_CCDNE0 : bit absolute CCDNE.0; + CCDPE : byte absolute $0F6D; + CCDPE_CCDPE2 : bit absolute CCDPE.2; + CCDPE_CCDPE1 : bit absolute CCDPE.1; + CCDPE_CCDPE0 : bit absolute CCDPE.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01A:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, TRISA, TRISB, TRISC, TRISD, TRISE, LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCD1CON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'E0F-E37:SFR'} // Bank 28 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'E8F-E97:SFR'} // Bank 29 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E9C-E9E:SFR'} // Bank 29 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM 'EA1-EA5:SFR'} // Bank 29 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM 'EA9-EAC:SFR'} // Bank 29 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM 'EB1-EB3:SFR'} // Bank 29 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM 'EB8-EBE:SFR'} // Bank 29 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'EC3-EC3:SFR'} // Bank 29 : ADCACTPPS + {$SET_STATE_RAM 'EC5-ECC:SFR'} // Bank 29 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM 'F10-F32:SFR'} // Bank 30 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F38-F41:SFR'} // Bank 30 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM 'F43-F4C:SFR'} // Bank 30 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM 'F4E-F57:SFR'} // Bank 30 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM 'F59-F5D:SFR'} // Bank 30 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM 'F61-F62:SFR'} // Bank 30 : CCDND, CCDPD + {$SET_STATE_RAM 'F64-F6D:SFR'} // Bank 30 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF, CCDNE, CCDPE + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:F0'} // PWM7CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCD1CON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // CCP5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6C:07'} // CCDNE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6D:07'} // CCDPE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3/MCLR + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : ANE0/RE0 + // Pin 9 : ANE1/RE1 + // Pin 10 : ANE2/RE2 + // Pin 11 : VDD + // Pin 12 : AVSS/VSS + // Pin 13 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 15 : SOSCO/ANC0/IOCC0/RC0 + // Pin 16 : SOSCI/ANC1/IOCC1/RC1 + // Pin 17 : ANC2/IOCC2/RC2 + // Pin 18 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 19 : AND0/SMB_I2C/RD0 + // Pin 20 : AND1/SMB_I2C/RD1 + // Pin 21 : AND2/RD2 + // Pin 22 : AND3/RD3 + // Pin 23 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 24 : ANC5/IOCC5/RC5 + // Pin 25 : ANC6/IOCC6/RC6 + // Pin 26 : ANC7/IOCC7/RC7 + // Pin 27 : AND4/RD4 + // Pin 28 : AND5/RD5 + // Pin 29 : AND6/RD6 + // Pin 30 : AND7/RD7 + // Pin 31 : VSS + // Pin 32 : AVDD/VDD + // Pin 33 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 34 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 35 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 36 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 37 : ANB4/IOCB4/RB4 + // Pin 38 : ANB5/IOCB5/RB5 + // Pin 39 : ICDCLK/ANB6/IOCB6/RB6 + // Pin 40 : ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x0FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x1FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18876.pas b/devices17/PIC16F18876.pas new file mode 100644 index 00000000..7f0d1ee2 --- /dev/null +++ b/devices17/PIC16F18876.pas @@ -0,0 +1,2975 @@ +unit PIC16F18876; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18876'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0014; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0015; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $0019; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001A; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM1 : bit absolute VREGCON.1; + VREGCON_VREGPM0 : bit absolute VREGCON.0; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $0E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $0E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $0E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $0E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $0E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $0E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $0E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $0E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $0E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $0E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $0E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $0E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $0E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $0E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $0E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $0E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $0E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $0E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $0E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $0E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $0E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $0E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $0E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $0E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $0E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $0E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $0E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $0E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $0E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $0E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $0E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $0E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $0E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $0E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $0E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $0E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $0E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $0E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $0E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $0E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $0E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $0E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $0E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $0E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $0E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $0E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $0E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $0E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $0E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $0E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $0E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $0E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $0E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $0EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $0EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $0EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $0EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $0EA5; + CCP5PPS_CCP5PPS5 : bit absolute CCP5PPS.5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $0EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $0EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $0EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $0EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $0EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $0EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $0EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $0EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $0EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $0EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $0EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $0EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $0EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $0EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $0EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $0EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $0EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $0EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $0EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $0EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $0ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $0ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $0ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $0F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $0F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $0F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $0F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $0F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $0F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $0F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $0F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $0F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $0F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $0F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $0F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $0F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $0F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $0F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $0F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $0F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $0F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $0F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $0F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $0F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $0F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $0F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $0F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $0F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $0F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $0F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $0F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $0F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $0F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $0F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $0F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $0F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $0F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $0F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $0F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $0F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $0F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $0F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $0F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $0F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $0F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $0F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $0F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $0F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $0F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $0F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $0F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $0F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $0F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $0F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $0F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $0F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $0F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $0F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $0F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $0F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $0F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $0F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $0F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $0F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $0F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $0F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + ANSELD : byte absolute $0F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $0F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $0F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $0F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $0F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + CCDND : byte absolute $0F61; + CCDND_CCDND7 : bit absolute CCDND.7; + CCDND_CCDND6 : bit absolute CCDND.6; + CCDND_CCDND5 : bit absolute CCDND.5; + CCDND_CCDND4 : bit absolute CCDND.4; + CCDND_CCDND3 : bit absolute CCDND.3; + CCDND_CCDND2 : bit absolute CCDND.2; + CCDND_CCDND1 : bit absolute CCDND.1; + CCDND_CCDND0 : bit absolute CCDND.0; + CCDPD : byte absolute $0F62; + CCDPD_CCDPD7 : bit absolute CCDPD.7; + CCDPD_CCDPD6 : bit absolute CCDPD.6; + CCDPD_CCDPD5 : bit absolute CCDPD.5; + CCDPD_CCDPD4 : bit absolute CCDPD.4; + CCDPD_CCDPD3 : bit absolute CCDPD.3; + CCDPD_CCDPD2 : bit absolute CCDPD.2; + CCDPD_CCDPD1 : bit absolute CCDPD.1; + CCDPD_CCDPD0 : bit absolute CCDPD.0; + ANSELE : byte absolute $0F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $0F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $0F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $0F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $0F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $0F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $0F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $0F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + CCDNE : byte absolute $0F6C; + CCDNE_CCDNE2 : bit absolute CCDNE.2; + CCDNE_CCDNE1 : bit absolute CCDNE.1; + CCDNE_CCDNE0 : bit absolute CCDNE.0; + CCDPE : byte absolute $0F6D; + CCDPE_CCDPE2 : bit absolute CCDPE.2; + CCDPE_CCDPE1 : bit absolute CCDPE.1; + CCDPE_CCDPE0 : bit absolute CCDPE.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01A:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, TRISA, TRISB, TRISC, TRISD, TRISE, LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E0F-E37:SFR'} // Bank 28 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM 'E8F-E97:SFR'} // Bank 29 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM 'E9C-E9E:SFR'} // Bank 29 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM 'EA1-EA5:SFR'} // Bank 29 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM 'EA9-EAC:SFR'} // Bank 29 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM 'EB1-EB3:SFR'} // Bank 29 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM 'EB8-EBE:SFR'} // Bank 29 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM 'EC3-EC3:SFR'} // Bank 29 : ADCACTPPS + {$SET_STATE_RAM 'EC5-ECC:SFR'} // Bank 29 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM 'F10-F32:SFR'} // Bank 30 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM 'F38-F41:SFR'} // Bank 30 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM 'F43-F4C:SFR'} // Bank 30 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM 'F4E-F57:SFR'} // Bank 30 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM 'F59-F5D:SFR'} // Bank 30 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM 'F61-F62:SFR'} // Bank 30 : CCDND, CCDPD + {$SET_STATE_RAM 'F64-F6D:SFR'} // Bank 30 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF, CCDNE, CCDPE + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:DD'} // ADCON0 bits 5,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:F0'} // PWM6CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:F0'} // PWM7CON bits 3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA5:3F'} // CCP5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6C:07'} // CCDNE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'F6D:07'} // CCDPE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : ANE0/RE0 + // Pin 9 : ANE1/RE1 + // Pin 10 : ANE2/RE2 + // Pin 11 : VDD + // Pin 12 : AVSS/VSS + // Pin 13 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 15 : SOSCO/ANC0/IOCC0/RC0 + // Pin 16 : SOSCI/ANC1/IOCC1/RC1 + // Pin 17 : ANC2/IOCC2/RC2 + // Pin 18 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 19 : AND0/SMB_I2C/RD0 + // Pin 20 : AND1/SMB_I2C/RD1 + // Pin 21 : AND2/RD2 + // Pin 22 : AND3/RD3 + // Pin 23 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 24 : ANC5/IOCC5/RC5 + // Pin 25 : ANC6/IOCC6/RC6 + // Pin 26 : ANC7/IOCC7/RC7 + // Pin 27 : AND4/RD4 + // Pin 28 : AND5/RD5 + // Pin 29 : AND6/RD6 + // Pin 30 : AND7/RD7 + // Pin 31 : VSS + // Pin 32 : AVDD/VDD + // Pin 33 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 34 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 35 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 36 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 37 : ANB4/IOCB4/RB4 + // Pin 38 : ANB5/IOCB5/RB5 + // Pin 39 : ICDCLK/ANB6/IOCB6/RB6 + // Pin 40 : ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x1FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x3FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F18877.pas b/devices17/PIC16F18877.pas new file mode 100644 index 00000000..c3fcfd21 --- /dev/null +++ b/devices17/PIC16F18877.pas @@ -0,0 +1,3001 @@ +unit PIC16F18877; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F18877'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 32768} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0011; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0012; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0013; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0014; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0015; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0016; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0017; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $0018; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $0019; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001A; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + TMR0L : byte absolute $001C; + TMR0H : byte absolute $001D; + T0CON0 : byte absolute $001E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $001F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + ADRESL : byte absolute $008C; + ADRESH : byte absolute $008D; + ADPREVL : byte absolute $008E; + ADPREVH : byte absolute $008F; + ADACCL : byte absolute $0090; + ADACCH : byte absolute $0091; + ADCON0 : byte absolute $0093; + ADCON0_ADON : bit absolute ADCON0.7; + ADCON0_ADCONT : bit absolute ADCON0.6; + ADCON0_ADCS : bit absolute ADCON0.4; + ADCON0_ADFM1 : bit absolute ADCON0.3; + ADCON0_ADFM0 : bit absolute ADCON0.2; + ADCON0_ADGO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0094; + ADCON1_ADPPOL : bit absolute ADCON1.7; + ADCON1_ADIPEN : bit absolute ADCON1.6; + ADCON1_ADGPOL : bit absolute ADCON1.5; + ADCON1_ADDSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0095; + ADCON2_ADPSIS : bit absolute ADCON2.7; + ADCON2_ADCRS2 : bit absolute ADCON2.6; + ADCON2_ADCRS1 : bit absolute ADCON2.5; + ADCON2_ADCRS0 : bit absolute ADCON2.4; + ADCON2_ADACLR : bit absolute ADCON2.3; + ADCON2_ADMD2 : bit absolute ADCON2.2; + ADCON2_ADMD1 : bit absolute ADCON2.1; + ADCON2_ADMD0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0096; + ADCON3_ADCALC2 : bit absolute ADCON3.6; + ADCON3_ADCALC1 : bit absolute ADCON3.5; + ADCON3_ADCALC0 : bit absolute ADCON3.4; + ADCON3_ADTMD2 : bit absolute ADCON3.2; + ADCON3_ADTMD1 : bit absolute ADCON3.1; + ADCON3_ADTMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0097; + ADSTAT_ADAOV : bit absolute ADSTAT.7; + ADSTAT_ADUTHR : bit absolute ADSTAT.6; + ADSTAT_ADLTHR : bit absolute ADSTAT.5; + ADSTAT_ADMATH : bit absolute ADSTAT.4; + ADSTAT_ADMACT : bit absolute ADSTAT.3; + ADSTAT_ADSTAT2 : bit absolute ADSTAT.2; + ADSTAT_ADSTAT1 : bit absolute ADSTAT.1; + ADSTAT_ADSTAT0 : bit absolute ADSTAT.0; + ADCLK : byte absolute $0098; + ADCLK_ADCCS5 : bit absolute ADCLK.5; + ADCLK_ADCCS4 : bit absolute ADCLK.4; + ADCLK_ADCCS3 : bit absolute ADCLK.3; + ADCLK_ADCCS2 : bit absolute ADCLK.2; + ADCLK_ADCCS1 : bit absolute ADCLK.1; + ADCLK_ADCCS0 : bit absolute ADCLK.0; + ADACT : byte absolute $0099; + ADACT_ADACT4 : bit absolute ADACT.4; + ADACT_ADACT3 : bit absolute ADACT.3; + ADACT_ADACT2 : bit absolute ADACT.2; + ADACT_ADACT1 : bit absolute ADACT.1; + ADACT_ADACT0 : bit absolute ADACT.0; + ADREF : byte absolute $009A; + ADREF_ADNREF : bit absolute ADREF.4; + ADREF_ADPREF1 : bit absolute ADREF.1; + ADREF_ADPREF0 : bit absolute ADREF.0; + ADCAP : byte absolute $009B; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPRE : byte absolute $009C; + ADACQ : byte absolute $009D; + ADPCH : byte absolute $009E; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADCNT : byte absolute $010C; + ADRPT : byte absolute $010D; + ADLTHL : byte absolute $010E; + ADLTHH : byte absolute $010F; + ADUTHL : byte absolute $0110; + ADUTHH : byte absolute $0111; + ADSTPTL : byte absolute $0112; + ADSTPTH : byte absolute $0113; + ADFLTRL : byte absolute $0114; + ADFLTRH : byte absolute $0115; + ADERRL : byte absolute $0116; + ADERRH : byte absolute $0117; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0196; + SSP2ADD : byte absolute $0197; + SSP2MSK : byte absolute $0198; + SSP2STAT : byte absolute $0199; + SSP2CON1 : byte absolute $019A; + SSP2CON2 : byte absolute $019B; + SSP2CON3 : byte absolute $019C; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1CON_ON : bit absolute T1CON.0; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GPOL : bit absolute T1GCON.6; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + T1CLK_CS3 : bit absolute T1CLK.3; + T1CLK_CS2 : bit absolute T1CLK.2; + T1CLK_CS1 : bit absolute T1CLK.1; + T1CLK_CS0 : bit absolute T1CLK.0; + TMR3L : byte absolute $0212; + TMR3L_TMR3L7 : bit absolute TMR3L.7; + TMR3L_TMR3L6 : bit absolute TMR3L.6; + TMR3L_TMR3L5 : bit absolute TMR3L.5; + TMR3L_TMR3L4 : bit absolute TMR3L.4; + TMR3L_TMR3L3 : bit absolute TMR3L.3; + TMR3L_TMR3L2 : bit absolute TMR3L.2; + TMR3L_TMR3L1 : bit absolute TMR3L.1; + TMR3L_TMR3L0 : bit absolute TMR3L.0; + TMR3H : byte absolute $0213; + TMR3H_TMR3H7 : bit absolute TMR3H.7; + TMR3H_TMR3H6 : bit absolute TMR3H.6; + TMR3H_TMR3H5 : bit absolute TMR3H.5; + TMR3H_TMR3H4 : bit absolute TMR3H.4; + TMR3H_TMR3H3 : bit absolute TMR3H.3; + TMR3H_TMR3H2 : bit absolute TMR3H.2; + TMR3H_TMR3H1 : bit absolute TMR3H.1; + TMR3H_TMR3H0 : bit absolute TMR3H.0; + T3CON : byte absolute $0214; + T3GCON : byte absolute $0215; + T3GATE : byte absolute $0216; + T3CLK : byte absolute $0217; + TMR5L : byte absolute $0218; + TMR5L_TMR5L7 : bit absolute TMR5L.7; + TMR5L_TMR5L6 : bit absolute TMR5L.6; + TMR5L_TMR5L5 : bit absolute TMR5L.5; + TMR5L_TMR5L4 : bit absolute TMR5L.4; + TMR5L_TMR5L3 : bit absolute TMR5L.3; + TMR5L_TMR5L2 : bit absolute TMR5L.2; + TMR5L_TMR5L1 : bit absolute TMR5L.1; + TMR5L_TMR5L0 : bit absolute TMR5L.0; + TMR5H : byte absolute $0219; + TMR5H_TMR5H7 : bit absolute TMR5H.7; + TMR5H_TMR5H6 : bit absolute TMR5H.6; + TMR5H_TMR5H5 : bit absolute TMR5H.5; + TMR5H_TMR5H4 : bit absolute TMR5H.4; + TMR5H_TMR5H3 : bit absolute TMR5H.3; + TMR5H_TMR5H2 : bit absolute TMR5H.2; + TMR5H_TMR5H1 : bit absolute TMR5H.1; + TMR5H_TMR5H0 : bit absolute TMR5H.0; + T5CON : byte absolute $021A; + T5GCON : byte absolute $021B; + T5GATE : byte absolute $021C; + T5CLK : byte absolute $021D; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $021F; + CCPTMRS1_P7TSEL1 : bit absolute CCPTMRS1.5; + CCPTMRS1_P7TSEL0 : bit absolute CCPTMRS1.4; + CCPTMRS1_P6TSEL1 : bit absolute CCPTMRS1.3; + CCPTMRS1_P6TSEL0 : bit absolute CCPTMRS1.2; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2HLT_MODE2 : bit absolute T2HLT.2; + T2HLT_MODE1 : bit absolute T2HLT.1; + T2HLT_MODE0 : bit absolute T2HLT.0; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + T6TMR : byte absolute $0298; + T6PR : byte absolute $0299; + T6CON : byte absolute $029A; + T6HLT : byte absolute $029B; + T6CLKCON : byte absolute $029C; + T6RST : byte absolute $029D; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + CCPR3L : byte absolute $0314; + CCPR3H : byte absolute $0315; + CCP3CON : byte absolute $0316; + CCP3CAP : byte absolute $0317; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CAP : byte absolute $031B; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CAP : byte absolute $031F; + PWM6DCL : byte absolute $038C; + PWM6DCL_DC1 : bit absolute PWM6DCL.7; + PWM6DCL_DC0 : bit absolute PWM6DCL.6; + PWM6DCH : byte absolute $038D; + PWM6CON : byte absolute $038E; + PWM6CON_POL : bit absolute PWM6CON.4; + PWM7DCL : byte absolute $0390; + PWM7DCH : byte absolute $0391; + PWM7CON : byte absolute $0392; + SCANLADRL : byte absolute $040C; + SCANLADRH : byte absolute $040D; + SCANHADRL : byte absolute $040E; + SCANHADRH : byte absolute $040F; + SCANCON0 : byte absolute $0410; + SCANCON0_SCANGO : bit absolute SCANCON0.6; + SCANCON0_BUSY : bit absolute SCANCON0.5; + SCANCON0_INVALID : bit absolute SCANCON0.4; + SCANCON0_INTM : bit absolute SCANCON0.3; + SCANTRIG : byte absolute $0411; + SCANTRIG_TSEL3 : bit absolute SCANTRIG.3; + SCANTRIG_TSEL2 : bit absolute SCANTRIG.2; + SCANTRIG_TSEL1 : bit absolute SCANTRIG.1; + SCANTRIG_TSEL0 : bit absolute SCANTRIG.0; + CRCDATL : byte absolute $0416; + CRCDATL_DATA7 : bit absolute CRCDATL.7; + CRCDATL_DATA6 : bit absolute CRCDATL.6; + CRCDATL_DATA5 : bit absolute CRCDATL.5; + CRCDATL_DATA4 : bit absolute CRCDATL.4; + CRCDATL_DATA3 : bit absolute CRCDATL.3; + CRCDATL_DATA2 : bit absolute CRCDATL.2; + CRCDATL_DATA1 : bit absolute CRCDATL.1; + CRCDATL_DATA0 : bit absolute CRCDATL.0; + CRCDATH : byte absolute $0417; + CRCDATH_DATA15 : bit absolute CRCDATH.7; + CRCDATH_DATA14 : bit absolute CRCDATH.6; + CRCDATH_DATA13 : bit absolute CRCDATH.5; + CRCDATH_DATA12 : bit absolute CRCDATH.4; + CRCDATH_DATA11 : bit absolute CRCDATH.3; + CRCDATH_DATA10 : bit absolute CRCDATH.2; + CRCDATH_DATA9 : bit absolute CRCDATH.1; + CRCDATH_DATA8 : bit absolute CRCDATH.0; + CRCACCL : byte absolute $0418; + CRCACCL_ACC7 : bit absolute CRCACCL.7; + CRCACCL_ACC6 : bit absolute CRCACCL.6; + CRCACCL_ACC5 : bit absolute CRCACCL.5; + CRCACCL_ACC4 : bit absolute CRCACCL.4; + CRCACCL_ACC3 : bit absolute CRCACCL.3; + CRCACCL_ACC2 : bit absolute CRCACCL.2; + CRCACCL_ACC1 : bit absolute CRCACCL.1; + CRCACCL_ACC0 : bit absolute CRCACCL.0; + CRCACCH : byte absolute $0419; + CRCACCH_ACC15 : bit absolute CRCACCH.7; + CRCACCH_ACC14 : bit absolute CRCACCH.6; + CRCACCH_ACC13 : bit absolute CRCACCH.5; + CRCACCH_ACC12 : bit absolute CRCACCH.4; + CRCACCH_ACC11 : bit absolute CRCACCH.3; + CRCACCH_ACC10 : bit absolute CRCACCH.2; + CRCACCH_ACC9 : bit absolute CRCACCH.1; + CRCACCH_ACC8 : bit absolute CRCACCH.0; + CRCSHIFTL : byte absolute $041A; + CRCSHIFTL_SHFT7 : bit absolute CRCSHIFTL.7; + CRCSHIFTL_SHFT6 : bit absolute CRCSHIFTL.6; + CRCSHIFTL_SHFT5 : bit absolute CRCSHIFTL.5; + CRCSHIFTL_SHFT4 : bit absolute CRCSHIFTL.4; + CRCSHIFTL_SHFT3 : bit absolute CRCSHIFTL.3; + CRCSHIFTL_SHFT2 : bit absolute CRCSHIFTL.2; + CRCSHIFTL_SHFT1 : bit absolute CRCSHIFTL.1; + CRCSHIFTL_SHFT0 : bit absolute CRCSHIFTL.0; + CRCSHIFTH : byte absolute $041B; + CRCSHIFTH_SHFT15 : bit absolute CRCSHIFTH.7; + CRCSHIFTH_SHFT14 : bit absolute CRCSHIFTH.6; + CRCSHIFTH_SHFT13 : bit absolute CRCSHIFTH.5; + CRCSHIFTH_SHFT12 : bit absolute CRCSHIFTH.4; + CRCSHIFTH_SHFT11 : bit absolute CRCSHIFTH.3; + CRCSHIFTH_SHFT10 : bit absolute CRCSHIFTH.2; + CRCSHIFTH_SHFT9 : bit absolute CRCSHIFTH.1; + CRCSHIFTH_SHFT8 : bit absolute CRCSHIFTH.0; + CRCXORL : byte absolute $041C; + CRCXORL_X7 : bit absolute CRCXORL.7; + CRCXORL_X6 : bit absolute CRCXORL.6; + CRCXORL_X5 : bit absolute CRCXORL.5; + CRCXORL_X4 : bit absolute CRCXORL.4; + CRCXORL_X3 : bit absolute CRCXORL.3; + CRCXORL_X2 : bit absolute CRCXORL.2; + CRCXORL_X1 : bit absolute CRCXORL.1; + CRCXORH : byte absolute $041D; + CRCXORH_X15 : bit absolute CRCXORH.7; + CRCXORH_X14 : bit absolute CRCXORH.6; + CRCXORH_X13 : bit absolute CRCXORH.5; + CRCXORH_X12 : bit absolute CRCXORH.4; + CRCXORH_X11 : bit absolute CRCXORH.3; + CRCXORH_X10 : bit absolute CRCXORH.2; + CRCXORH_X9 : bit absolute CRCXORH.1; + CRCXORH_X8 : bit absolute CRCXORH.0; + CRCCON0 : byte absolute $041E; + CRCCON0_CRCGO : bit absolute CRCCON0.6; + CRCCON0_ACCM : bit absolute CRCCON0.4; + CRCCON0_SHIFTM : bit absolute CRCCON0.1; + CRCCON0_FULL : bit absolute CRCCON0.0; + CRCCON1 : byte absolute $041F; + CRCCON1_DLEN3 : bit absolute CRCCON1.7; + CRCCON1_DLEN2 : bit absolute CRCCON1.6; + CRCCON1_DLEN1 : bit absolute CRCCON1.5; + CRCCON1_DLEN0 : bit absolute CRCCON1.4; + CRCCON1_PLEN3 : bit absolute CRCCON1.3; + CRCCON1_PLEN2 : bit absolute CRCCON1.2; + CRCCON1_PLEN1 : bit absolute CRCCON1.1; + CRCCON1_PLEN0 : bit absolute CRCCON1.0; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_PS1 : bit absolute SMT1CON0.1; + SMT1CON0_PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + SMT2TMRL : byte absolute $050C; + SMT2TMRH : byte absolute $050D; + SMT2TMRU : byte absolute $050E; + SMT2CPRL : byte absolute $050F; + SMT2CPRH : byte absolute $0510; + SMT2CPRU : byte absolute $0511; + SMT2CPWL : byte absolute $0512; + SMT2CPWH : byte absolute $0513; + SMT2CPWU : byte absolute $0514; + SMT2PRL : byte absolute $0515; + SMT2PRH : byte absolute $0516; + SMT2PRU : byte absolute $0517; + SMT2CON0 : byte absolute $0518; + SMT2CON1 : byte absolute $0519; + SMT2STAT : byte absolute $051A; + SMT2CLK : byte absolute $051B; + SMT2SIG : byte absolute $051C; + SMT2WIN : byte absolute $051D; + NCO1ACCL : byte absolute $058C; + NCO1ACCL_NCO1ACC7 : bit absolute NCO1ACCL.7; + NCO1ACCL_NCO1ACC6 : bit absolute NCO1ACCL.6; + NCO1ACCL_NCO1ACC5 : bit absolute NCO1ACCL.5; + NCO1ACCL_NCO1ACC4 : bit absolute NCO1ACCL.4; + NCO1ACCL_NCO1ACC3 : bit absolute NCO1ACCL.3; + NCO1ACCL_NCO1ACC2 : bit absolute NCO1ACCL.2; + NCO1ACCL_NCO1ACC1 : bit absolute NCO1ACCL.1; + NCO1ACCL_NCO1ACC0 : bit absolute NCO1ACCL.0; + NCO1ACCH : byte absolute $058D; + NCO1ACCH_NCO1ACC15 : bit absolute NCO1ACCH.7; + NCO1ACCH_NCO1ACC14 : bit absolute NCO1ACCH.6; + NCO1ACCH_NCO1ACC13 : bit absolute NCO1ACCH.5; + NCO1ACCH_NCO1ACC12 : bit absolute NCO1ACCH.4; + NCO1ACCH_NCO1ACC11 : bit absolute NCO1ACCH.3; + NCO1ACCH_NCO1ACC10 : bit absolute NCO1ACCH.2; + NCO1ACCH_NCO1ACC9 : bit absolute NCO1ACCH.1; + NCO1ACCH_NCO1ACC8 : bit absolute NCO1ACCH.0; + NCO1ACCU : byte absolute $058E; + NCO1ACCU_NCO1ACC19 : bit absolute NCO1ACCU.3; + NCO1ACCU_NCO1ACC18 : bit absolute NCO1ACCU.2; + NCO1ACCU_NCO1ACC17 : bit absolute NCO1ACCU.1; + NCO1ACCU_NCO1ACC16 : bit absolute NCO1ACCU.0; + NCO1INCL : byte absolute $058F; + NCO1INCL_NCO1INC7 : bit absolute NCO1INCL.7; + NCO1INCL_NCO1INC6 : bit absolute NCO1INCL.6; + NCO1INCL_NCO1INC5 : bit absolute NCO1INCL.5; + NCO1INCL_NCO1INC4 : bit absolute NCO1INCL.4; + NCO1INCL_NCO1INC3 : bit absolute NCO1INCL.3; + NCO1INCL_NCO1INC2 : bit absolute NCO1INCL.2; + NCO1INCL_NCO1INC1 : bit absolute NCO1INCL.1; + NCO1INCL_NCO1INC0 : bit absolute NCO1INCL.0; + NCO1INCH : byte absolute $0590; + NCO1INCH_NCO1INC15 : bit absolute NCO1INCH.7; + NCO1INCH_NCO1INC14 : bit absolute NCO1INCH.6; + NCO1INCH_NCO1INC13 : bit absolute NCO1INCH.5; + NCO1INCH_NCO1INC12 : bit absolute NCO1INCH.4; + NCO1INCH_NCO1INC11 : bit absolute NCO1INCH.3; + NCO1INCH_NCO1INC10 : bit absolute NCO1INCH.2; + NCO1INCH_NCO1INC9 : bit absolute NCO1INCH.1; + NCO1INCH_NCO1INC8 : bit absolute NCO1INCH.0; + NCO1INCU : byte absolute $0591; + NCO1INCU_NCO1INC19 : bit absolute NCO1INCU.3; + NCO1INCU_NCO1INC18 : bit absolute NCO1INCU.2; + NCO1INCU_NCO1INC17 : bit absolute NCO1INCU.1; + NCO1INCU_NCO1INC16 : bit absolute NCO1INCU.0; + NCO1CON : byte absolute $0592; + NCO1CON_N1EN : bit absolute NCO1CON.7; + NCO1CON_N1OUT : bit absolute NCO1CON.5; + NCO1CON_N1POL : bit absolute NCO1CON.4; + NCO1CON_N1PFM : bit absolute NCO1CON.0; + NCO1CLK : byte absolute $0593; + NCO1CLK_N1PWS2 : bit absolute NCO1CLK.7; + NCO1CLK_N1PWS1 : bit absolute NCO1CLK.6; + NCO1CLK_N1PWS0 : bit absolute NCO1CLK.5; + NCO1CLK_N1CKS2 : bit absolute NCO1CLK.2; + NCO1CLK_N1CKS1 : bit absolute NCO1CLK.1; + NCO1CLK_N1CKS0 : bit absolute NCO1CLK.0; + CWG1CLKCON : byte absolute $060C; + CWG1CLKCON_CS : bit absolute CWG1CLKCON.0; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + CWG2CLKCON : byte absolute $0616; + CWG2ISM : byte absolute $0617; + CWG2DBR : byte absolute $0618; + CWG2DBF : byte absolute $0619; + CWG2CON0 : byte absolute $061A; + CWG2CON1 : byte absolute $061B; + CWG2AS0 : byte absolute $061C; + CWG2AS1 : byte absolute $061D; + CWG2STR : byte absolute $061E; + CWG3CLKCON : byte absolute $068C; + CWG3ISM : byte absolute $068D; + CWG3DBR : byte absolute $068E; + CWG3DBF : byte absolute $068F; + CWG3CON0 : byte absolute $0690; + CWG3CON1 : byte absolute $0691; + CWG3AS0 : byte absolute $0692; + CWG3AS1 : byte absolute $0693; + CWG3STR : byte absolute $0694; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RCIF : bit absolute PIR3.5; + PIR3_TXIF : bit absolute PIR3.4; + PIR3_BCL2IF : bit absolute PIR3.3; + PIR3_SSP2IF : bit absolute PIR3.2; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR6IF : bit absolute PIR4.5; + PIR4_TMR5IF : bit absolute PIR4.4; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR3IF : bit absolute PIR4.2; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR5GIF : bit absolute PIR5.2; + PIR5_TMR3GIF : bit absolute PIR5.1; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CCP5IF : bit absolute PIR6.4; + PIR6_CCP4IF : bit absolute PIR6.3; + PIR6_CCP3IF : bit absolute PIR6.2; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_SCANIF : bit absolute PIR7.7; + PIR7_CRCIF : bit absolute PIR7.6; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_NCO1IF : bit absolute PIR7.4; + PIR7_CWG3IF : bit absolute PIR7.2; + PIR7_CWG2IF : bit absolute PIR7.1; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_SMT2PWAIF : bit absolute PIR8.5; + PIR8_SMT2PRAIF : bit absolute PIR8.4; + PIR8_SMT2IF : bit absolute PIR8.3; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RCIE : bit absolute PIE3.5; + PIE3_TXIE : bit absolute PIE3.4; + PIE3_BCL2IE : bit absolute PIE3.3; + PIE3_SSP2IE : bit absolute PIE3.2; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR6IE : bit absolute PIE4.5; + PIE4_TMR5IE : bit absolute PIE4.4; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR3IE : bit absolute PIE4.2; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR5GIE : bit absolute PIE5.2; + PIE5_TMR3GIE : bit absolute PIE5.1; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CCP5IE : bit absolute PIE6.4; + PIE6_CCP4IE : bit absolute PIE6.3; + PIE6_CCP3IE : bit absolute PIE6.2; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_SCANIE : bit absolute PIE7.7; + PIE7_CRCIE : bit absolute PIE7.6; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_NCO1IE : bit absolute PIE7.4; + PIE7_CWG3IE : bit absolute PIE7.2; + PIE7_CWG2IE : bit absolute PIE7.1; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_SMT2PWAIE : bit absolute PIE8.5; + PIE8_SMT2PRAIE : bit absolute PIE8.4; + PIE8_SMT2IE : bit absolute PIE8.3; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_CRCMD : bit absolute PMD0.4; + PMD0_SCANMD : bit absolute PMD0.3; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_CLKRMD : bit absolute PMD0.1; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_NCOMD : bit absolute PMD1.7; + PMD1_TMR6MD : bit absolute PMD1.6; + PMD1_TMR5MD : bit absolute PMD1.5; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR3MD : bit absolute PMD1.3; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_PWM7MD : bit absolute PMD3.6; + PMD3_PWM6MD : bit absolute PMD3.5; + PMD3_CCP5MD : bit absolute PMD3.4; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP2MD : bit absolute PMD4.5; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG3MD : bit absolute PMD4.2; + PMD4_CWG2MD : bit absolute PMD4.1; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT2MD : bit absolute PMD5.7; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + PMD5_DSMMD : bit absolute PMD5.0; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + CCDCON : byte absolute $0814; + CCDCON_CCDEN : bit absolute CCDCON.7; + CCDCON_CCDS1 : bit absolute CCDCON.1; + CCDCON_CCDS0 : bit absolute CCDCON.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_HFTUN5 : bit absolute OSCTUNE.5; + OSCTUNE_HFTUN4 : bit absolute OSCTUNE.4; + OSCTUNE_HFTUN3 : bit absolute OSCTUNE.3; + OSCTUNE_HFTUN2 : bit absolute OSCTUNE.2; + OSCTUNE_HFTUN1 : bit absolute OSCTUNE.1; + OSCTUNE_HFTUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + CLKRCON : byte absolute $0895; + CLKRCON_CLKREN : bit absolute CLKRCON.7; + CLKRCON_CLKRDC1 : bit absolute CLKRCON.4; + CLKRCON_CLKRDC0 : bit absolute CLKRCON.3; + CLKRCON_CLKRDIV2 : bit absolute CLKRCON.2; + CLKRCON_CLKRDIV1 : bit absolute CLKRCON.1; + CLKRCON_CLKRDIV0 : bit absolute CLKRCON.0; + CLKRCLK : byte absolute $0896; + CLKRCLK_CLKRCLK3 : bit absolute CLKRCLK.3; + CLKRCLK_CLKRCLK2 : bit absolute CLKRCLK.2; + CLKRCLK_CLKRCLK1 : bit absolute CLKRCLK.1; + CLKRCLK_CLKRCLK0 : bit absolute CLKRCLK.0; + MDCON0 : byte absolute $0897; + MDCON0_MDEN : bit absolute MDCON0.7; + MDCON0_MDOUT : bit absolute MDCON0.5; + MDCON0_MDOPOL : bit absolute MDCON0.4; + MDCON0_MDBIT : bit absolute MDCON0.0; + MDCON1 : byte absolute $0898; + MDCON1_MDCHPOL : bit absolute MDCON1.5; + MDCON1_MDCHSYNC : bit absolute MDCON1.4; + MDCON1_MDCLPOL : bit absolute MDCON1.1; + MDCON1_MDCLSYNC : bit absolute MDCON1.0; + MDSRC : byte absolute $0899; + MDSRC_MDMS4 : bit absolute MDSRC.4; + MDSRC_MDMS3 : bit absolute MDSRC.3; + MDSRC_MDMS2 : bit absolute MDSRC.2; + MDSRC_MDMS1 : bit absolute MDSRC.1; + MDSRC_MDMS0 : bit absolute MDSRC.0; + MDCARL : byte absolute $089A; + MDCARL_MDCL3 : bit absolute MDCARL.3; + MDCARL_MDCL2 : bit absolute MDCARL.2; + MDCARL_MDCL1 : bit absolute MDCARL.1; + MDCARL_MDCL0 : bit absolute MDCARL.0; + MDCARH : byte absolute $089B; + MDCARH_MDCH3 : bit absolute MDCARH.3; + MDCARH_MDCH2 : bit absolute MDCARH.2; + MDCARH_MDCH1 : bit absolute MDCARH.1; + MDCARH_MDCH0 : bit absolute MDCARH.0; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_Reserved : bit absolute CM1CON0.2; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T3CKIPPS : byte absolute $1E94; + T3CKIPPS_T3CKIPPS4 : bit absolute T3CKIPPS.4; + T3CKIPPS_T3CKIPPS3 : bit absolute T3CKIPPS.3; + T3CKIPPS_T3CKIPPS2 : bit absolute T3CKIPPS.2; + T3CKIPPS_T3CKIPPS1 : bit absolute T3CKIPPS.1; + T3CKIPPS_T3CKIPPS0 : bit absolute T3CKIPPS.0; + T3GPPS : byte absolute $1E95; + T3GPPS_T3GPPS4 : bit absolute T3GPPS.4; + T3GPPS_T3GPPS3 : bit absolute T3GPPS.3; + T3GPPS_T3GPPS2 : bit absolute T3GPPS.2; + T3GPPS_T3GPPS1 : bit absolute T3GPPS.1; + T3GPPS_T3GPPS0 : bit absolute T3GPPS.0; + T5CKIPPS : byte absolute $1E96; + T5CKIPPS_T5CKIPPS4 : bit absolute T5CKIPPS.4; + T5CKIPPS_T5CKIPPS3 : bit absolute T5CKIPPS.3; + T5CKIPPS_T5CKIPPS2 : bit absolute T5CKIPPS.2; + T5CKIPPS_T5CKIPPS1 : bit absolute T5CKIPPS.1; + T5CKIPPS_T5CKIPPS0 : bit absolute T5CKIPPS.0; + T5GPPS : byte absolute $1E97; + T5GPPS_T5GPPS4 : bit absolute T5GPPS.4; + T5GPPS_T5GPPS3 : bit absolute T5GPPS.3; + T5GPPS_T5GPPS2 : bit absolute T5GPPS.2; + T5GPPS_T5GPPS1 : bit absolute T5GPPS.1; + T5GPPS_T5GPPS0 : bit absolute T5GPPS.0; + T2AINPPS : byte absolute $1E9C; + T2AINPPS_T2AINPPS4 : bit absolute T2AINPPS.4; + T2AINPPS_T2AINPPS3 : bit absolute T2AINPPS.3; + T2AINPPS_T2AINPPS2 : bit absolute T2AINPPS.2; + T2AINPPS_T2AINPPS1 : bit absolute T2AINPPS.1; + T2AINPPS_T2AINPPS0 : bit absolute T2AINPPS.0; + T4AINPPS : byte absolute $1E9D; + T4AINPPS_T4AINPPS4 : bit absolute T4AINPPS.4; + T4AINPPS_T4AINPPS3 : bit absolute T4AINPPS.3; + T4AINPPS_T4AINPPS2 : bit absolute T4AINPPS.2; + T4AINPPS_T4AINPPS1 : bit absolute T4AINPPS.1; + T4AINPPS_T4AINPPS0 : bit absolute T4AINPPS.0; + T6AINPPS : byte absolute $1E9E; + T6AINPPS_T6AINPPS4 : bit absolute T6AINPPS.4; + T6AINPPS_T6AINPPS3 : bit absolute T6AINPPS.3; + T6AINPPS_T6AINPPS2 : bit absolute T6AINPPS.2; + T6AINPPS_T6AINPPS1 : bit absolute T6AINPPS.1; + T6AINPPS_T6AINPPS0 : bit absolute T6AINPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + CCP3PPS : byte absolute $1EA3; + CCP3PPS_CCP3PPS4 : bit absolute CCP3PPS.4; + CCP3PPS_CCP3PPS3 : bit absolute CCP3PPS.3; + CCP3PPS_CCP3PPS2 : bit absolute CCP3PPS.2; + CCP3PPS_CCP3PPS1 : bit absolute CCP3PPS.1; + CCP3PPS_CCP3PPS0 : bit absolute CCP3PPS.0; + CCP4PPS : byte absolute $1EA4; + CCP4PPS_CCP4PPS4 : bit absolute CCP4PPS.4; + CCP4PPS_CCP4PPS3 : bit absolute CCP4PPS.3; + CCP4PPS_CCP4PPS2 : bit absolute CCP4PPS.2; + CCP4PPS_CCP4PPS1 : bit absolute CCP4PPS.1; + CCP4PPS_CCP4PPS0 : bit absolute CCP4PPS.0; + CCP5PPS : byte absolute $1EA5; + CCP5PPS_CCP5PPS5 : bit absolute CCP5PPS.5; + CCP5PPS_CCP5PPS4 : bit absolute CCP5PPS.4; + CCP5PPS_CCP5PPS3 : bit absolute CCP5PPS.3; + CCP5PPS_CCP5PPS2 : bit absolute CCP5PPS.2; + CCP5PPS_CCP5PPS1 : bit absolute CCP5PPS.1; + CCP5PPS_CCP5PPS0 : bit absolute CCP5PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + SMT2WINPPS : byte absolute $1EAB; + SMT2WINPPS_SMT2WINPPS4 : bit absolute SMT2WINPPS.4; + SMT2WINPPS_SMT2WINPPS3 : bit absolute SMT2WINPPS.3; + SMT2WINPPS_SMT2WINPPS2 : bit absolute SMT2WINPPS.2; + SMT2WINPPS_SMT2WINPPS1 : bit absolute SMT2WINPPS.1; + SMT2WINPPS_SMT2WINPPS0 : bit absolute SMT2WINPPS.0; + SMT2SIGPPS : byte absolute $1EAC; + SMT2SIGPPS_SMT2SIGPPS4 : bit absolute SMT2SIGPPS.4; + SMT2SIGPPS_SMT2SIGPPS3 : bit absolute SMT2SIGPPS.3; + SMT2SIGPPS_SMT2SIGPPS2 : bit absolute SMT2SIGPPS.2; + SMT2SIGPPS_SMT2SIGPPS1 : bit absolute SMT2SIGPPS.1; + SMT2SIGPPS_SMT2SIGPPS0 : bit absolute SMT2SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CWG2PPS : byte absolute $1EB2; + CWG2PPS_CWG2PPS4 : bit absolute CWG2PPS.4; + CWG2PPS_CWG2PPS3 : bit absolute CWG2PPS.3; + CWG2PPS_CWG2PPS2 : bit absolute CWG2PPS.2; + CWG2PPS_CWG2PPS1 : bit absolute CWG2PPS.1; + CWG2PPS_CWG2PPS0 : bit absolute CWG2PPS.0; + CWG3PPS : byte absolute $1EB3; + CWG3PPS_CWG3PPS4 : bit absolute CWG3PPS.4; + CWG3PPS_CWG3PPS3 : bit absolute CWG3PPS.3; + CWG3PPS_CWG3PPS2 : bit absolute CWG3PPS.2; + CWG3PPS_CWG3PPS1 : bit absolute CWG3PPS.1; + CWG3PPS_CWG3PPS0 : bit absolute CWG3PPS.0; + MDCARLPPS : byte absolute $1EB8; + MDCARLPPS_MDCARLPPS4 : bit absolute MDCARLPPS.4; + MDCARLPPS_MDCARLPPS3 : bit absolute MDCARLPPS.3; + MDCARLPPS_MDCARLPPS2 : bit absolute MDCARLPPS.2; + MDCARLPPS_MDCARLPPS1 : bit absolute MDCARLPPS.1; + MDCARLPPS_MDCARLPPS0 : bit absolute MDCARLPPS.0; + MDCARHPPS : byte absolute $1EB9; + MDCARHPPS_MDCARHPPS4 : bit absolute MDCARHPPS.4; + MDCARHPPS_MDCARHPPS3 : bit absolute MDCARHPPS.3; + MDCARHPPS_MDCARHPPS2 : bit absolute MDCARHPPS.2; + MDCARHPPS_MDCARHPPS1 : bit absolute MDCARHPPS.1; + MDCARHPPS_MDCARHPPS0 : bit absolute MDCARHPPS.0; + MDSRCPPS : byte absolute $1EBA; + MDSRCPPS_MDSRCPPS4 : bit absolute MDSRCPPS.4; + MDSRCPPS_MDSRCPPS3 : bit absolute MDSRCPPS.3; + MDSRCPPS_MDSRCPPS2 : bit absolute MDSRCPPS.2; + MDSRCPPS_MDSRCPPS1 : bit absolute MDSRCPPS.1; + MDSRCPPS_MDSRCPPS0 : bit absolute MDSRCPPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + SSP2CLKPPS : byte absolute $1EC8; + SSP2CLKPPS_SSP2CLKPPS4 : bit absolute SSP2CLKPPS.4; + SSP2CLKPPS_SSP2CLKPPS3 : bit absolute SSP2CLKPPS.3; + SSP2CLKPPS_SSP2CLKPPS2 : bit absolute SSP2CLKPPS.2; + SSP2CLKPPS_SSP2CLKPPS1 : bit absolute SSP2CLKPPS.1; + SSP2CLKPPS_SSP2CLKPPS0 : bit absolute SSP2CLKPPS.0; + SSP2DATPPS : byte absolute $1EC9; + SSP2DATPPS_SSP2DATPPS4 : bit absolute SSP2DATPPS.4; + SSP2DATPPS_SSP2DATPPS3 : bit absolute SSP2DATPPS.3; + SSP2DATPPS_SSP2DATPPS2 : bit absolute SSP2DATPPS.2; + SSP2DATPPS_SSP2DATPPS1 : bit absolute SSP2DATPPS.1; + SSP2DATPPS_SSP2DATPPS0 : bit absolute SSP2DATPPS.0; + SSP2SSPPS : byte absolute $1ECA; + SSP2SSPPS_SSP2SSPPS4 : bit absolute SSP2SSPPS.4; + SSP2SSPPS_SSP2SSPPS3 : bit absolute SSP2SSPPS.3; + SSP2SSPPS_SSP2SSPPS2 : bit absolute SSP2SSPPS.2; + SSP2SSPPS_SSP2SSPPS1 : bit absolute SSP2SSPPS.1; + SSP2SSPPS_SSP2SSPPS0 : bit absolute SSP2SSPPS.0; + RXPPS : byte absolute $1ECB; + RXPPS_RXPPS4 : bit absolute RXPPS.4; + RXPPS_RXPPS3 : bit absolute RXPPS.3; + RXPPS_RXPPS2 : bit absolute RXPPS.2; + RXPPS_RXPPS1 : bit absolute RXPPS.1; + RXPPS_RXPPS0 : bit absolute RXPPS.0; + TXPPS : byte absolute $1ECC; + TXPPS_TXPPS4 : bit absolute TXPPS.4; + TXPPS_TXPPS3 : bit absolute TXPPS.3; + TXPPS_TXPPS2 : bit absolute TXPPS.2; + TXPPS_TXPPS1 : bit absolute TXPPS.1; + TXPPS_TXPPS0 : bit absolute TXPPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA5 : bit absolute ODCONA.5; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA5 : bit absolute SLRCONA.5; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + CCDNA : byte absolute $1F40; + CCDNA_CCDNA7 : bit absolute CCDNA.7; + CCDNA_CCDNA6 : bit absolute CCDNA.6; + CCDNA_CCDNA5 : bit absolute CCDNA.5; + CCDNA_CCDNA4 : bit absolute CCDNA.4; + CCDNA_CCDNA3 : bit absolute CCDNA.3; + CCDNA_CCDNA2 : bit absolute CCDNA.2; + CCDNA_CCDNA1 : bit absolute CCDNA.1; + CCDNA_CCDNA0 : bit absolute CCDNA.0; + CCDPA : byte absolute $1F41; + CCDPA_CCDPA7 : bit absolute CCDPA.7; + CCDPA_CCDPA6 : bit absolute CCDPA.6; + CCDPA_CCDPA5 : bit absolute CCDPA.5; + CCDPA_CCDPA4 : bit absolute CCDPA.4; + CCDPA_CCDPA3 : bit absolute CCDPA.3; + CCDPA_CCDPA2 : bit absolute CCDPA.2; + CCDPA_CCDPA1 : bit absolute CCDPA.1; + CCDPA_CCDPA0 : bit absolute CCDPA.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + CCDNB : byte absolute $1F4B; + CCDNB_CCDNB7 : bit absolute CCDNB.7; + CCDNB_CCDNB6 : bit absolute CCDNB.6; + CCDNB_CCDNB5 : bit absolute CCDNB.5; + CCDNB_CCDNB4 : bit absolute CCDNB.4; + CCDNB_CCDNB3 : bit absolute CCDNB.3; + CCDNB_CCDNB2 : bit absolute CCDNB.2; + CCDNB_CCDNB1 : bit absolute CCDNB.1; + CCDNB_CCDNB0 : bit absolute CCDNB.0; + CCDPB : byte absolute $1F4C; + CCDPB_CCDPB7 : bit absolute CCDPB.7; + CCDPB_CCDPB6 : bit absolute CCDPB.6; + CCDPB_CCDPB5 : bit absolute CCDPB.5; + CCDPB_CCDPB4 : bit absolute CCDPB.4; + CCDPB_CCDPB3 : bit absolute CCDPB.3; + CCDPB_CCDPB2 : bit absolute CCDPB.2; + CCDPB_CCDPB1 : bit absolute CCDPB.1; + CCDPB_CCDPB0 : bit absolute CCDPB.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + CCDNC : byte absolute $1F56; + CCDNC_CCDNC7 : bit absolute CCDNC.7; + CCDNC_CCDNC6 : bit absolute CCDNC.6; + CCDNC_CCDNC5 : bit absolute CCDNC.5; + CCDNC_CCDNC4 : bit absolute CCDNC.4; + CCDNC_CCDNC3 : bit absolute CCDNC.3; + CCDNC_CCDNC2 : bit absolute CCDNC.2; + CCDNC_CCDNC1 : bit absolute CCDNC.1; + CCDNC_CCDNC0 : bit absolute CCDNC.0; + CCDPC : byte absolute $1F57; + CCDPC_CCDPC7 : bit absolute CCDPC.7; + CCDPC_CCDPC6 : bit absolute CCDPC.6; + CCDPC_CCDPC5 : bit absolute CCDPC.5; + CCDPC_CCDPC4 : bit absolute CCDPC.4; + CCDPC_CCDPC3 : bit absolute CCDPC.3; + CCDPC_CCDPC2 : bit absolute CCDPC.2; + CCDPC_CCDPC1 : bit absolute CCDPC.1; + CCDPC_CCDPC0 : bit absolute CCDPC.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + CCDND : byte absolute $1F61; + CCDND_CCDND7 : bit absolute CCDND.7; + CCDND_CCDND6 : bit absolute CCDND.6; + CCDND_CCDND5 : bit absolute CCDND.5; + CCDND_CCDND4 : bit absolute CCDND.4; + CCDND_CCDND3 : bit absolute CCDND.3; + CCDND_CCDND2 : bit absolute CCDND.2; + CCDND_CCDND1 : bit absolute CCDND.1; + CCDND_CCDND0 : bit absolute CCDND.0; + CCDPD : byte absolute $1F62; + CCDPD_CCDPD7 : bit absolute CCDPD.7; + CCDPD_CCDPD6 : bit absolute CCDPD.6; + CCDPD_CCDPD5 : bit absolute CCDPD.5; + CCDPD_CCDPD4 : bit absolute CCDPD.4; + CCDPD_CCDPD3 : bit absolute CCDPD.3; + CCDPD_CCDPD2 : bit absolute CCDPD.2; + CCDPD_CCDPD1 : bit absolute CCDPD.1; + CCDPD_CCDPD0 : bit absolute CCDPD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE2 : bit absolute ODCONE.2; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + CCDNE : byte absolute $1F6C; + CCDNE_CCDNE2 : bit absolute CCDNE.2; + CCDNE_CCDNE1 : bit absolute CCDNE.1; + CCDNE_CCDNE0 : bit absolute CCDNE.0; + CCDPE : byte absolute $1F6D; + CCDPE_CCDPE2 : bit absolute CCDPE.2; + CCDPE_CCDPE1 : bit absolute CCDPE.1; + CCDPE_CCDPE0 : bit absolute CCDPE.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD5 : bit absolute BSR_SHAD.5; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01A:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, TRISA, TRISB, TRISC, TRISD, TRISE, LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '01C-01F:SFR'} // Bank 0 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-091:SFR'} // Bank 1 : ADRESL, ADRESH, ADPREVL, ADPREVH, ADACCL, ADACCH + {$SET_STATE_RAM '093-09E:SFR'} // Bank 1 : ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADCLK, ADACT, ADREF, ADCAP, ADPRE, ADACQ, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-117:SFR'} // Bank 2 : ADCNT, ADRPT, ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADERRL, ADERRH + {$SET_STATE_RAM '119-11F:SFR'} // Bank 2 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '196-19C:SFR'} // Bank 3 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-21F:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK, TMR3L, TMR3H, T3CON, T3GCON, T3GATE, T3CLK, TMR5L, TMR5H, T5CON, T5GCON, T5GATE, T5CLK, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-29D:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST, T6TMR, T6PR, T6CON, T6HLT, T6CLKCON, T6RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-31F:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, CCPR3L, CCPR3H, CCP3CON, CCP3CAP, CCPR4L, CCPR4H, CCP4CON, CCP4CAP, CCPR5L, CCPR5H, CCP5CON, CCP5CAP + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38E:SFR'} // Bank 7 : PWM6DCL, PWM6DCH, PWM6CON + {$SET_STATE_RAM '390-392:SFR'} // Bank 7 : PWM7DCL, PWM7DCH, PWM7CON + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-411:SFR'} // Bank 8 : SCANLADRL, SCANLADRH, SCANHADRL, SCANHADRH, SCANCON0, SCANTRIG + {$SET_STATE_RAM '416-41F:SFR'} // Bank 8 : CRCDATL, CRCDATH, CRCACCL, CRCACCH, CRCSHIFTL, CRCSHIFTH, CRCXORL, CRCXORH, CRCCON0, CRCCON1 + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '50C-51D:SFR'} // Bank 10 : SMT2TMRL, SMT2TMRH, SMT2TMRU, SMT2CPRL, SMT2CPRH, SMT2CPRU, SMT2CPWL, SMT2CPWH, SMT2CPWU, SMT2PRL, SMT2PRH, SMT2PRU, SMT2CON0, SMT2CON1, SMT2STAT, SMT2CLK, SMT2SIG, SMT2WIN + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '58C-593:SFR'} // Bank 11 : NCO1ACCL, NCO1ACCH, NCO1ACCU, NCO1INCL, NCO1INCH, NCO1INCU, NCO1CON, NCO1CLK + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '616-61E:SFR'} // Bank 12 : CWG2CLKCON, CWG2ISM, CWG2DBR, CWG2DBF, CWG2CON0, CWG2CON1, CWG2AS0, CWG2AS1, CWG2STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '68C-694:SFR'} // Bank 13 : CWG3CLKCON, CWG3ISM, CWG3DBR, CWG3DBF, CWG3CON0, CWG3CON1, CWG3AS0, CWG3AS1, CWG3STR + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, CCDCON + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-893:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ + {$SET_STATE_RAM '895-89B:SFR'} // Bank 17 : CLKRCON, CLKRCLK, MDCON0, MDCON1, MDSRC, MDCARL, MDCARH + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CEF:GPR'} + {$SET_STATE_RAM 'D20-D6F:GPR'} + {$SET_STATE_RAM 'DA0-DEF:GPR'} + {$SET_STATE_RAM 'E20-E6F:GPR'} + {$SET_STATE_RAM 'EA0-EEF:GPR'} + {$SET_STATE_RAM 'F20-F6F:GPR'} + {$SET_STATE_RAM 'FA0-FEF:GPR'} + {$SET_STATE_RAM '1020-106F:GPR'} + {$SET_STATE_RAM '10A0-10EF:GPR'} + {$SET_STATE_RAM '1120-116F:GPR'} + {$SET_STATE_RAM '11A0-11EF:GPR'} + {$SET_STATE_RAM '1220-126F:GPR'} + {$SET_STATE_RAM '12A0-12EF:GPR'} + {$SET_STATE_RAM '1320-136F:GPR'} + {$SET_STATE_RAM '13A0-13EF:GPR'} + {$SET_STATE_RAM '1420-146F:GPR'} + {$SET_STATE_RAM '14A0-14EF:GPR'} + {$SET_STATE_RAM '1520-156F:GPR'} + {$SET_STATE_RAM '15A0-15EF:GPR'} + {$SET_STATE_RAM '1620-166F:GPR'} + {$SET_STATE_RAM '16A0-16EF:GPR'} + {$SET_STATE_RAM '1720-176F:GPR'} + {$SET_STATE_RAM '17A0-17EF:GPR'} + {$SET_STATE_RAM '1820-186F:GPR'} + {$SET_STATE_RAM '18A0-18EF:GPR'} + {$SET_STATE_RAM '1920-196F:GPR'} + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E97:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS, T3CKIPPS, T3GPPS, T5CKIPPS, T5GPPS + {$SET_STATE_RAM '1E9C-1E9E:SFR'} // Bank 61 : T2AINPPS, T4AINPPS, T6AINPPS + {$SET_STATE_RAM '1EA1-1EA5:SFR'} // Bank 61 : CCP1PPS, CCP2PPS, CCP3PPS, CCP4PPS, CCP5PPS + {$SET_STATE_RAM '1EA9-1EAC:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS, SMT2WINPPS, SMT2SIGPPS + {$SET_STATE_RAM '1EB1-1EB3:SFR'} // Bank 61 : CWG1PPS, CWG2PPS, CWG3PPS + {$SET_STATE_RAM '1EB8-1EBE:SFR'} // Bank 61 : MDCARLPPS, MDCARHPPS, MDSRCPPS, CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1ECC:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS, SSP2CLKPPS, SSP2DATPPS, SSP2SSPPS, RXPPS, TXPPS + {$SET_STATE_RAM '1F10-1F32:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F41:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF, CCDNA, CCDPA + {$SET_STATE_RAM '1F43-1F4C:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF, CCDNB, CCDPB + {$SET_STATE_RAM '1F4E-1F57:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF, CCDNC, CCDPC + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F61-1F62:SFR'} // Bank 62 : CCDND, CCDPD + {$SET_STATE_RAM '1F64-1F6D:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF, CCDNE, CCDPE + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '015:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09A:13'} // ADREF bits 7,6,5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09B:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '214:37'} // T3CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '215:FC'} // T3GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '216:1F'} // T3GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '217:0F'} // T3CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21A:37'} // T5CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '21B:FC'} // T5GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '21C:1F'} // T5GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '21D:0F'} // T5CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '21F:3F'} // CCPTMRS1 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29C:0F'} // T6CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // T6RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '317:07'} // CCP3CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31B:07'} // CCP4CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '31F:07'} // CCP5CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '38C:C0'} // PWM6DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '38E:B0'} // PWM6CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '390:C0'} // PWM7DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '392:B0'} // PWM7CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '410:FB'} // SCANCON0 bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '411:0F'} // SCANTRIG bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:F3'} // CRCCON0 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '518:BF'} // SMT2CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '519:CF'} // SMT2CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '51A:E7'} // SMT2STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51B:07'} // SMT2CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '51C:1F'} // SMT2SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '51D:1F'} // SMT2WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '58E:0F'} // NCO1ACCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '591:0F'} // NCO1INCU bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '592:B1'} // NCO1CON bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '593:E7'} // NCO1CLK bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '616:01'} // CWG2CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '617:0F'} // CWG2ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '618:3F'} // CWG2DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '619:3F'} // CWG2DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '61A:C7'} // CWG2CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '61B:2F'} // CWG2CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '61C:FC'} // CWG2AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '61D:7F'} // CWG2AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '68C:01'} // CWG3CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '68D:0F'} // CWG3ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '68E:3F'} // CWG3DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '68F:3F'} // CWG3DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '690:C7'} // CWG3CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '691:2F'} // CWG3CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '692:FC'} // CWG3AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '693:7F'} // CWG3AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:3F'} // PIR3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:3F'} // PIR4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F7'} // PIR5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:1F'} // PIR6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:F7'} // PIR7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:3F'} // PIR8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:3F'} // PIE3 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:3F'} // PIE4 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F7'} // PIE5 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:1F'} // PIE6 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:F7'} // PIE7 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:3F'} // PIE8 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:DF'} // PMD0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:67'} // PMD2 bits 7,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:7F'} // PMD3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:77'} // PMD4 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:DF'} // PMD5 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:03'} // VREGCON bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:83'} // CCDCON bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '895:9F'} // CLKRCON bits 6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '896:0F'} // CLKRCLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '897:B1'} // MDCON0 bits 6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '898:33'} // MDCON1 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '899:1F'} // MDSRC bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '89A:0F'} // MDCARL bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '89B:0F'} // MDCARH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D7'} // CM1CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D7'} // CM2CON0 bits 5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E94:1F'} // T3CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E95:1F'} // T3GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E96:1F'} // T5CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E97:1F'} // T5GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9E:1F'} // T6AINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA3:1F'} // CCP3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA4:1F'} // CCP4PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA5:3F'} // CCP5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAB:1F'} // SMT2WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAC:1F'} // SMT2SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB2:1F'} // CWG2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB3:1F'} // CWG3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB8:1F'} // MDCARLPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB9:1F'} // MDCARHPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBA:1F'} // MDSRCPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC8:1F'} // SSP2CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC9:1F'} // SSP2DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECA:1F'} // SSP2SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TXPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:07'} // ODCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6C:07'} // CCDNE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6D:07'} // CCDPE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:3F'} // BSR_SHAD bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '41C:01'} // CRCXORL bit 0 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : VPP/MCLR_n/ICD_n/IOCE3/RE3 + // Pin 2 : ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 3 : ANA1/C1IN1-/C2IN1-/IOCA1/RA1 + // Pin 4 : DAC1OUT1/VREF-/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 5 : VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 6 : ANA4/IOCA4/RA4 + // Pin 7 : ANA5/IOCA5/RA5 + // Pin 8 : ANE0/RE0 + // Pin 9 : ANE1/RE1 + // Pin 10 : ANE2/RE2 + // Pin 11 : VDD + // Pin 12 : AVSS/VSS + // Pin 13 : OSC1/CLKIN/ANA7/IOCA7/RA7 + // Pin 14 : OSC2/CLKOUT/ANA6/IOCA6/RA6 + // Pin 15 : SOSCO/ANC0/IOCC0/RC0 + // Pin 16 : SOSCI/ANC1/IOCC1/RC1 + // Pin 17 : ANC2/IOCC2/RC2 + // Pin 18 : ANC3/SMB_I2C/IOCC3/RC3 + // Pin 19 : AND0/SMB_I2C/RD0 + // Pin 20 : AND1/SMB_I2C/RD1 + // Pin 21 : AND2/RD2 + // Pin 22 : AND3/RD3 + // Pin 23 : ANC4/SMB_I2C/IOCC4/RC4 + // Pin 24 : ANC5/IOCC5/RC5 + // Pin 25 : ANC6/IOCC6/RC6 + // Pin 26 : ANC7/IOCC7/RC7 + // Pin 27 : AND4/RD4 + // Pin 28 : AND5/RD5 + // Pin 29 : AND6/RD6 + // Pin 30 : AND7/RD7 + // Pin 31 : VSS + // Pin 32 : AVDD/VDD + // Pin 33 : ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 34 : ANB1/C1IN3-/C2IN3-/SMB_I2C/IOCB1/RB1 + // Pin 35 : ANB2/SMB_I2C/IOCB2/RB2 + // Pin 36 : ANB3/C1IN2-/C2IN2-/IOCB3/RB3 + // Pin 37 : ANB4/IOCB4/RB4 + // Pin 38 : ANB5/IOCB5/RB5 + // Pin 39 : ICSPCLK/ICDCLK/ANB6/IOCB6/RB6 + // Pin 40 : ICSPDAT/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FFC} // Oscillator not enabled + {$define _FEXTOSC_Reserved = $3FFB} // Reserved + {$define _FEXTOSC_HS = $3FFA} // HS (crystal oscillator) above 4MHz; PFM set to high power + {$define _FEXTOSC_XT = $3FF9} // XT (crystal oscillator) above 500kHz, below 4MHz; PFM set to medium power + {$define _FEXTOSC_LP = $3FF8} // LP (crystal oscillator) optimized for 32.768kHz; PFM set to low power + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer Enable bit + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FFD} // PWRT enabled + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // DEBUG : Background Debugger + {$define _DEBUG_OFF = $3FFF} // Background Debugger disabled + {$define _DEBUG_ON = $1FFF} // background debugger enabled + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // WRT : UserNVM self-write protection bits + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_WRT_upper = $3FFE} // 0x0000 to 0x01FF write protected + {$define _WRT_WRT_lower = $3FFD} // 0x0000 to x3FFF write protected + {$define _WRT_ON = $3FFC} // 0x0000 to 0x7FFF write protected + + // SCANE : Scanner Enable bit + {$define _SCANE_available = $3FFF} // Scanner module is available for use + {$define _SCANE_not_available = $2FFF} // Scanner module is not available for use + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // Program Memory code protection disabled + {$define _CP_ON = $3FFE} // Program Memory code protection enabled + + // CPD : DataNVM code protection bit + {$define _CPD_OFF = $3FFF} // Data EEPROM code protection disabled + {$define _CPD_ON = $3FFD} // Data EEPROM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19155.pas b/devices17/PIC16F19155.pas new file mode 100644 index 00000000..23f51d7b --- /dev/null +++ b/devices17/PIC16F19155.pas @@ -0,0 +1,2639 @@ +unit PIC16F19155; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19155'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D1A:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2 + {$SET_STATE_RAM '1D1E-1D20:SFR'} // Bank 58 : LCDDATA6, LCDDATA7, LCDDATA8 + {$SET_STATE_RAM '1D24-1D26:SFR'} // Bank 58 : LCDDATA12, LCDDATA13, LCDDATA14 + {$SET_STATE_RAM '1D2A-1D2C:SFR'} // Bank 58 : LCDDATA18, LCDDATA19, LCDDATA20 + {$SET_STATE_RAM '1D30-1D32:SFR'} // Bank 58 : LCDDATA24, LCDDATA25, LCDDATA26 + {$SET_STATE_RAM '1D36-1D38:SFR'} // Bank 58 : LCDDATA30, LCDDATA31, LCDDATA32 + {$SET_STATE_RAM '1D3C-1D3E:SFR'} // Bank 58 : LCDDATA36, LCDDATA37, LCDDATA38 + {$SET_STATE_RAM '1D42-1D44:SFR'} // Bank 58 : LCDDATA42, LCDDATA43, LCDDATA44 + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F27:SFR'} // Bank 62 : RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/COM7/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/COM6/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/COM5/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/COM4/ANC7/IOCC7/RC7 + // Pin 25 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 26 : AVDD/VDD/VSEL0 + // Pin 27 : AVSS/VSS + // Pin 28 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19156.pas b/devices17/PIC16F19156.pas new file mode 100644 index 00000000..a55d862a --- /dev/null +++ b/devices17/PIC16F19156.pas @@ -0,0 +1,2652 @@ +unit PIC16F19156; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19156'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-010:SFR'} // Bank 0 : PORTE + {$SET_STATE_RAM '012-014:SFR'} // Bank 0 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '018-01A:SFR'} // Bank 0 : LATA, LATB, LATC + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D1A:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2 + {$SET_STATE_RAM '1D1E-1D20:SFR'} // Bank 58 : LCDDATA6, LCDDATA7, LCDDATA8 + {$SET_STATE_RAM '1D24-1D26:SFR'} // Bank 58 : LCDDATA12, LCDDATA13, LCDDATA14 + {$SET_STATE_RAM '1D2A-1D2C:SFR'} // Bank 58 : LCDDATA18, LCDDATA19, LCDDATA20 + {$SET_STATE_RAM '1D30-1D32:SFR'} // Bank 58 : LCDDATA24, LCDDATA25, LCDDATA26 + {$SET_STATE_RAM '1D36-1D38:SFR'} // Bank 58 : LCDDATA30, LCDDATA31, LCDDATA32 + {$SET_STATE_RAM '1D3C-1D3E:SFR'} // Bank 58 : LCDDATA36, LCDDATA37, LCDDATA38 + {$SET_STATE_RAM '1D42-1D44:SFR'} // Bank 58 : LCDDATA42, LCDDATA43, LCDDATA44 + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F27:SFR'} // Bank 62 : RC6PPS, RC7PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F65-1F65:SFR'} // Bank 62 : WPUE + {$SET_STATE_RAM '1F68-1F6B:SFR'} // Bank 62 : INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:08'} // INLVLE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/COM7/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/COM6/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/COM5/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/COM4/ANC7/IOCC7/RC7 + // Pin 25 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 26 : AVDD/VDD/VSEL0 + // Pin 27 : AVSS/VSS + // Pin 28 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '010:3-25'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19175.pas b/devices17/PIC16F19175.pas new file mode 100644 index 00000000..b407bf28 --- /dev/null +++ b/devices17/PIC16F19175.pas @@ -0,0 +1,2953 @@ +unit PIC16F19175; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19175'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-010:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + {$SET_STATE_RAM '012-016:SFR'} // Bank 0 : TRISA, TRISB, TRISC, TRISD, TRISE + {$SET_STATE_RAM '018-01C:SFR'} // Bank 0 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D1C:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '1D1E-1D22:SFR'} // Bank 58 : LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10 + {$SET_STATE_RAM '1D24-1D28:SFR'} // Bank 58 : LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16 + {$SET_STATE_RAM '1D2A-1D2E:SFR'} // Bank 58 : LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22 + {$SET_STATE_RAM '1D30-1D34:SFR'} // Bank 58 : LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28 + {$SET_STATE_RAM '1D36-1D3A:SFR'} // Bank 58 : LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34 + {$SET_STATE_RAM '1D3C-1D40:SFR'} // Bank 58 : LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40 + {$SET_STATE_RAM '1D42-1D46:SFR'} // Bank 58 : LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46 + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F32:SFR'} // Bank 62 : RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1C:07'} // LCDDATA4 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D22:07'} // LCDDATA10 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D28:07'} // LCDDATA16 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2E:07'} // LCDDATA22 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D34:07'} // LCDDATA28 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3A:07'} // LCDDATA34 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D40:07'} // LCDDATA40 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D46:07'} // LCDDATA46 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:03'} // ODCONE bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/ANC7/IOCC7/RC7 + // Pin 25 : SEG24/AND0/RD0 + // Pin 26 : SEG25/AND1/RD1 + // Pin 27 : SEG26/COM5/AND2/RD2 + // Pin 28 : SEG27/COM4/AND3/RD3 + // Pin 29 : SEG28/AND4/RD4 + // Pin 30 : SEG29/AND5/RD5 + // Pin 31 : SEG30/AND6/RD6 + // Pin 32 : SEG31/AND7/RD7 + // Pin 33 : ANE0/SEG32/RE0 + // Pin 34 : ANE1/COM6/SEG33/RE1 + // Pin 35 : ANE2/COM7/SEG34/RE2 + // Pin 36 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 37 : AVDD/VDD/VSEL0 + // Pin 38 : VDD + // Pin 39 : AVSS/VSS + // Pin 40 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-25,1-26,2-27,3-28,4-29,5-30,6-31,7-32'} // PORTD + {$MAP_RAM_TO_PIN '010:0-33,1-34,2-35,3-36'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19176.pas b/devices17/PIC16F19176.pas new file mode 100644 index 00000000..de475a56 --- /dev/null +++ b/devices17/PIC16F19176.pas @@ -0,0 +1,2966 @@ +unit PIC16F19176; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19176'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-010:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE + {$SET_STATE_RAM '012-016:SFR'} // Bank 0 : TRISA, TRISB, TRISC, TRISD, TRISE + {$SET_STATE_RAM '018-01C:SFR'} // Bank 0 : LATA, LATB, LATC, LATD, LATE + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D1C:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '1D1E-1D22:SFR'} // Bank 58 : LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10 + {$SET_STATE_RAM '1D24-1D28:SFR'} // Bank 58 : LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16 + {$SET_STATE_RAM '1D2A-1D2E:SFR'} // Bank 58 : LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22 + {$SET_STATE_RAM '1D30-1D34:SFR'} // Bank 58 : LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28 + {$SET_STATE_RAM '1D36-1D3A:SFR'} // Bank 58 : LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34 + {$SET_STATE_RAM '1D3C-1D40:SFR'} // Bank 58 : LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40 + {$SET_STATE_RAM '1D42-1D46:SFR'} // Bank 58 : LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46 + {$SET_STATE_RAM '1E0F-1E37:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3 + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F32:SFR'} // Bank 62 : RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1C:07'} // LCDDATA4 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D22:07'} // LCDDATA10 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D28:07'} // LCDDATA16 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2E:07'} // LCDDATA22 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D34:07'} // LCDDATA28 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3A:07'} // LCDDATA34 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D40:07'} // LCDDATA40 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D46:07'} // LCDDATA46 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:03'} // ODCONE bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/ANC7/IOCC7/RC7 + // Pin 25 : SEG24/AND0/RD0 + // Pin 26 : SEG25/AND1/RD1 + // Pin 27 : SEG26/COM5/AND2/RD2 + // Pin 28 : SEG27/COM4/AND3/RD3 + // Pin 29 : SEG28/AND4/RD4 + // Pin 30 : SEG29/AND5/RD5 + // Pin 31 : SEG30/AND6/RD6 + // Pin 32 : SEG31/AND7/RD7 + // Pin 33 : ANE0/SEG32/RE0 + // Pin 34 : ANE1/COM6/SEG33/RE1 + // Pin 35 : ANE2/COM7/SEG34/RE2 + // Pin 36 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 37 : AVDD/VDD/VSEL0 + // Pin 38 : VDD + // Pin 39 : AVSS/VSS + // Pin 40 : VSS + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-25,1-26,2-27,3-28,4-29,5-30,6-31,7-32'} // PORTD + {$MAP_RAM_TO_PIN '010:0-33,1-34,2-35,3-36'} // PORTE + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19185.pas b/devices17/PIC16F19185.pas new file mode 100644 index 00000000..ab4bad44 --- /dev/null +++ b/devices17/PIC16F19185.pas @@ -0,0 +1,3162 @@ +unit PIC16F19185; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19185'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 48} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $1D1D; + LCDDATA5_S47C0 : bit absolute LCDDATA5.7; + LCDDATA5_S46C0 : bit absolute LCDDATA5.6; + LCDDATA5_S45C0 : bit absolute LCDDATA5.5; + LCDDATA5_S44C0 : bit absolute LCDDATA5.4; + LCDDATA5_S43C0 : bit absolute LCDDATA5.3; + LCDDATA5_S42C0 : bit absolute LCDDATA5.2; + LCDDATA5_S41C0 : bit absolute LCDDATA5.1; + LCDDATA5_S40C0 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $1D23; + LCDDATA11_S47C1 : bit absolute LCDDATA11.7; + LCDDATA11_S46C1 : bit absolute LCDDATA11.6; + LCDDATA11_S45C1 : bit absolute LCDDATA11.5; + LCDDATA11_S44C1 : bit absolute LCDDATA11.4; + LCDDATA11_S43C1 : bit absolute LCDDATA11.3; + LCDDATA11_S42C1 : bit absolute LCDDATA11.2; + LCDDATA11_S41C1 : bit absolute LCDDATA11.1; + LCDDATA11_S40C1 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $1D29; + LCDDATA17_S47C2 : bit absolute LCDDATA17.7; + LCDDATA17_S46C2 : bit absolute LCDDATA17.6; + LCDDATA17_S45C2 : bit absolute LCDDATA17.5; + LCDDATA17_S44C2 : bit absolute LCDDATA17.4; + LCDDATA17_S43C2 : bit absolute LCDDATA17.3; + LCDDATA17_S42C2 : bit absolute LCDDATA17.2; + LCDDATA17_S41C2 : bit absolute LCDDATA17.1; + LCDDATA17_S40C2 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $1D2F; + LCDDATA23_S47C3 : bit absolute LCDDATA23.7; + LCDDATA23_S46C3 : bit absolute LCDDATA23.6; + LCDDATA23_S45C3 : bit absolute LCDDATA23.5; + LCDDATA23_S44C3 : bit absolute LCDDATA23.4; + LCDDATA23_S43C3 : bit absolute LCDDATA23.3; + LCDDATA23_S42C3 : bit absolute LCDDATA23.2; + LCDDATA23_S41C3 : bit absolute LCDDATA23.1; + LCDDATA23_S40C3 : bit absolute LCDDATA23.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA29 : byte absolute $1D35; + LCDDATA29_S47C4 : bit absolute LCDDATA29.7; + LCDDATA29_S46C4 : bit absolute LCDDATA29.6; + LCDDATA29_S45C4 : bit absolute LCDDATA29.5; + LCDDATA29_S44C4 : bit absolute LCDDATA29.4; + LCDDATA29_S43C4 : bit absolute LCDDATA29.3; + LCDDATA29_S42C4 : bit absolute LCDDATA29.2; + LCDDATA29_S41C4 : bit absolute LCDDATA29.1; + LCDDATA29_S40C4 : bit absolute LCDDATA29.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA35 : byte absolute $1D3B; + LCDDATA35_S47C5 : bit absolute LCDDATA35.7; + LCDDATA35_S46C5 : bit absolute LCDDATA35.6; + LCDDATA35_S45C5 : bit absolute LCDDATA35.5; + LCDDATA35_S44C5 : bit absolute LCDDATA35.4; + LCDDATA35_S43C5 : bit absolute LCDDATA35.3; + LCDDATA35_S42C5 : bit absolute LCDDATA35.2; + LCDDATA35_S41C5 : bit absolute LCDDATA35.1; + LCDDATA35_S40C5 : bit absolute LCDDATA35.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA41 : byte absolute $1D41; + LCDDATA41_S47C6 : bit absolute LCDDATA41.7; + LCDDATA41_S46C6 : bit absolute LCDDATA41.6; + LCDDATA41_S45C6 : bit absolute LCDDATA41.5; + LCDDATA41_S44C6 : bit absolute LCDDATA41.4; + LCDDATA41_S43C6 : bit absolute LCDDATA41.3; + LCDDATA41_S42C6 : bit absolute LCDDATA41.2; + LCDDATA41_S41C6 : bit absolute LCDDATA41.1; + LCDDATA41_S40C6 : bit absolute LCDDATA41.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + LCDDATA47 : byte absolute $1D47; + LCDDATA47_S47C7 : bit absolute LCDDATA47.7; + LCDDATA47_S46C7 : bit absolute LCDDATA47.6; + LCDDATA47_S45C7 : bit absolute LCDDATA47.5; + LCDDATA47_S44C7 : bit absolute LCDDATA47.4; + LCDDATA47_S43C7 : bit absolute LCDDATA47.3; + LCDDATA47_S42C7 : bit absolute LCDDATA47.2; + LCDDATA47_S41C7 : bit absolute LCDDATA47.1; + LCDDATA47_S40C7 : bit absolute LCDDATA47.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS5 : bit absolute RF0PPS.5; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS5 : bit absolute RF1PPS.5; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS5 : bit absolute RF2PPS.5; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS5 : bit absolute RF3PPS.5; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PPS5 : bit absolute RF4PPS.5; + RF4PPS_RF4PPS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PPS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PPS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PPS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PPS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS5 : bit absolute RF5PPS.5; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS5 : bit absolute RF6PPS.5; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS5 : bit absolute RF7PPS.5; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D47:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28, LCDDATA29, LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34, LCDDATA35, LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40, LCDDATA41, LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46, LCDDATA47 + {$SET_STATE_RAM '1E0F-1E3F:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS + {$SET_STATE_RAM '1E50-1E54:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F32:SFR'} // Bank 62 : RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1C:07'} // LCDDATA4 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D22:07'} // LCDDATA10 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D28:07'} // LCDDATA16 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2E:07'} // LCDDATA22 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D34:07'} // LCDDATA28 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3A:07'} // LCDDATA34 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D40:07'} // LCDDATA40 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D46:07'} // LCDDATA46 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:3F'} // RF0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:3F'} // RF1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:3F'} // RF2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:3F'} // RF3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:3F'} // RF4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:3F'} // RF5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:3F'} // RF6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:3F'} // RF7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:03'} // ODCONE bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/ANC7/IOCC7/RC7 + // Pin 25 : SEG24/AND0/RD0 + // Pin 26 : SEG25/AND1/RD1 + // Pin 27 : SEG26/COM5/AND2/RD2 + // Pin 28 : SEG27/COM4/AND3/RD3 + // Pin 29 : SEG28/AND4/RD4 + // Pin 30 : SEG29/AND5/RD5 + // Pin 31 : SEG30/AND6/RD6 + // Pin 32 : SEG31/AND7/RD7 + // Pin 33 : ANE0/SEG32/RE0 + // Pin 34 : ANE1/COM6/SEG33/RE1 + // Pin 35 : ANE2/COM7/SEG34/RE2 + // Pin 36 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 37 : AVDD/VDD/VSEL0 + // Pin 38 : VDD + // Pin 39 : AVSS/VSS + // Pin 40 : VSS + // Pin 41 : ANF0/SEG40/RF0 + // Pin 42 : ANF1/SEG41/RF1 + // Pin 43 : ANF2/SEG42/RF2 + // Pin 44 : ANF3/SEG43/RF3 + // Pin 45 : ANF4/SEG44/RF4 + // Pin 46 : ANF5/SEG45/RF5 + // Pin 47 : ANF6/SEG46/RF6 + // Pin 48 : ANF7/SEG47/RF7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-25,1-26,2-27,3-28,4-29,5-30,6-31,7-32'} // PORTD + {$MAP_RAM_TO_PIN '010:0-33,1-34,2-35,3-36'} // PORTE + {$MAP_RAM_TO_PIN '011:0-41,1-42,2-43,3-44,4-45,5-46,6-47,7-48'} // PORTF + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19186.pas b/devices17/PIC16F19186.pas new file mode 100644 index 00000000..01fc3200 --- /dev/null +++ b/devices17/PIC16F19186.pas @@ -0,0 +1,3175 @@ +unit PIC16F19186; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19186'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 48} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + HIDRVB : byte absolute $040D; + HIDRVB_HIDB1 : bit absolute HIDRVB.1; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON0_NSS : bit absolute DAC1CON0.0; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $1D1D; + LCDDATA5_S47C0 : bit absolute LCDDATA5.7; + LCDDATA5_S46C0 : bit absolute LCDDATA5.6; + LCDDATA5_S45C0 : bit absolute LCDDATA5.5; + LCDDATA5_S44C0 : bit absolute LCDDATA5.4; + LCDDATA5_S43C0 : bit absolute LCDDATA5.3; + LCDDATA5_S42C0 : bit absolute LCDDATA5.2; + LCDDATA5_S41C0 : bit absolute LCDDATA5.1; + LCDDATA5_S40C0 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $1D23; + LCDDATA11_S47C1 : bit absolute LCDDATA11.7; + LCDDATA11_S46C1 : bit absolute LCDDATA11.6; + LCDDATA11_S45C1 : bit absolute LCDDATA11.5; + LCDDATA11_S44C1 : bit absolute LCDDATA11.4; + LCDDATA11_S43C1 : bit absolute LCDDATA11.3; + LCDDATA11_S42C1 : bit absolute LCDDATA11.2; + LCDDATA11_S41C1 : bit absolute LCDDATA11.1; + LCDDATA11_S40C1 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $1D29; + LCDDATA17_S47C2 : bit absolute LCDDATA17.7; + LCDDATA17_S46C2 : bit absolute LCDDATA17.6; + LCDDATA17_S45C2 : bit absolute LCDDATA17.5; + LCDDATA17_S44C2 : bit absolute LCDDATA17.4; + LCDDATA17_S43C2 : bit absolute LCDDATA17.3; + LCDDATA17_S42C2 : bit absolute LCDDATA17.2; + LCDDATA17_S41C2 : bit absolute LCDDATA17.1; + LCDDATA17_S40C2 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $1D2F; + LCDDATA23_S47C3 : bit absolute LCDDATA23.7; + LCDDATA23_S46C3 : bit absolute LCDDATA23.6; + LCDDATA23_S45C3 : bit absolute LCDDATA23.5; + LCDDATA23_S44C3 : bit absolute LCDDATA23.4; + LCDDATA23_S43C3 : bit absolute LCDDATA23.3; + LCDDATA23_S42C3 : bit absolute LCDDATA23.2; + LCDDATA23_S41C3 : bit absolute LCDDATA23.1; + LCDDATA23_S40C3 : bit absolute LCDDATA23.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA29 : byte absolute $1D35; + LCDDATA29_S47C4 : bit absolute LCDDATA29.7; + LCDDATA29_S46C4 : bit absolute LCDDATA29.6; + LCDDATA29_S45C4 : bit absolute LCDDATA29.5; + LCDDATA29_S44C4 : bit absolute LCDDATA29.4; + LCDDATA29_S43C4 : bit absolute LCDDATA29.3; + LCDDATA29_S42C4 : bit absolute LCDDATA29.2; + LCDDATA29_S41C4 : bit absolute LCDDATA29.1; + LCDDATA29_S40C4 : bit absolute LCDDATA29.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA35 : byte absolute $1D3B; + LCDDATA35_S47C5 : bit absolute LCDDATA35.7; + LCDDATA35_S46C5 : bit absolute LCDDATA35.6; + LCDDATA35_S45C5 : bit absolute LCDDATA35.5; + LCDDATA35_S44C5 : bit absolute LCDDATA35.4; + LCDDATA35_S43C5 : bit absolute LCDDATA35.3; + LCDDATA35_S42C5 : bit absolute LCDDATA35.2; + LCDDATA35_S41C5 : bit absolute LCDDATA35.1; + LCDDATA35_S40C5 : bit absolute LCDDATA35.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA41 : byte absolute $1D41; + LCDDATA41_S47C6 : bit absolute LCDDATA41.7; + LCDDATA41_S46C6 : bit absolute LCDDATA41.6; + LCDDATA41_S45C6 : bit absolute LCDDATA41.5; + LCDDATA41_S44C6 : bit absolute LCDDATA41.4; + LCDDATA41_S43C6 : bit absolute LCDDATA41.3; + LCDDATA41_S42C6 : bit absolute LCDDATA41.2; + LCDDATA41_S41C6 : bit absolute LCDDATA41.1; + LCDDATA41_S40C6 : bit absolute LCDDATA41.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + LCDDATA47 : byte absolute $1D47; + LCDDATA47_S47C7 : bit absolute LCDDATA47.7; + LCDDATA47_S46C7 : bit absolute LCDDATA47.6; + LCDDATA47_S45C7 : bit absolute LCDDATA47.5; + LCDDATA47_S44C7 : bit absolute LCDDATA47.4; + LCDDATA47_S43C7 : bit absolute LCDDATA47.3; + LCDDATA47_S42C7 : bit absolute LCDDATA47.2; + LCDDATA47_S41C7 : bit absolute LCDDATA47.1; + LCDDATA47_S40C7 : bit absolute LCDDATA47.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS5 : bit absolute RF0PPS.5; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS5 : bit absolute RF1PPS.5; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS5 : bit absolute RF2PPS.5; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS5 : bit absolute RF3PPS.5; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PPS5 : bit absolute RF4PPS.5; + RF4PPS_RF4PPS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PPS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PPS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PPS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PPS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS5 : bit absolute RF5PPS.5; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS5 : bit absolute RF6PPS.5; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS5 : bit absolute RF7PPS.5; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADCACTPPS : byte absolute $1EC3; + ADCACTPPS_ADCACTPPS4 : bit absolute ADCACTPPS.4; + ADCACTPPS_ADCACTPPS3 : bit absolute ADCACTPPS.3; + ADCACTPPS_ADCACTPPS2 : bit absolute ADCACTPPS.2; + ADCACTPPS_ADCACTPPS1 : bit absolute ADCACTPPS.1; + ADCACTPPS_ADCACTPPS0 : bit absolute ADCACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE2PPS : byte absolute $1F32; + RE2PPS_RE2PPS5 : bit absolute RE2PPS.5; + RE2PPS_RE2PPS4 : bit absolute RE2PPS.4; + RE2PPS_RE2PPS3 : bit absolute RE2PPS.3; + RE2PPS_RE2PPS2 : bit absolute RE2PPS.2; + RE2PPS_RE2PPS1 : bit absolute RE2PPS.1; + RE2PPS_RE2PPS0 : bit absolute RE2PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + IOCAP : byte absolute $1F3D; + IOCAP_IOCAP7 : bit absolute IOCAP.7; + IOCAP_IOCAP6 : bit absolute IOCAP.6; + IOCAP_IOCAP5 : bit absolute IOCAP.5; + IOCAP_IOCAP4 : bit absolute IOCAP.4; + IOCAP_IOCAP3 : bit absolute IOCAP.3; + IOCAP_IOCAP2 : bit absolute IOCAP.2; + IOCAP_IOCAP1 : bit absolute IOCAP.1; + IOCAP_IOCAP0 : bit absolute IOCAP.0; + IOCAN : byte absolute $1F3E; + IOCAN_IOCAN7 : bit absolute IOCAN.7; + IOCAN_IOCAN6 : bit absolute IOCAN.6; + IOCAN_IOCAN5 : bit absolute IOCAN.5; + IOCAN_IOCAN4 : bit absolute IOCAN.4; + IOCAN_IOCAN3 : bit absolute IOCAN.3; + IOCAN_IOCAN2 : bit absolute IOCAN.2; + IOCAN_IOCAN1 : bit absolute IOCAN.1; + IOCAN_IOCAN0 : bit absolute IOCAN.0; + IOCAF : byte absolute $1F3F; + IOCAF_IOCAF7 : bit absolute IOCAF.7; + IOCAF_IOCAF6 : bit absolute IOCAF.6; + IOCAF_IOCAF5 : bit absolute IOCAF.5; + IOCAF_IOCAF4 : bit absolute IOCAF.4; + IOCAF_IOCAF3 : bit absolute IOCAF.3; + IOCAF_IOCAF2 : bit absolute IOCAF.2; + IOCAF_IOCAF1 : bit absolute IOCAF.1; + IOCAF_IOCAF0 : bit absolute IOCAF.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE2 : bit absolute WPUE.2; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE2 : bit absolute SLRCONE.2; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE2 : bit absolute INLVLE.2; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40D-40D:SFR'} // Bank 8 : HIDRVB + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D47:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28, LCDDATA29, LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34, LCDDATA35, LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40, LCDDATA41, LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46, LCDDATA47 + {$SET_STATE_RAM '1E0F-1E3F:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS + {$SET_STATE_RAM '1E50-1E54:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADCACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F24:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS + {$SET_STATE_RAM '1F26-1F32:SFR'} // Bank 62 : RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS, RE2PPS + {$SET_STATE_RAM '1F38-1F3F:SFR'} // Bank 62 : ANSELA, WPUA, ODCONA, SLRCONA, INLVLA, IOCAP, IOCAN, IOCAF + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '00E:DF'} // PORTC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:DF'} // TRISC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:07'} // TRISE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01A:DF'} // LATC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:07'} // LATE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:02'} // HIDRVB bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BD'} // DAC1CON0 bits 6,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D18:DF'} // LCDDATA0 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D19:EF'} // LCDDATA1 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1A:DC'} // LCDDATA2 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1C:07'} // LCDDATA4 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1E:DF'} // LCDDATA6 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1F:EF'} // LCDDATA7 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D20:DC'} // LCDDATA8 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D22:07'} // LCDDATA10 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D24:DF'} // LCDDATA12 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D25:EF'} // LCDDATA13 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D26:DC'} // LCDDATA14 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D28:07'} // LCDDATA16 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2A:DF'} // LCDDATA18 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2B:EF'} // LCDDATA19 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2C:DC'} // LCDDATA20 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2E:07'} // LCDDATA22 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D30:DF'} // LCDDATA24 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D31:EF'} // LCDDATA25 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D32:DC'} // LCDDATA26 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D34:07'} // LCDDATA28 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D36:DF'} // LCDDATA30 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D37:EF'} // LCDDATA31 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D38:DC'} // LCDDATA32 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3A:07'} // LCDDATA34 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3C:DF'} // LCDDATA36 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3D:EF'} // LCDDATA37 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3E:DC'} // LCDDATA38 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D40:07'} // LCDDATA40 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D42:DF'} // LCDDATA42 bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D43:EF'} // LCDDATA43 bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D44:DC'} // LCDDATA44 bits 5,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D46:07'} // LCDDATA46 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:3F'} // RF0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:3F'} // RF1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:3F'} // RF2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:3F'} // RF3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:3F'} // RF4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:3F'} // RF5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:3F'} // RF6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:3F'} // RF7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:0F'} // INTPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:0F'} // T0CKIPPS bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:1F'} // T1CKIPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:1F'} // T1GPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:1F'} // T2INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:1F'} // T4INPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:1F'} // CCP1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:1F'} // CCP2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:1F'} // SMT1WINPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:1F'} // SMT1SIGPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:1F'} // CWG1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:1F'} // CLCIN0PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:1F'} // CLCIN1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:1F'} // CLCIN2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:1F'} // CLCIN3PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:1F'} // ADCACTPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:1F'} // SSP1CLKPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:1F'} // SSP1DATPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:1F'} // SSP1SSPPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:1F'} // RX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:1F'} // TX1PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:1F'} // RX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:1F'} // TX2PPS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F32:3F'} // RE2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4E:DF'} // ANSELC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F4F:DF'} // WPUC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F50:DF'} // ODCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F51:DF'} // SLRCONC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F52:DF'} // INLVLC bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F53:DF'} // IOCCP bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F54:DF'} // IOCCN bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F55:DF'} // IOCCF bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:0F'} // WPUE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:03'} // ODCONE bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:07'} // SLRCONE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:0F'} // INLVLE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:08'} // IOCEP bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:08'} // IOCEN bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:08'} // IOCEF bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : SEG0/ANA0/C1IN0-/C2IN0-/IOCA0/RA0 + // Pin 2 : SEG1/C1IN1-/C2IN1-/ANA1/IOCA1/RA1 + // Pin 3 : DAC1OUT1/SEG2/ANA2/C1IN0+/C2IN0+/IOCA2/RA2 + // Pin 4 : SEG3/VREF+/ANA3/C1IN1+/IOCA3/RA3 + // Pin 5 : COM3/SEG4/ANA4/IOCA4/RA4 + // Pin 6 : VBAT/IOCA5/RA5 + // Pin 7 : SEG6/CLKOUT/ANA6/IOCA6/RA6 + // Pin 8 : CLKIN/SEG7/ANA7/IOCA7/RA7 + // Pin 9 : SEG8/ZCD/ANB0/C2IN1+/IOCB0/RB0 + // Pin 10 : HICB1/SEG9/C1IN3-/C2IN3-/ANB1/SMB_I2C/IOCB1/RB1 + // Pin 11 : CFLY1/SEG10/ANB2/SMB_I2C/IOCB2/RB2 + // Pin 12 : C1IN2-/C2IN2-/CFLY2/SEG11/ANB3/IOCB3/RB3 + // Pin 13 : COM0/ANB4/IOCB4/RB4 + // Pin 14 : COM1/SEG13/ANB5/IOCB5/RB5 + // Pin 15 : ICSPCLK/SEG14/ICDCLK/ANB6/IOCB6/RB6 + // Pin 16 : ICSPDAT/SEG15/ICDDAT/DAC1OUT2/ANB7/IOCB7/RB7 + // Pin 17 : SOSCO/IOCC0/RC0 + // Pin 18 : SOSCI/IOCC1/RC1 + // Pin 19 : COM2/SEG18/ANC2/IOCC2/RC2 + // Pin 20 : SEG19/SMB_I2C/ANC3/IOCC3/RC3 + // Pin 21 : SEG20/SMB_I2C/ANC4/IOCC4/RC4 + // Pin 22 : LCDBIAS3/RC5 + // Pin 23 : LCDBIAS2/SEG22/ANC6/IOCC6/RC6 + // Pin 24 : SEG23/LCDBIAS1/ANC7/IOCC7/RC7 + // Pin 25 : SEG24/AND0/RD0 + // Pin 26 : SEG25/AND1/RD1 + // Pin 27 : SEG26/COM5/AND2/RD2 + // Pin 28 : SEG27/COM4/AND3/RD3 + // Pin 29 : SEG28/AND4/RD4 + // Pin 30 : SEG29/AND5/RD5 + // Pin 31 : SEG30/AND6/RD6 + // Pin 32 : SEG31/AND7/RD7 + // Pin 33 : ANE0/SEG32/RE0 + // Pin 34 : ANE1/COM6/SEG33/RE1 + // Pin 35 : ANE2/COM7/SEG34/RE2 + // Pin 36 : MCLR_n/ICDMCLR_n/IOCE3/RE3 + // Pin 37 : AVDD/VDD/VSEL0 + // Pin 38 : VDD + // Pin 39 : AVSS/VSS + // Pin 40 : VSS + // Pin 41 : ANF0/SEG40/RF0 + // Pin 42 : ANF1/SEG41/RF1 + // Pin 43 : ANF2/SEG42/RF2 + // Pin 44 : ANF3/SEG43/RF3 + // Pin 45 : ANF4/SEG44/RF4 + // Pin 46 : ANF5/SEG45/RF5 + // Pin 47 : ANF6/SEG46/RF6 + // Pin 48 : ANF7/SEG47/RF7 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-1,1-2,2-3,3-4,4-5,5-6,6-7,7-8'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-9,1-10,2-11,3-12,4-13,5-14,6-15,7-16'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-17,1-18,2-19,3-20,4-21,6-23,7-24'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-25,1-26,2-27,3-28,4-29,5-30,6-31,7-32'} // PORTD + {$MAP_RAM_TO_PIN '010:0-33,1-34,2-35,3-36'} // PORTE + {$MAP_RAM_TO_PIN '011:0-41,1-42,2-43,3-44,4-45,5-46,6-47,7-48'} // PORTF + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19195.pas b/devices17/PIC16F19195.pas new file mode 100644 index 00000000..3c372117 --- /dev/null +++ b/devices17/PIC16F19195.pas @@ -0,0 +1,3518 @@ +unit PIC16F19195; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19195'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_P4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_P4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_P3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_P3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + PORTG : byte absolute $0C8C; + PORTG_RG7 : bit absolute PORTG.7; + PORTG_RG6 : bit absolute PORTG.6; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + PORTH : byte absolute $0C8D; + PORTH_RH3 : bit absolute PORTH.3; + PORTH_RH2 : bit absolute PORTH.2; + PORTH_RH1 : bit absolute PORTH.1; + PORTH_RH0 : bit absolute PORTH.0; + TRISG : byte absolute $0C8E; + TRISG_TRISG7 : bit absolute TRISG.7; + TRISG_TRISG6 : bit absolute TRISG.6; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + TRISH : byte absolute $0C8F; + TRISH_TRISH3 : bit absolute TRISH.3; + TRISH_TRISH2 : bit absolute TRISH.2; + TRISH_TRISH1 : bit absolute TRISH.1; + TRISH_TRISH0 : bit absolute TRISH.0; + LATG : byte absolute $0C90; + LATG_LATG7 : bit absolute LATG.7; + LATG_LATG6 : bit absolute LATG.6; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + LATH : byte absolute $0C91; + LATH_LATH3 : bit absolute LATH.3; + LATH_LATH2 : bit absolute LATH.2; + LATH_LATH1 : bit absolute LATH.1; + LATH_LATH0 : bit absolute LATH.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S05C0 : bit absolute LCDDATA0.5; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S12C0 : bit absolute LCDDATA1.4; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S21C0 : bit absolute LCDDATA2.5; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA2_S17C0 : bit absolute LCDDATA2.1; + LCDDATA2_S16C0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S39C0 : bit absolute LCDDATA4.7; + LCDDATA4_S38C0 : bit absolute LCDDATA4.6; + LCDDATA4_S37C0 : bit absolute LCDDATA4.5; + LCDDATA4_S36C0 : bit absolute LCDDATA4.4; + LCDDATA4_S35C0 : bit absolute LCDDATA4.3; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $1D1D; + LCDDATA5_S45C0 : bit absolute LCDDATA5.5; + LCDDATA5_S44C0 : bit absolute LCDDATA5.4; + LCDDATA5_S43C0 : bit absolute LCDDATA5.3; + LCDDATA5_S42C0 : bit absolute LCDDATA5.2; + LCDDATA5_S41C0 : bit absolute LCDDATA5.1; + LCDDATA5_S40C0 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S05C1 : bit absolute LCDDATA6.5; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S12C1 : bit absolute LCDDATA7.4; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S21C1 : bit absolute LCDDATA8.5; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA8_S17C1 : bit absolute LCDDATA8.1; + LCDDATA8_S16C1 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S39C1 : bit absolute LCDDATA10.7; + LCDDATA10_S38C1 : bit absolute LCDDATA10.6; + LCDDATA10_S37C1 : bit absolute LCDDATA10.5; + LCDDATA10_S36C1 : bit absolute LCDDATA10.4; + LCDDATA10_S35C1 : bit absolute LCDDATA10.3; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $1D23; + LCDDATA11_S45C1 : bit absolute LCDDATA11.5; + LCDDATA11_S44C1 : bit absolute LCDDATA11.4; + LCDDATA11_S43C1 : bit absolute LCDDATA11.3; + LCDDATA11_S42C1 : bit absolute LCDDATA11.2; + LCDDATA11_S41C1 : bit absolute LCDDATA11.1; + LCDDATA11_S40C1 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S05C2 : bit absolute LCDDATA12.5; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S12C2 : bit absolute LCDDATA13.4; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S21C2 : bit absolute LCDDATA14.5; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA14_S17C2 : bit absolute LCDDATA14.1; + LCDDATA14_S16C2 : bit absolute LCDDATA14.0; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S39C2 : bit absolute LCDDATA16.7; + LCDDATA16_S38C2 : bit absolute LCDDATA16.6; + LCDDATA16_S37C2 : bit absolute LCDDATA16.5; + LCDDATA16_S36C2 : bit absolute LCDDATA16.4; + LCDDATA16_S35C2 : bit absolute LCDDATA16.3; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $1D29; + LCDDATA17_S45C2 : bit absolute LCDDATA17.5; + LCDDATA17_S44C2 : bit absolute LCDDATA17.4; + LCDDATA17_S43C2 : bit absolute LCDDATA17.3; + LCDDATA17_S42C2 : bit absolute LCDDATA17.2; + LCDDATA17_S41C2 : bit absolute LCDDATA17.1; + LCDDATA17_S40C2 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S05C3 : bit absolute LCDDATA18.5; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S12C3 : bit absolute LCDDATA19.4; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S21C3 : bit absolute LCDDATA20.5; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA20_S17C3 : bit absolute LCDDATA20.1; + LCDDATA20_S16C3 : bit absolute LCDDATA20.0; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S39C3 : bit absolute LCDDATA22.7; + LCDDATA22_S38C3 : bit absolute LCDDATA22.6; + LCDDATA22_S37C3 : bit absolute LCDDATA22.5; + LCDDATA22_S36C3 : bit absolute LCDDATA22.4; + LCDDATA22_S35C3 : bit absolute LCDDATA22.3; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $1D2F; + LCDDATA23_S45C3 : bit absolute LCDDATA23.5; + LCDDATA23_S44C3 : bit absolute LCDDATA23.4; + LCDDATA23_S43C3 : bit absolute LCDDATA23.3; + LCDDATA23_S42C3 : bit absolute LCDDATA23.2; + LCDDATA23_S41C3 : bit absolute LCDDATA23.1; + LCDDATA23_S40C3 : bit absolute LCDDATA23.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S05C4 : bit absolute LCDDATA24.5; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S12C4 : bit absolute LCDDATA25.4; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S21C4 : bit absolute LCDDATA26.5; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA26_S17C4 : bit absolute LCDDATA26.1; + LCDDATA26_S16C4 : bit absolute LCDDATA26.0; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S39C4 : bit absolute LCDDATA28.7; + LCDDATA28_S38C4 : bit absolute LCDDATA28.6; + LCDDATA28_S37C4 : bit absolute LCDDATA28.5; + LCDDATA28_S36C4 : bit absolute LCDDATA28.4; + LCDDATA28_S35C4 : bit absolute LCDDATA28.3; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA29 : byte absolute $1D35; + LCDDATA29_S45C4 : bit absolute LCDDATA29.5; + LCDDATA29_S44C4 : bit absolute LCDDATA29.4; + LCDDATA29_S43C4 : bit absolute LCDDATA29.3; + LCDDATA29_S42C4 : bit absolute LCDDATA29.2; + LCDDATA29_S41C4 : bit absolute LCDDATA29.1; + LCDDATA29_S40C4 : bit absolute LCDDATA29.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S05C5 : bit absolute LCDDATA30.5; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S12C5 : bit absolute LCDDATA31.4; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S21C5 : bit absolute LCDDATA32.5; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA32_S17C5 : bit absolute LCDDATA32.1; + LCDDATA32_S16C5 : bit absolute LCDDATA32.0; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S39C5 : bit absolute LCDDATA34.7; + LCDDATA34_S38C5 : bit absolute LCDDATA34.6; + LCDDATA34_S37C5 : bit absolute LCDDATA34.5; + LCDDATA34_S36C5 : bit absolute LCDDATA34.4; + LCDDATA34_S35C5 : bit absolute LCDDATA34.3; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA35 : byte absolute $1D3B; + LCDDATA35_S45C5 : bit absolute LCDDATA35.5; + LCDDATA35_S44C5 : bit absolute LCDDATA35.4; + LCDDATA35_S43C5 : bit absolute LCDDATA35.3; + LCDDATA35_S42C5 : bit absolute LCDDATA35.2; + LCDDATA35_S41C5 : bit absolute LCDDATA35.1; + LCDDATA35_S40C5 : bit absolute LCDDATA35.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S05C6 : bit absolute LCDDATA36.5; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S12C6 : bit absolute LCDDATA37.4; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S21C6 : bit absolute LCDDATA38.5; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA38_S17C6 : bit absolute LCDDATA38.1; + LCDDATA38_S16C6 : bit absolute LCDDATA38.0; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S39C6 : bit absolute LCDDATA40.7; + LCDDATA40_S38C6 : bit absolute LCDDATA40.6; + LCDDATA40_S37C6 : bit absolute LCDDATA40.5; + LCDDATA40_S36C6 : bit absolute LCDDATA40.4; + LCDDATA40_S35C6 : bit absolute LCDDATA40.3; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA41 : byte absolute $1D41; + LCDDATA41_S45C6 : bit absolute LCDDATA41.5; + LCDDATA41_S44C6 : bit absolute LCDDATA41.4; + LCDDATA41_S43C6 : bit absolute LCDDATA41.3; + LCDDATA41_S42C6 : bit absolute LCDDATA41.2; + LCDDATA41_S41C6 : bit absolute LCDDATA41.1; + LCDDATA41_S40C6 : bit absolute LCDDATA41.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S05C7 : bit absolute LCDDATA42.5; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S12C7 : bit absolute LCDDATA43.4; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S21C7 : bit absolute LCDDATA44.5; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA44_S17C7 : bit absolute LCDDATA44.1; + LCDDATA44_S16C7 : bit absolute LCDDATA44.0; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S39C7 : bit absolute LCDDATA46.7; + LCDDATA46_S38C7 : bit absolute LCDDATA46.6; + LCDDATA46_S37C7 : bit absolute LCDDATA46.5; + LCDDATA46_S36C7 : bit absolute LCDDATA46.4; + LCDDATA46_S35C7 : bit absolute LCDDATA46.3; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + LCDDATA47 : byte absolute $1D47; + LCDDATA47_S45C7 : bit absolute LCDDATA47.5; + LCDDATA47_S44C7 : bit absolute LCDDATA47.4; + LCDDATA47_S43C7 : bit absolute LCDDATA47.3; + LCDDATA47_S42C7 : bit absolute LCDDATA47.2; + LCDDATA47_S41C7 : bit absolute LCDDATA47.1; + LCDDATA47_S40C7 : bit absolute LCDDATA47.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS5 : bit absolute RF0PPS.5; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS5 : bit absolute RF1PPS.5; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS5 : bit absolute RF2PPS.5; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS5 : bit absolute RF3PPS.5; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PPS5 : bit absolute RF4PPS.5; + RF4PPS_RF4PPS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PPS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PPS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PPS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PPS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS5 : bit absolute RF5PPS.5; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS5 : bit absolute RF6PPS.5; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS5 : bit absolute RF7PPS.5; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + RG0PPS : byte absolute $1E40; + RG0PPS_RG0PPS5 : bit absolute RG0PPS.5; + RG0PPS_RG0PPS4 : bit absolute RG0PPS.4; + RG0PPS_RG0PPS3 : bit absolute RG0PPS.3; + RG0PPS_RG0PPS2 : bit absolute RG0PPS.2; + RG0PPS_RG0PPS1 : bit absolute RG0PPS.1; + RG0PPS_RG0PPS0 : bit absolute RG0PPS.0; + RG1PPS : byte absolute $1E41; + RG1PPS_RG1PPS5 : bit absolute RG1PPS.5; + RG1PPS_RG1PPS4 : bit absolute RG1PPS.4; + RG1PPS_RG1PPS3 : bit absolute RG1PPS.3; + RG1PPS_RG1PPS2 : bit absolute RG1PPS.2; + RG1PPS_RG1PPS1 : bit absolute RG1PPS.1; + RG1PPS_RG1PPS0 : bit absolute RG1PPS.0; + RG2PPS : byte absolute $1E42; + RG2PPS_RG2PPS5 : bit absolute RG2PPS.5; + RG2PPS_RG2PPS4 : bit absolute RG2PPS.4; + RG2PPS_RG2PPS3 : bit absolute RG2PPS.3; + RG2PPS_RG2PPS2 : bit absolute RG2PPS.2; + RG2PPS_RG2PPS1 : bit absolute RG2PPS.1; + RG2PPS_RG2PPS0 : bit absolute RG2PPS.0; + RG3PPS : byte absolute $1E43; + RG3PPS_RG3PPS5 : bit absolute RG3PPS.5; + RG3PPS_RG3PPS4 : bit absolute RG3PPS.4; + RG3PPS_RG3PPS3 : bit absolute RG3PPS.3; + RG3PPS_RG3PPS2 : bit absolute RG3PPS.2; + RG3PPS_RG3PPS1 : bit absolute RG3PPS.1; + RG3PPS_RG3PPS0 : bit absolute RG3PPS.0; + RG4PPS : byte absolute $1E44; + RG4PPS_RG4PPS5 : bit absolute RG4PPS.5; + RG4PPS_RG4PPS4 : bit absolute RG4PPS.4; + RG4PPS_RG4PPS3 : bit absolute RG4PPS.3; + RG4PPS_RG4PPS2 : bit absolute RG4PPS.2; + RG4PPS_RG4PPS1 : bit absolute RG4PPS.1; + RG4PPS_RG4PPS0 : bit absolute RG4PPS.0; + RG6PPS : byte absolute $1E46; + RG6PPS_RG6PPS5 : bit absolute RG6PPS.5; + RG6PPS_RG6PPS4 : bit absolute RG6PPS.4; + RG6PPS_RG6PPS3 : bit absolute RG6PPS.3; + RG6PPS_RG6PPS2 : bit absolute RG6PPS.2; + RG6PPS_RG6PPS1 : bit absolute RG6PPS.1; + RG6PPS_RG6PPS0 : bit absolute RG6PPS.0; + RG7PPS : byte absolute $1E47; + RG7PPS_RG7PPS5 : bit absolute RG7PPS.5; + RG7PPS_RG7PPS4 : bit absolute RG7PPS.4; + RG7PPS_RG7PPS3 : bit absolute RG7PPS.3; + RG7PPS_RG7PPS2 : bit absolute RG7PPS.2; + RG7PPS_RG7PPS1 : bit absolute RG7PPS.1; + RG7PPS_RG7PPS0 : bit absolute RG7PPS.0; + RH0PPS : byte absolute $1E48; + RH0PPS_RH0PPS5 : bit absolute RH0PPS.5; + RH0PPS_RH0PPS4 : bit absolute RH0PPS.4; + RH0PPS_RH0PPS3 : bit absolute RH0PPS.3; + RH0PPS_RH0PPS2 : bit absolute RH0PPS.2; + RH0PPS_RH0PPS1 : bit absolute RH0PPS.1; + RH0PPS_RH0PPS0 : bit absolute RH0PPS.0; + RH1PPS : byte absolute $1E49; + RH1PPS_RH1PPS5 : bit absolute RH1PPS.5; + RH1PPS_RH1PPS4 : bit absolute RH1PPS.4; + RH1PPS_RH1PPS3 : bit absolute RH1PPS.3; + RH1PPS_RH1PPS2 : bit absolute RH1PPS.2; + RH1PPS_RH1PPS1 : bit absolute RH1PPS.1; + RH1PPS_RH1PPS0 : bit absolute RH1PPS.0; + RH2PPS : byte absolute $1E4A; + RH2PPS_RH2PPS5 : bit absolute RH2PPS.5; + RH2PPS_RH2PPS4 : bit absolute RH2PPS.4; + RH2PPS_RH2PPS3 : bit absolute RH2PPS.3; + RH2PPS_RH2PPS2 : bit absolute RH2PPS.2; + RH2PPS_RH2PPS1 : bit absolute RH2PPS.1; + RH2PPS_RH2PPS0 : bit absolute RH2PPS.0; + RH3PPS : byte absolute $1E4B; + RH3PPS_RH3PPS5 : bit absolute RH3PPS.5; + RH3PPS_RH3PPS4 : bit absolute RH3PPS.4; + RH3PPS_RH3PPS3 : bit absolute RH3PPS.3; + RH3PPS_RH3PPS2 : bit absolute RH3PPS.2; + RH3PPS_RH3PPS1 : bit absolute RH3PPS.1; + RH3PPS_RH3PPS0 : bit absolute RH3PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + HIDRVF : byte absolute $1E55; + HIDRVF_HIDF7 : bit absolute HIDRVF.7; + ANSELG : byte absolute $1E5B; + ANSELG_ANSG7 : bit absolute ANSELG.7; + ANSELG_ANSG6 : bit absolute ANSELG.6; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + ANSELG_ANSG0 : bit absolute ANSELG.0; + WPUG : byte absolute $1E5C; + WPUG_WPUG7 : bit absolute WPUG.7; + WPUG_WPUG6 : bit absolute WPUG.6; + WPUG_WPUG5 : bit absolute WPUG.5; + WPUG_WPUG4 : bit absolute WPUG.4; + WPUG_WPUG3 : bit absolute WPUG.3; + WPUG_WPUG2 : bit absolute WPUG.2; + WPUG_WPUG1 : bit absolute WPUG.1; + WPUG_WPUG0 : bit absolute WPUG.0; + ODCONG : byte absolute $1E5D; + ODCONG_ODCG7 : bit absolute ODCONG.7; + ODCONG_ODCG6 : bit absolute ODCONG.6; + ODCONG_ODCG4 : bit absolute ODCONG.4; + ODCONG_ODCG3 : bit absolute ODCONG.3; + ODCONG_ODCG2 : bit absolute ODCONG.2; + ODCONG_ODCG1 : bit absolute ODCONG.1; + ODCONG_ODCG0 : bit absolute ODCONG.0; + SLRCONG : byte absolute $1E5E; + SLRCONG_SLRG7 : bit absolute SLRCONG.7; + SLRCONG_SLRG6 : bit absolute SLRCONG.6; + SLRCONG_SLRG4 : bit absolute SLRCONG.4; + SLRCONG_SLRG3 : bit absolute SLRCONG.3; + SLRCONG_SLRG2 : bit absolute SLRCONG.2; + SLRCONG_SLRG1 : bit absolute SLRCONG.1; + SLRCONG_SLRG0 : bit absolute SLRCONG.0; + INLVLG : byte absolute $1E5F; + INLVLG_INLVLG7 : bit absolute INLVLG.7; + INLVLG_INLVLG6 : bit absolute INLVLG.6; + INLVLG_INLVLG5 : bit absolute INLVLG.5; + INLVLG_INLVLG4 : bit absolute INLVLG.4; + INLVLG_INLVLG3 : bit absolute INLVLG.3; + INLVLG_INLVLG2 : bit absolute INLVLG.2; + INLVLG_INLVLG1 : bit absolute INLVLG.1; + INLVLG_INLVLG0 : bit absolute INLVLG.0; + IOCGP : byte absolute $1E60; + IOCGP_IOCGP5 : bit absolute IOCGP.5; + IOCGN : byte absolute $1E61; + IOCGN_IOCGN5 : bit absolute IOCGN.5; + IOCGF : byte absolute $1E62; + IOCGF_IOCGF5 : bit absolute IOCGF.5; + WPUH : byte absolute $1E67; + WPUH_WPUH3 : bit absolute WPUH.3; + WPUH_WPUH2 : bit absolute WPUH.2; + WPUH_WPUH1 : bit absolute WPUH.1; + WPUH_WPUH0 : bit absolute WPUH.0; + ODCONH : byte absolute $1E68; + ODCONH_ODCH3 : bit absolute ODCONH.3; + ODCONH_ODCH2 : bit absolute ODCONH.2; + ODCONH_ODCH1 : bit absolute ODCONH.1; + ODCONH_ODCH0 : bit absolute ODCONH.0; + SLRCONH : byte absolute $1E69; + SLRCONH_SLRH3 : bit absolute SLRCONH.3; + SLRCONH_SLRH2 : bit absolute SLRCONH.2; + SLRCONH_SLRH1 : bit absolute SLRCONH.1; + SLRCONH_SLRH0 : bit absolute SLRCONH.0; + INLVLH : byte absolute $1E6A; + INLVLH_INLVLH3 : bit absolute INLVLH.3; + INLVLH_INLVLH2 : bit absolute INLVLH.2; + INLVLH_INLVLH1 : bit absolute INLVLH.1; + INLVLH_INLVLH0 : bit absolute INLVLH.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS5 : bit absolute SMT1WINPPS.5; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS5 : bit absolute SMT1SIGPPS.5; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS5 : bit absolute RX1PPS.5; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS5 : bit absolute TX1PPS.5; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS5 : bit absolute RX2PPS.5; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS5 : bit absolute TX2PPS.5; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE3PPS : byte absolute $1F33; + RE3PPS_RE3PPS5 : bit absolute RE3PPS.5; + RE3PPS_RE3PPS4 : bit absolute RE3PPS.4; + RE3PPS_RE3PPS3 : bit absolute RE3PPS.3; + RE3PPS_RE3PPS2 : bit absolute RE3PPS.2; + RE3PPS_RE3PPS1 : bit absolute RE3PPS.1; + RE3PPS_RE3PPS0 : bit absolute RE3PPS.0; + RE4PPS : byte absolute $1F34; + RE4PPS_RE4PPS5 : bit absolute RE4PPS.5; + RE4PPS_RE4PPS4 : bit absolute RE4PPS.4; + RE4PPS_RE4PPS3 : bit absolute RE4PPS.3; + RE4PPS_RE4PPS2 : bit absolute RE4PPS.2; + RE4PPS_RE4PPS1 : bit absolute RE4PPS.1; + RE4PPS_RE4PPS0 : bit absolute RE4PPS.0; + RE5PPS : byte absolute $1F35; + RE5PPS_RE5PPS5 : bit absolute RE5PPS.5; + RE5PPS_RE5PPS4 : bit absolute RE5PPS.4; + RE5PPS_RE5PPS3 : bit absolute RE5PPS.3; + RE5PPS_RE5PPS2 : bit absolute RE5PPS.2; + RE5PPS_RE5PPS1 : bit absolute RE5PPS.1; + RE5PPS_RE5PPS0 : bit absolute RE5PPS.0; + RE6PPS : byte absolute $1F36; + RE6PPS_RE6PPS5 : bit absolute RE6PPS.5; + RE6PPS_RE6PPS4 : bit absolute RE6PPS.4; + RE6PPS_RE6PPS3 : bit absolute RE6PPS.3; + RE6PPS_RE6PPS2 : bit absolute RE6PPS.2; + RE6PPS_RE6PPS1 : bit absolute RE6PPS.1; + RE6PPS_RE6PPS0 : bit absolute RE6PPS.0; + RE7PPS : byte absolute $1F37; + RE7PPS_RE7PPS5 : bit absolute RE7PPS.5; + RE7PPS_RE7PPS4 : bit absolute RE7PPS.4; + RE7PPS_RE7PPS3 : bit absolute RE7PPS.3; + RE7PPS_RE7PPS2 : bit absolute RE7PPS.2; + RE7PPS_RE7PPS1 : bit absolute RE7PPS.1; + RE7PPS_RE7PPS0 : bit absolute RE7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE7 : bit absolute ANSELE.7; + ANSELE_ANSE6 : bit absolute ANSELE.6; + ANSELE_ANSE5 : bit absolute ANSELE.5; + ANSELE_ANSE4 : bit absolute ANSELE.4; + ANSELE_ANSE3 : bit absolute ANSELE.3; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE7 : bit absolute WPUE.7; + WPUE_WPUE6 : bit absolute WPUE.6; + WPUE_WPUE5 : bit absolute WPUE.5; + WPUE_WPUE4 : bit absolute WPUE.4; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE7 : bit absolute ODCONE.7; + ODCONE_ODCE6 : bit absolute ODCONE.6; + ODCONE_ODCE5 : bit absolute ODCONE.5; + ODCONE_ODCE4 : bit absolute ODCONE.4; + ODCONE_ODCE3 : bit absolute ODCONE.3; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE7 : bit absolute SLRCONE.7; + SLRCONE_SLRE6 : bit absolute SLRCONE.6; + SLRCONE_SLRE5 : bit absolute SLRCONE.5; + SLRCONE_SLRE4 : bit absolute SLRCONE.4; + SLRCONE_SLRE3 : bit absolute SLRCONE.3; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE7 : bit absolute INLVLE.7; + INLVLE_INLVLE6 : bit absolute INLVLE.6; + INLVLE_INLVLE5 : bit absolute INLVLE.5; + INLVLE_INLVLE4 : bit absolute INLVLE.4; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP7 : bit absolute IOCEP.7; + IOCEP_IOCEP6 : bit absolute IOCEP.6; + IOCEP_IOCEP5 : bit absolute IOCEP.5; + IOCEP_IOCEP4 : bit absolute IOCEP.4; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEP_IOCEP1 : bit absolute IOCEP.1; + IOCEP_IOCEP0 : bit absolute IOCEP.0; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN7 : bit absolute IOCEN.7; + IOCEN_IOCEN6 : bit absolute IOCEN.6; + IOCEN_IOCEN5 : bit absolute IOCEN.5; + IOCEN_IOCEN4 : bit absolute IOCEN.4; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEN_IOCEN1 : bit absolute IOCEN.1; + IOCEN_IOCEN0 : bit absolute IOCEN.0; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF7 : bit absolute IOCEF.7; + IOCEF_IOCEF6 : bit absolute IOCEF.6; + IOCEF_IOCEF5 : bit absolute IOCEF.5; + IOCEF_IOCEF4 : bit absolute IOCEF.4; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + IOCEF_IOCEF1 : bit absolute IOCEF.1; + IOCEF_IOCEF0 : bit absolute IOCEF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C8C-C91:SFR'} // Bank 25 : PORTG, PORTH, TRISG, TRISH, LATG, LATH + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D47:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28, LCDDATA29, LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34, LCDDATA35, LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40, LCDDATA41, LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46, LCDDATA47 + {$SET_STATE_RAM '1E0F-1E44:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS, RG0PPS, RG1PPS, RG2PPS, RG3PPS, RG4PPS + {$SET_STATE_RAM '1E46-1E4B:SFR'} // Bank 60 : RG6PPS, RG7PPS, RH0PPS, RH1PPS, RH2PPS, RH3PPS + {$SET_STATE_RAM '1E50-1E55:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF, HIDRVF + {$SET_STATE_RAM '1E5B-1E62:SFR'} // Bank 60 : ANSELG, WPUG, ODCONG, SLRCONG, INLVLG, IOCGP, IOCGN, IOCGF + {$SET_STATE_RAM '1E67-1E6A:SFR'} // Bank 60 : WPUH, ODCONH, SLRCONH, INLVLH + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F31:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS + {$SET_STATE_RAM '1F33-1F3C:SFR'} // Bank 62 : RE3PPS, RE4PPS, RE5PPS, RE6PPS, RE7PPS, ANSELA, WPUA, ODCONA, SLRCONA, INLVLA + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FB'} // PORTE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:FB'} // TRISE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:FB'} // LATE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BC'} // DAC1CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8D:0F'} // PORTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8E:DF'} // TRISG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8F:0F'} // TRISH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C90:DF'} // LATG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C91:0F'} // LATH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1D:3F'} // LCDDATA5 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D23:3F'} // LCDDATA11 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D29:3F'} // LCDDATA17 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2F:3F'} // LCDDATA23 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D35:3F'} // LCDDATA29 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3B:3F'} // LCDDATA35 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D41:3F'} // LCDDATA41 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D47:3F'} // LCDDATA47 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:3F'} // RF0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:3F'} // RF1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:3F'} // RF2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:3F'} // RF3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:3F'} // RF4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:3F'} // RF5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:3F'} // RF6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:3F'} // RF7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E40:3F'} // RG0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E41:3F'} // RG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E42:3F'} // RG2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E43:3F'} // RG3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E44:3F'} // RG4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E46:3F'} // RG6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E47:3F'} // RG7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E48:3F'} // RH0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E49:3F'} // RH1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4A:3F'} // RH2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4B:3F'} // RH3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E55:80'} // HIDRVF bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5B:DF'} // ANSELG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5D:DF'} // ODCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5E:DF'} // SLRCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E60:20'} // IOCGP bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E61:20'} // IOCGN bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E62:20'} // IOCGF bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E67:0F'} // WPUH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E68:0F'} // ODCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E69:0F'} // SLRCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E6A:0F'} // INLVLH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:3F'} // SMT1WINPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:3F'} // SMT1SIGPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F33:3F'} // RE3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F34:3F'} // RE4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F35:3F'} // RE5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F36:3F'} // RE6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F37:3F'} // RE7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:FB'} // ANSELE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:FB'} // WPUE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:FB'} // ODCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:FB'} // SLRCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:FB'} // INLVLE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:FB'} // IOCEP bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:FB'} // IOCEN bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:FB'} // IOCEF bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VLCD2/ANE1/RE1 + // Pin 2 : VLCD1/ANE0/RE0 + // Pin 3 : SEG42/ANG0/RG0 + // Pin 4 : SEG43/ANG1/RG1 + // Pin 5 : SEG44/ANG2/RG2 + // Pin 6 : SEG45/ANG3/RG3 + // Pin 7 : VPP/ICDMCLR_n/MCLR_n/IOCG5/RG5 + // Pin 8 : SEG26/ANG4/RG4 + // Pin 9 : AVSS/VSS + // Pin 10 : AVDD/VDD + // Pin 11 : SEG25/ANF7/C1IN3-/C2IN3-/HIF7/RF7 + // Pin 12 : SEG24/ANF6/C1IN0+/RF6 + // Pin 13 : DAC1OUT1/SEG23/ANF5/C1IN1-/C2IN1-/RF5 + // Pin 14 : SEG22/ANF4/C2IN0+/RF4 + // Pin 15 : SEG21/ANF3/C1IN2-/C2IN2-/RF3 + // Pin 16 : SEG20/ANF1/C1OUT/RF2 + // Pin 17 : SEG19/ANF1/C2OUT/RF1 + // Pin 18 : SEG41/ANF0/C1IN0-/C2IN0-/RF0 + // Pin 19 : COM7/SEG15/ANG7/RG7 + // Pin 20 : COM6/ANG6/RG6 + // Pin 21 : VREF+/SEG35/ANA3/RA3 + // Pin 22 : SEG34/ANA2/C1IN1+/C2IN1+/RA2 + // Pin 23 : SEG18/ANA1/RA1 + // Pin 24 : SEG33/ANA0/C1IN4-/C2IN4-/RA0 + // Pin 25 : COM5/RH1 + // Pin 26 : COM4/RH0 + // Pin 27 : VBAT/RA5 + // Pin 28 : SEG14/ANA4/C1IN1+/C2IN1+/RA4 + // Pin 29 : SOSCI/SEG32/IOCC1/RC1 + // Pin 30 : SOSCO/SEG40/IOCC0/RC0 + // Pin 31 : SEG27/IOCC6/RC6 + // Pin 32 : SEG28/IOCC7/RC7 + // Pin 33 : SEG13/IOCC2/RC2 + // Pin 34 : SEG17/IOCC3/RC3 + // Pin 35 : SEG16/IOCC4/RC4 + // Pin 36 : SEG12/IOCC5/RC5 + // Pin 37 : ICSPDAT/ICDDAT/DAC1OUT2/SEG39/ANB7/IOCB7/RB7 + // Pin 38 : VDD + // Pin 39 : CLKIN/SEG37/ANA7/RA7 + // Pin 40 : CLKOUT/SEG36/ANA6/RA6 + // Pin 41 : VSS + // Pin 42 : ICSPCLK/ICDCLK/SEG38/ANB6/IOCB6/RB6 + // Pin 43 : SEG29/ANB5/IOCB5/RB5 + // Pin 44 : SEG11/ANB4/IOCB4/RB4 + // Pin 45 : SEG10/ANB3/IOCB3/RB3 + // Pin 46 : SEG9/ANB2/IOCB2/RB2 + // Pin 47 : SEG8/ANB1/IOCB1/RB1 + // Pin 48 : ZCD/SEG30/ANB0/IOCB0/RB0 + // Pin 49 : SEG7/AND7/RD7 + // Pin 50 : SEG6/AND6/RD6 + // Pin 51 : SEG5/AND5/RD5 + // Pin 52 : SEG4/AND4/RD4 + // Pin 53 : SEG3/AND3/RD3 + // Pin 54 : SEG2/AND2/RD2 + // Pin 55 : SEG1/AND1/RD1 + // Pin 56 : SEG47/CFLY2/RH3 + // Pin 57 : SEG46/CFLY1/RH2 + // Pin 58 : SEG0/AND0/RD0 + // Pin 59 : SEG31/ANE7/IOCE7/RE7 + // Pin 60 : COM3/ANE6/IOCE6/RE6 + // Pin 61 : COM2/ANE5/IOCE5/RE5 + // Pin 62 : COM1/ANE4/IOCE4/RE4 + // Pin 63 : COM0/ANE3/IOCE3/RE3 + // Pin 64 : VLCD3/RE2 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '011:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN 'C8C:0-3,1-4,2-5,3-6,4-8,5-7,6-20,7-19'} // PORTG + {$MAP_RAM_TO_PIN 'C8D:0-26,1-25,2-57,3-56'} // PORTH + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19196.pas b/devices17/PIC16F19196.pas new file mode 100644 index 00000000..dc0d0741 --- /dev/null +++ b/devices17/PIC16F19196.pas @@ -0,0 +1,3531 @@ +unit PIC16F19196; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19196'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_P4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_P4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_P3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_P3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + PORTG : byte absolute $0C8C; + PORTG_RG7 : bit absolute PORTG.7; + PORTG_RG6 : bit absolute PORTG.6; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + PORTH : byte absolute $0C8D; + PORTH_RH3 : bit absolute PORTH.3; + PORTH_RH2 : bit absolute PORTH.2; + PORTH_RH1 : bit absolute PORTH.1; + PORTH_RH0 : bit absolute PORTH.0; + TRISG : byte absolute $0C8E; + TRISG_TRISG7 : bit absolute TRISG.7; + TRISG_TRISG6 : bit absolute TRISG.6; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + TRISH : byte absolute $0C8F; + TRISH_TRISH3 : bit absolute TRISH.3; + TRISH_TRISH2 : bit absolute TRISH.2; + TRISH_TRISH1 : bit absolute TRISH.1; + TRISH_TRISH0 : bit absolute TRISH.0; + LATG : byte absolute $0C90; + LATG_LATG7 : bit absolute LATG.7; + LATG_LATG6 : bit absolute LATG.6; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + LATH : byte absolute $0C91; + LATH_LATH3 : bit absolute LATH.3; + LATH_LATH2 : bit absolute LATH.2; + LATH_LATH1 : bit absolute LATH.1; + LATH_LATH0 : bit absolute LATH.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S05C0 : bit absolute LCDDATA0.5; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S12C0 : bit absolute LCDDATA1.4; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S21C0 : bit absolute LCDDATA2.5; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA2_S17C0 : bit absolute LCDDATA2.1; + LCDDATA2_S16C0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S39C0 : bit absolute LCDDATA4.7; + LCDDATA4_S38C0 : bit absolute LCDDATA4.6; + LCDDATA4_S37C0 : bit absolute LCDDATA4.5; + LCDDATA4_S36C0 : bit absolute LCDDATA4.4; + LCDDATA4_S35C0 : bit absolute LCDDATA4.3; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $1D1D; + LCDDATA5_S45C0 : bit absolute LCDDATA5.5; + LCDDATA5_S44C0 : bit absolute LCDDATA5.4; + LCDDATA5_S43C0 : bit absolute LCDDATA5.3; + LCDDATA5_S42C0 : bit absolute LCDDATA5.2; + LCDDATA5_S41C0 : bit absolute LCDDATA5.1; + LCDDATA5_S40C0 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S05C1 : bit absolute LCDDATA6.5; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S12C1 : bit absolute LCDDATA7.4; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S21C1 : bit absolute LCDDATA8.5; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA8_S17C1 : bit absolute LCDDATA8.1; + LCDDATA8_S16C1 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S39C1 : bit absolute LCDDATA10.7; + LCDDATA10_S38C1 : bit absolute LCDDATA10.6; + LCDDATA10_S37C1 : bit absolute LCDDATA10.5; + LCDDATA10_S36C1 : bit absolute LCDDATA10.4; + LCDDATA10_S35C1 : bit absolute LCDDATA10.3; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $1D23; + LCDDATA11_S45C1 : bit absolute LCDDATA11.5; + LCDDATA11_S44C1 : bit absolute LCDDATA11.4; + LCDDATA11_S43C1 : bit absolute LCDDATA11.3; + LCDDATA11_S42C1 : bit absolute LCDDATA11.2; + LCDDATA11_S41C1 : bit absolute LCDDATA11.1; + LCDDATA11_S40C1 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S05C2 : bit absolute LCDDATA12.5; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S12C2 : bit absolute LCDDATA13.4; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S21C2 : bit absolute LCDDATA14.5; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA14_S17C2 : bit absolute LCDDATA14.1; + LCDDATA14_S16C2 : bit absolute LCDDATA14.0; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S39C2 : bit absolute LCDDATA16.7; + LCDDATA16_S38C2 : bit absolute LCDDATA16.6; + LCDDATA16_S37C2 : bit absolute LCDDATA16.5; + LCDDATA16_S36C2 : bit absolute LCDDATA16.4; + LCDDATA16_S35C2 : bit absolute LCDDATA16.3; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $1D29; + LCDDATA17_S45C2 : bit absolute LCDDATA17.5; + LCDDATA17_S44C2 : bit absolute LCDDATA17.4; + LCDDATA17_S43C2 : bit absolute LCDDATA17.3; + LCDDATA17_S42C2 : bit absolute LCDDATA17.2; + LCDDATA17_S41C2 : bit absolute LCDDATA17.1; + LCDDATA17_S40C2 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S05C3 : bit absolute LCDDATA18.5; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S12C3 : bit absolute LCDDATA19.4; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S21C3 : bit absolute LCDDATA20.5; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA20_S17C3 : bit absolute LCDDATA20.1; + LCDDATA20_S16C3 : bit absolute LCDDATA20.0; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S39C3 : bit absolute LCDDATA22.7; + LCDDATA22_S38C3 : bit absolute LCDDATA22.6; + LCDDATA22_S37C3 : bit absolute LCDDATA22.5; + LCDDATA22_S36C3 : bit absolute LCDDATA22.4; + LCDDATA22_S35C3 : bit absolute LCDDATA22.3; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $1D2F; + LCDDATA23_S45C3 : bit absolute LCDDATA23.5; + LCDDATA23_S44C3 : bit absolute LCDDATA23.4; + LCDDATA23_S43C3 : bit absolute LCDDATA23.3; + LCDDATA23_S42C3 : bit absolute LCDDATA23.2; + LCDDATA23_S41C3 : bit absolute LCDDATA23.1; + LCDDATA23_S40C3 : bit absolute LCDDATA23.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S05C4 : bit absolute LCDDATA24.5; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S12C4 : bit absolute LCDDATA25.4; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S21C4 : bit absolute LCDDATA26.5; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA26_S17C4 : bit absolute LCDDATA26.1; + LCDDATA26_S16C4 : bit absolute LCDDATA26.0; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S39C4 : bit absolute LCDDATA28.7; + LCDDATA28_S38C4 : bit absolute LCDDATA28.6; + LCDDATA28_S37C4 : bit absolute LCDDATA28.5; + LCDDATA28_S36C4 : bit absolute LCDDATA28.4; + LCDDATA28_S35C4 : bit absolute LCDDATA28.3; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA29 : byte absolute $1D35; + LCDDATA29_S45C4 : bit absolute LCDDATA29.5; + LCDDATA29_S44C4 : bit absolute LCDDATA29.4; + LCDDATA29_S43C4 : bit absolute LCDDATA29.3; + LCDDATA29_S42C4 : bit absolute LCDDATA29.2; + LCDDATA29_S41C4 : bit absolute LCDDATA29.1; + LCDDATA29_S40C4 : bit absolute LCDDATA29.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S05C5 : bit absolute LCDDATA30.5; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S12C5 : bit absolute LCDDATA31.4; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S21C5 : bit absolute LCDDATA32.5; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA32_S17C5 : bit absolute LCDDATA32.1; + LCDDATA32_S16C5 : bit absolute LCDDATA32.0; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S39C5 : bit absolute LCDDATA34.7; + LCDDATA34_S38C5 : bit absolute LCDDATA34.6; + LCDDATA34_S37C5 : bit absolute LCDDATA34.5; + LCDDATA34_S36C5 : bit absolute LCDDATA34.4; + LCDDATA34_S35C5 : bit absolute LCDDATA34.3; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA35 : byte absolute $1D3B; + LCDDATA35_S45C5 : bit absolute LCDDATA35.5; + LCDDATA35_S44C5 : bit absolute LCDDATA35.4; + LCDDATA35_S43C5 : bit absolute LCDDATA35.3; + LCDDATA35_S42C5 : bit absolute LCDDATA35.2; + LCDDATA35_S41C5 : bit absolute LCDDATA35.1; + LCDDATA35_S40C5 : bit absolute LCDDATA35.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S05C6 : bit absolute LCDDATA36.5; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S12C6 : bit absolute LCDDATA37.4; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S21C6 : bit absolute LCDDATA38.5; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA38_S17C6 : bit absolute LCDDATA38.1; + LCDDATA38_S16C6 : bit absolute LCDDATA38.0; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S39C6 : bit absolute LCDDATA40.7; + LCDDATA40_S38C6 : bit absolute LCDDATA40.6; + LCDDATA40_S37C6 : bit absolute LCDDATA40.5; + LCDDATA40_S36C6 : bit absolute LCDDATA40.4; + LCDDATA40_S35C6 : bit absolute LCDDATA40.3; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA41 : byte absolute $1D41; + LCDDATA41_S45C6 : bit absolute LCDDATA41.5; + LCDDATA41_S44C6 : bit absolute LCDDATA41.4; + LCDDATA41_S43C6 : bit absolute LCDDATA41.3; + LCDDATA41_S42C6 : bit absolute LCDDATA41.2; + LCDDATA41_S41C6 : bit absolute LCDDATA41.1; + LCDDATA41_S40C6 : bit absolute LCDDATA41.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S05C7 : bit absolute LCDDATA42.5; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S12C7 : bit absolute LCDDATA43.4; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S21C7 : bit absolute LCDDATA44.5; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA44_S17C7 : bit absolute LCDDATA44.1; + LCDDATA44_S16C7 : bit absolute LCDDATA44.0; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S39C7 : bit absolute LCDDATA46.7; + LCDDATA46_S38C7 : bit absolute LCDDATA46.6; + LCDDATA46_S37C7 : bit absolute LCDDATA46.5; + LCDDATA46_S36C7 : bit absolute LCDDATA46.4; + LCDDATA46_S35C7 : bit absolute LCDDATA46.3; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + LCDDATA47 : byte absolute $1D47; + LCDDATA47_S45C7 : bit absolute LCDDATA47.5; + LCDDATA47_S44C7 : bit absolute LCDDATA47.4; + LCDDATA47_S43C7 : bit absolute LCDDATA47.3; + LCDDATA47_S42C7 : bit absolute LCDDATA47.2; + LCDDATA47_S41C7 : bit absolute LCDDATA47.1; + LCDDATA47_S40C7 : bit absolute LCDDATA47.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS5 : bit absolute RF0PPS.5; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS5 : bit absolute RF1PPS.5; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS5 : bit absolute RF2PPS.5; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS5 : bit absolute RF3PPS.5; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PPS5 : bit absolute RF4PPS.5; + RF4PPS_RF4PPS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PPS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PPS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PPS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PPS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS5 : bit absolute RF5PPS.5; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS5 : bit absolute RF6PPS.5; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS5 : bit absolute RF7PPS.5; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + RG0PPS : byte absolute $1E40; + RG0PPS_RG0PPS5 : bit absolute RG0PPS.5; + RG0PPS_RG0PPS4 : bit absolute RG0PPS.4; + RG0PPS_RG0PPS3 : bit absolute RG0PPS.3; + RG0PPS_RG0PPS2 : bit absolute RG0PPS.2; + RG0PPS_RG0PPS1 : bit absolute RG0PPS.1; + RG0PPS_RG0PPS0 : bit absolute RG0PPS.0; + RG1PPS : byte absolute $1E41; + RG1PPS_RG1PPS5 : bit absolute RG1PPS.5; + RG1PPS_RG1PPS4 : bit absolute RG1PPS.4; + RG1PPS_RG1PPS3 : bit absolute RG1PPS.3; + RG1PPS_RG1PPS2 : bit absolute RG1PPS.2; + RG1PPS_RG1PPS1 : bit absolute RG1PPS.1; + RG1PPS_RG1PPS0 : bit absolute RG1PPS.0; + RG2PPS : byte absolute $1E42; + RG2PPS_RG2PPS5 : bit absolute RG2PPS.5; + RG2PPS_RG2PPS4 : bit absolute RG2PPS.4; + RG2PPS_RG2PPS3 : bit absolute RG2PPS.3; + RG2PPS_RG2PPS2 : bit absolute RG2PPS.2; + RG2PPS_RG2PPS1 : bit absolute RG2PPS.1; + RG2PPS_RG2PPS0 : bit absolute RG2PPS.0; + RG3PPS : byte absolute $1E43; + RG3PPS_RG3PPS5 : bit absolute RG3PPS.5; + RG3PPS_RG3PPS4 : bit absolute RG3PPS.4; + RG3PPS_RG3PPS3 : bit absolute RG3PPS.3; + RG3PPS_RG3PPS2 : bit absolute RG3PPS.2; + RG3PPS_RG3PPS1 : bit absolute RG3PPS.1; + RG3PPS_RG3PPS0 : bit absolute RG3PPS.0; + RG4PPS : byte absolute $1E44; + RG4PPS_RG4PPS5 : bit absolute RG4PPS.5; + RG4PPS_RG4PPS4 : bit absolute RG4PPS.4; + RG4PPS_RG4PPS3 : bit absolute RG4PPS.3; + RG4PPS_RG4PPS2 : bit absolute RG4PPS.2; + RG4PPS_RG4PPS1 : bit absolute RG4PPS.1; + RG4PPS_RG4PPS0 : bit absolute RG4PPS.0; + RG6PPS : byte absolute $1E46; + RG6PPS_RG6PPS5 : bit absolute RG6PPS.5; + RG6PPS_RG6PPS4 : bit absolute RG6PPS.4; + RG6PPS_RG6PPS3 : bit absolute RG6PPS.3; + RG6PPS_RG6PPS2 : bit absolute RG6PPS.2; + RG6PPS_RG6PPS1 : bit absolute RG6PPS.1; + RG6PPS_RG6PPS0 : bit absolute RG6PPS.0; + RG7PPS : byte absolute $1E47; + RG7PPS_RG7PPS5 : bit absolute RG7PPS.5; + RG7PPS_RG7PPS4 : bit absolute RG7PPS.4; + RG7PPS_RG7PPS3 : bit absolute RG7PPS.3; + RG7PPS_RG7PPS2 : bit absolute RG7PPS.2; + RG7PPS_RG7PPS1 : bit absolute RG7PPS.1; + RG7PPS_RG7PPS0 : bit absolute RG7PPS.0; + RH0PPS : byte absolute $1E48; + RH0PPS_RH0PPS5 : bit absolute RH0PPS.5; + RH0PPS_RH0PPS4 : bit absolute RH0PPS.4; + RH0PPS_RH0PPS3 : bit absolute RH0PPS.3; + RH0PPS_RH0PPS2 : bit absolute RH0PPS.2; + RH0PPS_RH0PPS1 : bit absolute RH0PPS.1; + RH0PPS_RH0PPS0 : bit absolute RH0PPS.0; + RH1PPS : byte absolute $1E49; + RH1PPS_RH1PPS5 : bit absolute RH1PPS.5; + RH1PPS_RH1PPS4 : bit absolute RH1PPS.4; + RH1PPS_RH1PPS3 : bit absolute RH1PPS.3; + RH1PPS_RH1PPS2 : bit absolute RH1PPS.2; + RH1PPS_RH1PPS1 : bit absolute RH1PPS.1; + RH1PPS_RH1PPS0 : bit absolute RH1PPS.0; + RH2PPS : byte absolute $1E4A; + RH2PPS_RH2PPS5 : bit absolute RH2PPS.5; + RH2PPS_RH2PPS4 : bit absolute RH2PPS.4; + RH2PPS_RH2PPS3 : bit absolute RH2PPS.3; + RH2PPS_RH2PPS2 : bit absolute RH2PPS.2; + RH2PPS_RH2PPS1 : bit absolute RH2PPS.1; + RH2PPS_RH2PPS0 : bit absolute RH2PPS.0; + RH3PPS : byte absolute $1E4B; + RH3PPS_RH3PPS5 : bit absolute RH3PPS.5; + RH3PPS_RH3PPS4 : bit absolute RH3PPS.4; + RH3PPS_RH3PPS3 : bit absolute RH3PPS.3; + RH3PPS_RH3PPS2 : bit absolute RH3PPS.2; + RH3PPS_RH3PPS1 : bit absolute RH3PPS.1; + RH3PPS_RH3PPS0 : bit absolute RH3PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + HIDRVF : byte absolute $1E55; + HIDRVF_HIDF7 : bit absolute HIDRVF.7; + ANSELG : byte absolute $1E5B; + ANSELG_ANSG7 : bit absolute ANSELG.7; + ANSELG_ANSG6 : bit absolute ANSELG.6; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + ANSELG_ANSG0 : bit absolute ANSELG.0; + WPUG : byte absolute $1E5C; + WPUG_WPUG7 : bit absolute WPUG.7; + WPUG_WPUG6 : bit absolute WPUG.6; + WPUG_WPUG5 : bit absolute WPUG.5; + WPUG_WPUG4 : bit absolute WPUG.4; + WPUG_WPUG3 : bit absolute WPUG.3; + WPUG_WPUG2 : bit absolute WPUG.2; + WPUG_WPUG1 : bit absolute WPUG.1; + WPUG_WPUG0 : bit absolute WPUG.0; + ODCONG : byte absolute $1E5D; + ODCONG_ODCG7 : bit absolute ODCONG.7; + ODCONG_ODCG6 : bit absolute ODCONG.6; + ODCONG_ODCG4 : bit absolute ODCONG.4; + ODCONG_ODCG3 : bit absolute ODCONG.3; + ODCONG_ODCG2 : bit absolute ODCONG.2; + ODCONG_ODCG1 : bit absolute ODCONG.1; + ODCONG_ODCG0 : bit absolute ODCONG.0; + SLRCONG : byte absolute $1E5E; + SLRCONG_SLRG7 : bit absolute SLRCONG.7; + SLRCONG_SLRG6 : bit absolute SLRCONG.6; + SLRCONG_SLRG4 : bit absolute SLRCONG.4; + SLRCONG_SLRG3 : bit absolute SLRCONG.3; + SLRCONG_SLRG2 : bit absolute SLRCONG.2; + SLRCONG_SLRG1 : bit absolute SLRCONG.1; + SLRCONG_SLRG0 : bit absolute SLRCONG.0; + INLVLG : byte absolute $1E5F; + INLVLG_INLVLG7 : bit absolute INLVLG.7; + INLVLG_INLVLG6 : bit absolute INLVLG.6; + INLVLG_INLVLG5 : bit absolute INLVLG.5; + INLVLG_INLVLG4 : bit absolute INLVLG.4; + INLVLG_INLVLG3 : bit absolute INLVLG.3; + INLVLG_INLVLG2 : bit absolute INLVLG.2; + INLVLG_INLVLG1 : bit absolute INLVLG.1; + INLVLG_INLVLG0 : bit absolute INLVLG.0; + IOCGP : byte absolute $1E60; + IOCGP_IOCGP5 : bit absolute IOCGP.5; + IOCGN : byte absolute $1E61; + IOCGN_IOCGN5 : bit absolute IOCGN.5; + IOCGF : byte absolute $1E62; + IOCGF_IOCGF5 : bit absolute IOCGF.5; + WPUH : byte absolute $1E67; + WPUH_WPUH3 : bit absolute WPUH.3; + WPUH_WPUH2 : bit absolute WPUH.2; + WPUH_WPUH1 : bit absolute WPUH.1; + WPUH_WPUH0 : bit absolute WPUH.0; + ODCONH : byte absolute $1E68; + ODCONH_ODCH3 : bit absolute ODCONH.3; + ODCONH_ODCH2 : bit absolute ODCONH.2; + ODCONH_ODCH1 : bit absolute ODCONH.1; + ODCONH_ODCH0 : bit absolute ODCONH.0; + SLRCONH : byte absolute $1E69; + SLRCONH_SLRH3 : bit absolute SLRCONH.3; + SLRCONH_SLRH2 : bit absolute SLRCONH.2; + SLRCONH_SLRH1 : bit absolute SLRCONH.1; + SLRCONH_SLRH0 : bit absolute SLRCONH.0; + INLVLH : byte absolute $1E6A; + INLVLH_INLVLH3 : bit absolute INLVLH.3; + INLVLH_INLVLH2 : bit absolute INLVLH.2; + INLVLH_INLVLH1 : bit absolute INLVLH.1; + INLVLH_INLVLH0 : bit absolute INLVLH.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS5 : bit absolute SMT1WINPPS.5; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS5 : bit absolute SMT1SIGPPS.5; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS5 : bit absolute RX1PPS.5; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS5 : bit absolute TX1PPS.5; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS5 : bit absolute RX2PPS.5; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS5 : bit absolute TX2PPS.5; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE3PPS : byte absolute $1F33; + RE3PPS_RE3PPS5 : bit absolute RE3PPS.5; + RE3PPS_RE3PPS4 : bit absolute RE3PPS.4; + RE3PPS_RE3PPS3 : bit absolute RE3PPS.3; + RE3PPS_RE3PPS2 : bit absolute RE3PPS.2; + RE3PPS_RE3PPS1 : bit absolute RE3PPS.1; + RE3PPS_RE3PPS0 : bit absolute RE3PPS.0; + RE4PPS : byte absolute $1F34; + RE4PPS_RE4PPS5 : bit absolute RE4PPS.5; + RE4PPS_RE4PPS4 : bit absolute RE4PPS.4; + RE4PPS_RE4PPS3 : bit absolute RE4PPS.3; + RE4PPS_RE4PPS2 : bit absolute RE4PPS.2; + RE4PPS_RE4PPS1 : bit absolute RE4PPS.1; + RE4PPS_RE4PPS0 : bit absolute RE4PPS.0; + RE5PPS : byte absolute $1F35; + RE5PPS_RE5PPS5 : bit absolute RE5PPS.5; + RE5PPS_RE5PPS4 : bit absolute RE5PPS.4; + RE5PPS_RE5PPS3 : bit absolute RE5PPS.3; + RE5PPS_RE5PPS2 : bit absolute RE5PPS.2; + RE5PPS_RE5PPS1 : bit absolute RE5PPS.1; + RE5PPS_RE5PPS0 : bit absolute RE5PPS.0; + RE6PPS : byte absolute $1F36; + RE6PPS_RE6PPS5 : bit absolute RE6PPS.5; + RE6PPS_RE6PPS4 : bit absolute RE6PPS.4; + RE6PPS_RE6PPS3 : bit absolute RE6PPS.3; + RE6PPS_RE6PPS2 : bit absolute RE6PPS.2; + RE6PPS_RE6PPS1 : bit absolute RE6PPS.1; + RE6PPS_RE6PPS0 : bit absolute RE6PPS.0; + RE7PPS : byte absolute $1F37; + RE7PPS_RE7PPS5 : bit absolute RE7PPS.5; + RE7PPS_RE7PPS4 : bit absolute RE7PPS.4; + RE7PPS_RE7PPS3 : bit absolute RE7PPS.3; + RE7PPS_RE7PPS2 : bit absolute RE7PPS.2; + RE7PPS_RE7PPS1 : bit absolute RE7PPS.1; + RE7PPS_RE7PPS0 : bit absolute RE7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE7 : bit absolute ANSELE.7; + ANSELE_ANSE6 : bit absolute ANSELE.6; + ANSELE_ANSE5 : bit absolute ANSELE.5; + ANSELE_ANSE4 : bit absolute ANSELE.4; + ANSELE_ANSE3 : bit absolute ANSELE.3; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE7 : bit absolute WPUE.7; + WPUE_WPUE6 : bit absolute WPUE.6; + WPUE_WPUE5 : bit absolute WPUE.5; + WPUE_WPUE4 : bit absolute WPUE.4; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE7 : bit absolute ODCONE.7; + ODCONE_ODCE6 : bit absolute ODCONE.6; + ODCONE_ODCE5 : bit absolute ODCONE.5; + ODCONE_ODCE4 : bit absolute ODCONE.4; + ODCONE_ODCE3 : bit absolute ODCONE.3; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE7 : bit absolute SLRCONE.7; + SLRCONE_SLRE6 : bit absolute SLRCONE.6; + SLRCONE_SLRE5 : bit absolute SLRCONE.5; + SLRCONE_SLRE4 : bit absolute SLRCONE.4; + SLRCONE_SLRE3 : bit absolute SLRCONE.3; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE7 : bit absolute INLVLE.7; + INLVLE_INLVLE6 : bit absolute INLVLE.6; + INLVLE_INLVLE5 : bit absolute INLVLE.5; + INLVLE_INLVLE4 : bit absolute INLVLE.4; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP7 : bit absolute IOCEP.7; + IOCEP_IOCEP6 : bit absolute IOCEP.6; + IOCEP_IOCEP5 : bit absolute IOCEP.5; + IOCEP_IOCEP4 : bit absolute IOCEP.4; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEP_IOCEP1 : bit absolute IOCEP.1; + IOCEP_IOCEP0 : bit absolute IOCEP.0; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN7 : bit absolute IOCEN.7; + IOCEN_IOCEN6 : bit absolute IOCEN.6; + IOCEN_IOCEN5 : bit absolute IOCEN.5; + IOCEN_IOCEN4 : bit absolute IOCEN.4; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEN_IOCEN1 : bit absolute IOCEN.1; + IOCEN_IOCEN0 : bit absolute IOCEN.0; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF7 : bit absolute IOCEF.7; + IOCEF_IOCEF6 : bit absolute IOCEF.6; + IOCEF_IOCEF5 : bit absolute IOCEF.5; + IOCEF_IOCEF4 : bit absolute IOCEF.4; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + IOCEF_IOCEF1 : bit absolute IOCEF.1; + IOCEF_IOCEF0 : bit absolute IOCEF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'C8C-C91:SFR'} // Bank 25 : PORTG, PORTH, TRISG, TRISH, LATG, LATH + {$SET_STATE_RAM 'CA0-CBF:GPR'} + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM '1D0C-1D47:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28, LCDDATA29, LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34, LCDDATA35, LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40, LCDDATA41, LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46, LCDDATA47 + {$SET_STATE_RAM '1E0F-1E44:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS, RG0PPS, RG1PPS, RG2PPS, RG3PPS, RG4PPS + {$SET_STATE_RAM '1E46-1E4B:SFR'} // Bank 60 : RG6PPS, RG7PPS, RH0PPS, RH1PPS, RH2PPS, RH3PPS + {$SET_STATE_RAM '1E50-1E55:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF, HIDRVF + {$SET_STATE_RAM '1E5B-1E62:SFR'} // Bank 60 : ANSELG, WPUG, ODCONG, SLRCONG, INLVLG, IOCGP, IOCGN, IOCGF + {$SET_STATE_RAM '1E67-1E6A:SFR'} // Bank 60 : WPUH, ODCONH, SLRCONH, INLVLH + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F31:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS + {$SET_STATE_RAM '1F33-1F3C:SFR'} // Bank 62 : RE3PPS, RE4PPS, RE5PPS, RE6PPS, RE7PPS, ANSELA, WPUA, ODCONA, SLRCONA, INLVLA + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FB'} // PORTE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:FB'} // TRISE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:FB'} // LATE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BC'} // DAC1CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8D:0F'} // PORTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8E:DF'} // TRISG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8F:0F'} // TRISH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C90:DF'} // LATG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C91:0F'} // LATH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1D:3F'} // LCDDATA5 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D23:3F'} // LCDDATA11 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D29:3F'} // LCDDATA17 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2F:3F'} // LCDDATA23 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D35:3F'} // LCDDATA29 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3B:3F'} // LCDDATA35 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D41:3F'} // LCDDATA41 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D47:3F'} // LCDDATA47 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:3F'} // RF0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:3F'} // RF1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:3F'} // RF2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:3F'} // RF3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:3F'} // RF4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:3F'} // RF5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:3F'} // RF6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:3F'} // RF7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E40:3F'} // RG0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E41:3F'} // RG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E42:3F'} // RG2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E43:3F'} // RG3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E44:3F'} // RG4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E46:3F'} // RG6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E47:3F'} // RG7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E48:3F'} // RH0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E49:3F'} // RH1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4A:3F'} // RH2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4B:3F'} // RH3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E55:80'} // HIDRVF bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5B:DF'} // ANSELG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5D:DF'} // ODCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5E:DF'} // SLRCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E60:20'} // IOCGP bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E61:20'} // IOCGN bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E62:20'} // IOCGF bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E67:0F'} // WPUH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E68:0F'} // ODCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E69:0F'} // SLRCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E6A:0F'} // INLVLH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:3F'} // SMT1WINPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:3F'} // SMT1SIGPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F33:3F'} // RE3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F34:3F'} // RE4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F35:3F'} // RE5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F36:3F'} // RE6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F37:3F'} // RE7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:FB'} // ANSELE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:FB'} // WPUE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:FB'} // ODCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:FB'} // SLRCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:FB'} // INLVLE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:FB'} // IOCEP bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:FB'} // IOCEN bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:FB'} // IOCEF bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VLCD2/ANE1/RE1 + // Pin 2 : VLCD1/ANE0/RE0 + // Pin 3 : SEG42/ANG0/RG0 + // Pin 4 : SEG43/ANG1/RG1 + // Pin 5 : SEG44/ANG2/RG2 + // Pin 6 : SEG45/ANG3/RG3 + // Pin 7 : VPP/ICDMCLR_n/MCLR_n/IOCG5/RG5 + // Pin 8 : SEG26/ANG4/RG4 + // Pin 9 : AVSS/VSS + // Pin 10 : AVDD/VDD + // Pin 11 : SEG25/ANF7/C1IN3-/C2IN3-/HIF7/RF7 + // Pin 12 : SEG24/ANF6/C1IN0+/RF6 + // Pin 13 : DAC1OUT1/SEG23/ANF5/C1IN1-/C2IN1-/RF5 + // Pin 14 : SEG22/ANF4/C2IN0+/RF4 + // Pin 15 : SEG21/ANF3/C1IN2-/C2IN2-/RF3 + // Pin 16 : SEG20/ANF1/C1OUT/RF2 + // Pin 17 : SEG19/ANF1/C2OUT/RF1 + // Pin 18 : SEG41/ANF0/C1IN0-/C2IN0-/RF0 + // Pin 19 : COM7/SEG15/ANG7/RG7 + // Pin 20 : COM6/ANG6/RG6 + // Pin 21 : VREF+/SEG35/ANA3/RA3 + // Pin 22 : SEG34/ANA2/C1IN1+/C2IN1+/RA2 + // Pin 23 : SEG18/ANA1/RA1 + // Pin 24 : SEG33/ANA0/C1IN4-/C2IN4-/RA0 + // Pin 25 : COM5/RH1 + // Pin 26 : COM4/RH0 + // Pin 27 : VBAT/RA5 + // Pin 28 : SEG14/ANA4/C1IN1+/C2IN1+/RA4 + // Pin 29 : SOSCI/SEG32/IOCC1/RC1 + // Pin 30 : SOSCO/SEG40/IOCC0/RC0 + // Pin 31 : SEG27/IOCC6/RC6 + // Pin 32 : SEG28/IOCC7/RC7 + // Pin 33 : SEG13/IOCC2/RC2 + // Pin 34 : SEG17/IOCC3/RC3 + // Pin 35 : SEG16/IOCC4/RC4 + // Pin 36 : SEG12/IOCC5/RC5 + // Pin 37 : ICSPDAT/ICDDAT/DAC1OUT2/SEG39/ANB7/IOCB7/RB7 + // Pin 38 : VDD + // Pin 39 : CLKIN/SEG37/ANA7/RA7 + // Pin 40 : CLKOUT/SEG36/ANA6/RA6 + // Pin 41 : VSS + // Pin 42 : ICSPCLK/ICDCLK/SEG38/ANB6/IOCB6/RB6 + // Pin 43 : SEG29/ANB5/IOCB5/RB5 + // Pin 44 : SEG11/ANB4/IOCB4/RB4 + // Pin 45 : SEG10/ANB3/IOCB3/RB3 + // Pin 46 : SEG9/ANB2/IOCB2/RB2 + // Pin 47 : SEG8/ANB1/IOCB1/RB1 + // Pin 48 : ZCD/SEG30/ANB0/IOCB0/RB0 + // Pin 49 : SEG7/AND7/RD7 + // Pin 50 : SEG6/AND6/RD6 + // Pin 51 : SEG5/AND5/RD5 + // Pin 52 : SEG4/AND4/RD4 + // Pin 53 : SEG3/AND3/RD3 + // Pin 54 : SEG2/AND2/RD2 + // Pin 55 : SEG1/AND1/RD1 + // Pin 56 : SEG47/CFLY2/RH3 + // Pin 57 : SEG46/CFLY1/RH2 + // Pin 58 : SEG0/AND0/RD0 + // Pin 59 : SEG31/ANE7/IOCE7/RE7 + // Pin 60 : COM3/ANE6/IOCE6/RE6 + // Pin 61 : COM2/ANE5/IOCE5/RE5 + // Pin 62 : COM1/ANE4/IOCE4/RE4 + // Pin 63 : COM0/ANE3/IOCE3/RE3 + // Pin 64 : VLCD3/RE2 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '011:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN 'C8C:0-3,1-4,2-5,3-6,4-8,5-7,6-20,7-19'} // PORTG + {$MAP_RAM_TO_PIN 'C8D:0-26,1-25,2-57,3-56'} // PORTH + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F19197.pas b/devices17/PIC16F19197.pas new file mode 100644 index 00000000..d7fa8fb9 --- /dev/null +++ b/devices17/PIC16F19197.pas @@ -0,0 +1,3556 @@ +unit PIC16F19197; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F19197'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 64} +{$SET PIC_NUMPAGES = 1} +{$SET PIC_MAXFLASH = 32768} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR5 : bit absolute BSR.5; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_INTEDG : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PORTF : byte absolute $0011; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + TRISA : byte absolute $0012; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $0013; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $0014; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $0015; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0016; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + TRISF : byte absolute $0017; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + LATA : byte absolute $0018; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $0019; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $001A; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $001B; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $001C; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + LATF : byte absolute $001D; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + ADCPCON0 : byte absolute $001F; + ADCPCON0_ADCPON : bit absolute ADCPCON0.7; + ADCPCON0_ADCPRDY : bit absolute ADCPCON0.0; + ADLTHL : byte absolute $008C; + ADLTHH : byte absolute $008D; + ADUTHL : byte absolute $008E; + ADUTHH : byte absolute $008F; + ADERRL : byte absolute $0090; + ADERRH : byte absolute $0091; + ADSTPTL : byte absolute $0092; + ADSTPTH : byte absolute $0093; + ADFLTRL : byte absolute $0094; + ADFLTRH : byte absolute $0095; + ADACCL : byte absolute $0096; + ADACCH : byte absolute $0097; + ADACCU : byte absolute $0098; + ADCNT : byte absolute $0099; + ADRPT : byte absolute $009A; + ADPREVL : byte absolute $009B; + ADPREVH : byte absolute $009C; + ADRESL : byte absolute $009D; + ADRESH : byte absolute $009E; + ADPCH : byte absolute $009F; + ADPCH_ADPCH5 : bit absolute ADPCH.5; + ADPCH_ADPCH4 : bit absolute ADPCH.4; + ADPCH_ADPCH3 : bit absolute ADPCH.3; + ADPCH_ADPCH2 : bit absolute ADPCH.2; + ADPCH_ADPCH1 : bit absolute ADPCH.1; + ADPCH_ADPCH0 : bit absolute ADPCH.0; + ADACQL : byte absolute $010C; + ADACQH : byte absolute $010D; + ADACQH_ACQ4 : bit absolute ADACQH.4; + ADACQH_ACQ3 : bit absolute ADACQH.3; + ADACQH_ACQ2 : bit absolute ADACQH.2; + ADACQH_ACQ1 : bit absolute ADACQH.1; + ADACQH_ACQ0 : bit absolute ADACQH.0; + ADCAP : byte absolute $010E; + ADCAP_ADCAP4 : bit absolute ADCAP.4; + ADCAP_ADCAP3 : bit absolute ADCAP.3; + ADCAP_ADCAP2 : bit absolute ADCAP.2; + ADCAP_ADCAP1 : bit absolute ADCAP.1; + ADCAP_ADCAP0 : bit absolute ADCAP.0; + ADPREL : byte absolute $010F; + ADPREH : byte absolute $0110; + ADPREH_PRE4 : bit absolute ADPREH.4; + ADPREH_PRE3 : bit absolute ADPREH.3; + ADPREH_PRE2 : bit absolute ADPREH.2; + ADPREH_PRE1 : bit absolute ADPREH.1; + ADPREH_PRE0 : bit absolute ADPREH.0; + ADCON0 : byte absolute $0111; + ADCON0_ON : bit absolute ADCON0.7; + ADCON0_CONT : bit absolute ADCON0.6; + ADCON0_CS : bit absolute ADCON0.4; + ADCON0_FM : bit absolute ADCON0.2; + ADCON0_GO : bit absolute ADCON0.0; + ADCON1 : byte absolute $0112; + ADCON1_PPOL : bit absolute ADCON1.7; + ADCON1_IPEN : bit absolute ADCON1.6; + ADCON1_GPOL : bit absolute ADCON1.5; + ADCON1_DSEN : bit absolute ADCON1.0; + ADCON2 : byte absolute $0113; + ADCON2_PSIS : bit absolute ADCON2.7; + ADCON2_CRS2 : bit absolute ADCON2.6; + ADCON2_CRS1 : bit absolute ADCON2.5; + ADCON2_CRS0 : bit absolute ADCON2.4; + ADCON2_ACLR : bit absolute ADCON2.3; + ADCON2_MODE2 : bit absolute ADCON2.2; + ADCON2_MODE1 : bit absolute ADCON2.1; + ADCON2_MODE0 : bit absolute ADCON2.0; + ADCON3 : byte absolute $0114; + ADCON3_CALC2 : bit absolute ADCON3.6; + ADCON3_CALC1 : bit absolute ADCON3.5; + ADCON3_CALC0 : bit absolute ADCON3.4; + ADCON3_SOI : bit absolute ADCON3.3; + ADCON3_TMD2 : bit absolute ADCON3.2; + ADCON3_TMD1 : bit absolute ADCON3.1; + ADCON3_TMD0 : bit absolute ADCON3.0; + ADSTAT : byte absolute $0115; + ADSTAT_OV : bit absolute ADSTAT.7; + ADSTAT_UTHR : bit absolute ADSTAT.6; + ADSTAT_LTHR : bit absolute ADSTAT.5; + ADSTAT_MATH : bit absolute ADSTAT.4; + ADSTAT_STAT2 : bit absolute ADSTAT.2; + ADSTAT_STAT1 : bit absolute ADSTAT.1; + ADSTAT_STAT0 : bit absolute ADSTAT.0; + ADREF : byte absolute $0116; + ADREF_PREF1 : bit absolute ADREF.1; + ADREF_PREF0 : bit absolute ADREF.0; + ADACT : byte absolute $0117; + ADACT_ACT4 : bit absolute ADACT.4; + ADACT_ACT3 : bit absolute ADACT.3; + ADACT_ACT2 : bit absolute ADACT.2; + ADACT_ACT1 : bit absolute ADACT.1; + ADACT_ACT0 : bit absolute ADACT.0; + ADCLK : byte absolute $0118; + ADCLK_CS5 : bit absolute ADCLK.5; + ADCLK_CS4 : bit absolute ADCLK.4; + ADCLK_CS3 : bit absolute ADCLK.3; + ADCLK_CS2 : bit absolute ADCLK.2; + ADCLK_CS1 : bit absolute ADCLK.1; + ADCLK_CS0 : bit absolute ADCLK.0; + RC1REG : byte absolute $0119; + TX1REG : byte absolute $011A; + SP1BRGL : byte absolute $011B; + SP1BRGH : byte absolute $011C; + RC1STA : byte absolute $011D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $011E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $011F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + SSP1BUF : byte absolute $018C; + SSP1ADD : byte absolute $018D; + SSP1MSK : byte absolute $018E; + SSP1STAT : byte absolute $018F; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0190; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0191; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0192; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + TMR1L : byte absolute $020C; + TMR1L_TMR1L7 : bit absolute TMR1L.7; + TMR1L_TMR1L6 : bit absolute TMR1L.6; + TMR1L_TMR1L5 : bit absolute TMR1L.5; + TMR1L_TMR1L4 : bit absolute TMR1L.4; + TMR1L_TMR1L3 : bit absolute TMR1L.3; + TMR1L_TMR1L2 : bit absolute TMR1L.2; + TMR1L_TMR1L1 : bit absolute TMR1L.1; + TMR1L_TMR1L0 : bit absolute TMR1L.0; + TMR1H : byte absolute $020D; + TMR1H_TMR1H7 : bit absolute TMR1H.7; + TMR1H_TMR1H6 : bit absolute TMR1H.6; + TMR1H_TMR1H5 : bit absolute TMR1H.5; + TMR1H_TMR1H4 : bit absolute TMR1H.4; + TMR1H_TMR1H3 : bit absolute TMR1H.3; + TMR1H_TMR1H2 : bit absolute TMR1H.2; + TMR1H_TMR1H1 : bit absolute TMR1H.1; + TMR1H_TMR1H0 : bit absolute TMR1H.0; + T1CON : byte absolute $020E; + T1CON_CKPS1 : bit absolute T1CON.5; + T1CON_CKPS0 : bit absolute T1CON.4; + T1CON_nSYNC : bit absolute T1CON.2; + T1CON_RD16 : bit absolute T1CON.1; + T1GCON : byte absolute $020F; + T1GCON_GE : bit absolute T1GCON.7; + T1GCON_GTM : bit absolute T1GCON.5; + T1GCON_GSPM : bit absolute T1GCON.4; + T1GCON_GGO_nDONE : bit absolute T1GCON.3; + T1GCON_GVAL : bit absolute T1GCON.2; + T1GATE : byte absolute $0210; + T1GATE_GSS4 : bit absolute T1GATE.4; + T1GATE_GSS3 : bit absolute T1GATE.3; + T1GATE_GSS2 : bit absolute T1GATE.2; + T1GATE_GSS1 : bit absolute T1GATE.1; + T1GATE_GSS0 : bit absolute T1GATE.0; + T1CLK : byte absolute $0211; + CCPTMRS0 : byte absolute $021E; + CCPTMRS0_P4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_P4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_P3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_P3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + T2TMR : byte absolute $028C; + T2PR : byte absolute $028D; + T2CON : byte absolute $028E; + T2CON_CKPS2 : bit absolute T2CON.6; + T2CON_OUTPS3 : bit absolute T2CON.3; + T2CON_OUTPS2 : bit absolute T2CON.2; + T2CON_OUTPS1 : bit absolute T2CON.1; + T2CON_OUTPS0 : bit absolute T2CON.0; + T2HLT : byte absolute $028F; + T2HLT_PSYNC : bit absolute T2HLT.7; + T2HLT_CKPOL : bit absolute T2HLT.6; + T2HLT_CKSYNC : bit absolute T2HLT.5; + T2HLT_MODE4 : bit absolute T2HLT.4; + T2HLT_MODE3 : bit absolute T2HLT.3; + T2CLKCON : byte absolute $0290; + T2RST : byte absolute $0291; + T2RST_RSEL4 : bit absolute T2RST.4; + T2RST_RSEL3 : bit absolute T2RST.3; + T2RST_RSEL2 : bit absolute T2RST.2; + T2RST_RSEL1 : bit absolute T2RST.1; + T2RST_RSEL0 : bit absolute T2RST.0; + T4TMR : byte absolute $0292; + T4PR : byte absolute $0293; + T4CON : byte absolute $0294; + T4HLT : byte absolute $0295; + T4CLKCON : byte absolute $0296; + T4RST : byte absolute $0297; + CCPR1L : byte absolute $030C; + CCPR1H : byte absolute $030D; + CCP1CON : byte absolute $030E; + CCP1CON_EN : bit absolute CCP1CON.7; + CCP1CON_OE : bit absolute CCP1CON.6; + CCP1CON_OUT : bit absolute CCP1CON.5; + CCP1CON_FMT : bit absolute CCP1CON.4; + CCP1CAP : byte absolute $030F; + CCPR2L : byte absolute $0310; + CCPR2H : byte absolute $0311; + CCP2CON : byte absolute $0312; + CCP2CAP : byte absolute $0313; + PWM3DCL : byte absolute $0314; + PWM3DCL_DC1 : bit absolute PWM3DCL.7; + PWM3DCL_DC0 : bit absolute PWM3DCL.6; + PWM3DCH : byte absolute $0315; + PWM3CON : byte absolute $0316; + PWM3CON_POL : bit absolute PWM3CON.4; + PWM4DCL : byte absolute $0318; + PWM4DCH : byte absolute $0319; + PWM4CON : byte absolute $031A; + SMT1TMRL : byte absolute $048C; + SMT1TMRH : byte absolute $048D; + SMT1TMRU : byte absolute $048E; + SMT1CPRL : byte absolute $048F; + SMT1CPRH : byte absolute $0490; + SMT1CPRU : byte absolute $0491; + SMT1CPWL : byte absolute $0492; + SMT1CPWH : byte absolute $0493; + SMT1CPWU : byte absolute $0494; + SMT1PRL : byte absolute $0495; + SMT1PRH : byte absolute $0496; + SMT1PRU : byte absolute $0497; + SMT1CON0 : byte absolute $0498; + SMT1CON0_STP : bit absolute SMT1CON0.5; + SMT1CON0_WPOL : bit absolute SMT1CON0.4; + SMT1CON0_SPOL : bit absolute SMT1CON0.3; + SMT1CON0_CPOL : bit absolute SMT1CON0.2; + SMT1CON0_SMT1PS1 : bit absolute SMT1CON0.1; + SMT1CON0_SMT1PS0 : bit absolute SMT1CON0.0; + SMT1CON1 : byte absolute $0499; + SMT1CON1_SMT1GO : bit absolute SMT1CON1.7; + SMT1CON1_REPEAT : bit absolute SMT1CON1.6; + SMT1STAT : byte absolute $049A; + SMT1STAT_CPRUP : bit absolute SMT1STAT.7; + SMT1STAT_CPWUP : bit absolute SMT1STAT.6; + SMT1STAT_RST : bit absolute SMT1STAT.5; + SMT1STAT_TS : bit absolute SMT1STAT.2; + SMT1STAT_WS : bit absolute SMT1STAT.1; + SMT1STAT_AS : bit absolute SMT1STAT.0; + SMT1CLK : byte absolute $049B; + SMT1CLK_CSEL2 : bit absolute SMT1CLK.2; + SMT1CLK_CSEL1 : bit absolute SMT1CLK.1; + SMT1CLK_CSEL0 : bit absolute SMT1CLK.0; + SMT1SIG : byte absolute $049C; + SMT1SIG_SSEL4 : bit absolute SMT1SIG.4; + SMT1SIG_SSEL3 : bit absolute SMT1SIG.3; + SMT1SIG_SSEL2 : bit absolute SMT1SIG.2; + SMT1SIG_SSEL1 : bit absolute SMT1SIG.1; + SMT1SIG_SSEL0 : bit absolute SMT1SIG.0; + SMT1WIN : byte absolute $049D; + SMT1WIN_WSEL4 : bit absolute SMT1WIN.4; + SMT1WIN_WSEL3 : bit absolute SMT1WIN.3; + SMT1WIN_WSEL2 : bit absolute SMT1WIN.2; + SMT1WIN_WSEL1 : bit absolute SMT1WIN.1; + SMT1WIN_WSEL0 : bit absolute SMT1WIN.0; + TMR0L : byte absolute $059C; + TMR0H : byte absolute $059D; + T0CON0 : byte absolute $059E; + T0CON0_T0EN : bit absolute T0CON0.7; + T0CON0_T0OE : bit absolute T0CON0.6; + T0CON0_T0OUT : bit absolute T0CON0.5; + T0CON0_T016BIT : bit absolute T0CON0.4; + T0CON0_T0OUTPS3 : bit absolute T0CON0.3; + T0CON0_T0OUTPS2 : bit absolute T0CON0.2; + T0CON0_T0OUTPS1 : bit absolute T0CON0.1; + T0CON0_T0OUTPS0 : bit absolute T0CON0.0; + T0CON1 : byte absolute $059F; + T0CON1_T0CS2 : bit absolute T0CON1.7; + T0CON1_T0CS1 : bit absolute T0CON1.6; + T0CON1_T0CS0 : bit absolute T0CON1.5; + T0CON1_T0ASYNC : bit absolute T0CON1.4; + T0CON1_T0CKPS3 : bit absolute T0CON1.3; + T0CON1_T0CKPS2 : bit absolute T0CON1.2; + T0CON1_T0CKPS1 : bit absolute T0CON1.1; + T0CON1_T0CKPS0 : bit absolute T0CON1.0; + CWG1CLKCON : byte absolute $060C; + CWG1ISM : byte absolute $060D; + CWG1ISM_IS3 : bit absolute CWG1ISM.3; + CWG1ISM_IS2 : bit absolute CWG1ISM.2; + CWG1ISM_IS1 : bit absolute CWG1ISM.1; + CWG1ISM_IS0 : bit absolute CWG1ISM.0; + CWG1DBR : byte absolute $060E; + CWG1DBR_DBR5 : bit absolute CWG1DBR.5; + CWG1DBR_DBR4 : bit absolute CWG1DBR.4; + CWG1DBR_DBR3 : bit absolute CWG1DBR.3; + CWG1DBR_DBR2 : bit absolute CWG1DBR.2; + CWG1DBR_DBR1 : bit absolute CWG1DBR.1; + CWG1DBR_DBR0 : bit absolute CWG1DBR.0; + CWG1DBF : byte absolute $060F; + CWG1DBF_DBF5 : bit absolute CWG1DBF.5; + CWG1DBF_DBF4 : bit absolute CWG1DBF.4; + CWG1DBF_DBF3 : bit absolute CWG1DBF.3; + CWG1DBF_DBF2 : bit absolute CWG1DBF.2; + CWG1DBF_DBF1 : bit absolute CWG1DBF.1; + CWG1DBF_DBF0 : bit absolute CWG1DBF.0; + CWG1CON0 : byte absolute $0610; + CWG1CON0_LD : bit absolute CWG1CON0.6; + CWG1CON1 : byte absolute $0611; + CWG1CON1_IN : bit absolute CWG1CON1.5; + CWG1CON1_POLD : bit absolute CWG1CON1.3; + CWG1CON1_POLC : bit absolute CWG1CON1.2; + CWG1CON1_POLB : bit absolute CWG1CON1.1; + CWG1CON1_POLA : bit absolute CWG1CON1.0; + CWG1AS0 : byte absolute $0612; + CWG1AS0_SHUTDOWN : bit absolute CWG1AS0.7; + CWG1AS0_REN : bit absolute CWG1AS0.6; + CWG1AS0_LSBD1 : bit absolute CWG1AS0.5; + CWG1AS0_LSBD0 : bit absolute CWG1AS0.4; + CWG1AS0_LSAC1 : bit absolute CWG1AS0.3; + CWG1AS0_LSAC0 : bit absolute CWG1AS0.2; + CWG1AS1 : byte absolute $0613; + CWG1AS1_AS6E : bit absolute CWG1AS1.6; + CWG1AS1_AS5E : bit absolute CWG1AS1.5; + CWG1AS1_AS4E : bit absolute CWG1AS1.4; + CWG1AS1_AS3E : bit absolute CWG1AS1.3; + CWG1AS1_AS2E : bit absolute CWG1AS1.2; + CWG1AS1_AS1E : bit absolute CWG1AS1.1; + CWG1AS1_AS0E : bit absolute CWG1AS1.0; + CWG1STR : byte absolute $0614; + CWG1STR_OVRD : bit absolute CWG1STR.7; + CWG1STR_OVRC : bit absolute CWG1STR.6; + CWG1STR_OVRB : bit absolute CWG1STR.5; + CWG1STR_OVRA : bit absolute CWG1STR.4; + CWG1STR_STRD : bit absolute CWG1STR.3; + CWG1STR_STRC : bit absolute CWG1STR.2; + CWG1STR_STRB : bit absolute CWG1STR.1; + CWG1STR_STRA : bit absolute CWG1STR.0; + PIR0 : byte absolute $070C; + PIR0_TMR0IF : bit absolute PIR0.5; + PIR0_IOCIF : bit absolute PIR0.4; + PIR0_INTF : bit absolute PIR0.0; + PIR1 : byte absolute $070D; + PIR1_OSFIF : bit absolute PIR1.7; + PIR1_CSWIF : bit absolute PIR1.6; + PIR1_ADTIF : bit absolute PIR1.1; + PIR1_ADIF : bit absolute PIR1.0; + PIR2 : byte absolute $070E; + PIR2_ZCDIF : bit absolute PIR2.6; + PIR2_C2IF : bit absolute PIR2.1; + PIR2_C1IF : bit absolute PIR2.0; + PIR3 : byte absolute $070F; + PIR3_RC2IF : bit absolute PIR3.7; + PIR3_TX2IF : bit absolute PIR3.6; + PIR3_RC1IF : bit absolute PIR3.5; + PIR3_TX1IF : bit absolute PIR3.4; + PIR3_BCL1IF : bit absolute PIR3.1; + PIR3_SSP1IF : bit absolute PIR3.0; + PIR4 : byte absolute $0710; + PIR4_TMR4IF : bit absolute PIR4.3; + PIR4_TMR2IF : bit absolute PIR4.1; + PIR4_TMR1IF : bit absolute PIR4.0; + PIR5 : byte absolute $0711; + PIR5_CLC4IF : bit absolute PIR5.7; + PIR5_CLC3IF : bit absolute PIR5.6; + PIR5_CLC2IF : bit absolute PIR5.5; + PIR5_CLC1IF : bit absolute PIR5.4; + PIR5_TMR1GIF : bit absolute PIR5.0; + PIR6 : byte absolute $0712; + PIR6_CRIF : bit absolute PIR6.7; + PIR6_CCP2IF : bit absolute PIR6.1; + PIR6_CCP1IF : bit absolute PIR6.0; + PIR7 : byte absolute $0713; + PIR7_NVMIF : bit absolute PIR7.5; + PIR7_CWG1IF : bit absolute PIR7.0; + PIR8 : byte absolute $0714; + PIR8_LCDIF : bit absolute PIR8.7; + PIR8_RTCCIF : bit absolute PIR8.6; + PIR8_SMT1PWAIF : bit absolute PIR8.2; + PIR8_SMT1PRAIF : bit absolute PIR8.1; + PIR8_SMT1IF : bit absolute PIR8.0; + PIE0 : byte absolute $0716; + PIE0_TMR0IE : bit absolute PIE0.5; + PIE0_IOCIE : bit absolute PIE0.4; + PIE0_INTE : bit absolute PIE0.0; + PIE1 : byte absolute $0717; + PIE1_OSFIE : bit absolute PIE1.7; + PIE1_CSWIE : bit absolute PIE1.6; + PIE1_ADTIE : bit absolute PIE1.1; + PIE1_ADIE : bit absolute PIE1.0; + PIE2 : byte absolute $0718; + PIE2_ZCDIE : bit absolute PIE2.6; + PIE2_C2IE : bit absolute PIE2.1; + PIE2_C1IE : bit absolute PIE2.0; + PIE3 : byte absolute $0719; + PIE3_RC2IE : bit absolute PIE3.7; + PIE3_TX2IE : bit absolute PIE3.6; + PIE3_RC1IE : bit absolute PIE3.5; + PIE3_TX1IE : bit absolute PIE3.4; + PIE3_BCL1IE : bit absolute PIE3.1; + PIE3_SSP1IE : bit absolute PIE3.0; + PIE4 : byte absolute $071A; + PIE4_TMR4IE : bit absolute PIE4.3; + PIE4_TMR2IE : bit absolute PIE4.1; + PIE4_TMR1IE : bit absolute PIE4.0; + PIE5 : byte absolute $071B; + PIE5_CLC4IE : bit absolute PIE5.7; + PIE5_CLC3IE : bit absolute PIE5.6; + PIE5_CLC2IE : bit absolute PIE5.5; + PIE5_CLC1IE : bit absolute PIE5.4; + PIE5_TMR1GIE : bit absolute PIE5.0; + PIE6 : byte absolute $071C; + PIE6_CRIE : bit absolute PIE6.7; + PIE6_CCP2IE : bit absolute PIE6.1; + PIE6_CCP1IE : bit absolute PIE6.0; + PIE7 : byte absolute $071D; + PIE7_NVMIE : bit absolute PIE7.5; + PIE7_CWG1IE : bit absolute PIE7.0; + PIE8 : byte absolute $071E; + PIE8_LCDIE : bit absolute PIE8.7; + PIE8_RTCCIE : bit absolute PIE8.6; + PIE8_SMT1PWAIE : bit absolute PIE8.2; + PIE8_SMT1PRAIE : bit absolute PIE8.1; + PIE8_SMT1IE : bit absolute PIE8.0; + PMD0 : byte absolute $0796; + PMD0_SYSCMD : bit absolute PMD0.7; + PMD0_FVRMD : bit absolute PMD0.6; + PMD0_ACTMD : bit absolute PMD0.5; + PMD0_NVMMD : bit absolute PMD0.2; + PMD0_IOCMD : bit absolute PMD0.0; + PMD1 : byte absolute $0797; + PMD1_TMR4MD : bit absolute PMD1.4; + PMD1_TMR2MD : bit absolute PMD1.2; + PMD1_TMR1MD : bit absolute PMD1.1; + PMD1_TMR0MD : bit absolute PMD1.0; + PMD2 : byte absolute $0798; + PMD2_RTCCMD : bit absolute PMD2.7; + PMD2_DACMD : bit absolute PMD2.6; + PMD2_ADCMD : bit absolute PMD2.5; + PMD2_CMP2MD : bit absolute PMD2.2; + PMD2_CMP1MD : bit absolute PMD2.1; + PMD2_ZCDMD : bit absolute PMD2.0; + PMD3 : byte absolute $0799; + PMD3_CCP4MD : bit absolute PMD3.3; + PMD3_CCP3MD : bit absolute PMD3.2; + PMD3_CCP2MD : bit absolute PMD3.1; + PMD3_CCP1MD : bit absolute PMD3.0; + PMD4 : byte absolute $079A; + PMD4_UART2MD : bit absolute PMD4.7; + PMD4_UART1MD : bit absolute PMD4.6; + PMD4_MSSP1MD : bit absolute PMD4.4; + PMD4_CWG1MD : bit absolute PMD4.0; + PMD5 : byte absolute $079B; + PMD5_SMT1MD : bit absolute PMD5.6; + PMD5_LCDMD : bit absolute PMD5.5; + PMD5_CLC4MD : bit absolute PMD5.4; + PMD5_CLC3MD : bit absolute PMD5.3; + PMD5_CLC2MD : bit absolute PMD5.2; + PMD5_CLC1MD : bit absolute PMD5.1; + WDTCON0 : byte absolute $080C; + WDTCON0_WDTPS4 : bit absolute WDTCON0.5; + WDTCON0_WDTPS3 : bit absolute WDTCON0.4; + WDTCON0_WDTPS2 : bit absolute WDTCON0.3; + WDTCON0_WDTPS1 : bit absolute WDTCON0.2; + WDTCON0_WDTPS0 : bit absolute WDTCON0.1; + WDTCON1 : byte absolute $080D; + WDTCON1_WDTCS2 : bit absolute WDTCON1.6; + WDTCON1_WDTCS1 : bit absolute WDTCON1.5; + WDTCON1_WDTCS0 : bit absolute WDTCON1.4; + WDTCON1_WINDOW2 : bit absolute WDTCON1.2; + WDTCON1_WINDOW1 : bit absolute WDTCON1.1; + WDTCON1_WINDOW0 : bit absolute WDTCON1.0; + WDTPSL : byte absolute $080E; + WDTPSH : byte absolute $080F; + WDTTMR : byte absolute $0810; + WDTTMR_WDTTMR4 : bit absolute WDTTMR.7; + WDTTMR_WDTTMR3 : bit absolute WDTTMR.6; + WDTTMR_WDTTMR2 : bit absolute WDTTMR.5; + WDTTMR_WDTTMR1 : bit absolute WDTTMR.4; + WDTTMR_WDTTMR0 : bit absolute WDTTMR.3; + WDTTMR_STATE : bit absolute WDTTMR.2; + WDTTMR_PSCNT17 : bit absolute WDTTMR.1; + WDTTMR_PSCNT16 : bit absolute WDTTMR.0; + BORCON : byte absolute $0811; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + VREGCON : byte absolute $0812; + VREGCON_VREGPM : bit absolute VREGCON.1; + PCON0 : byte absolute $0813; + PCON0_STKOVF : bit absolute PCON0.7; + PCON0_STKUNF : bit absolute PCON0.6; + PCON0_nWDTWV : bit absolute PCON0.5; + PCON0_nRWDT : bit absolute PCON0.4; + PCON0_nRMCLR : bit absolute PCON0.3; + PCON0_nRI : bit absolute PCON0.2; + PCON0_nPOR : bit absolute PCON0.1; + PCON0_nBOR : bit absolute PCON0.0; + PCON1 : byte absolute $0814; + PCON1_MEMV : bit absolute PCON1.1; + PCON1_VBATBOR : bit absolute PCON1.0; + NVMADRL : byte absolute $081A; + NVMADRL_NVMADR7 : bit absolute NVMADRL.7; + NVMADRL_NVMADR6 : bit absolute NVMADRL.6; + NVMADRL_NVMADR5 : bit absolute NVMADRL.5; + NVMADRL_NVMADR4 : bit absolute NVMADRL.4; + NVMADRL_NVMADR3 : bit absolute NVMADRL.3; + NVMADRL_NVMADR2 : bit absolute NVMADRL.2; + NVMADRL_NVMADR1 : bit absolute NVMADRL.1; + NVMADRL_NVMADR0 : bit absolute NVMADRL.0; + NVMADRH : byte absolute $081B; + NVMADRH_NVMADR14 : bit absolute NVMADRH.6; + NVMADRH_NVMADR13 : bit absolute NVMADRH.5; + NVMADRH_NVMADR12 : bit absolute NVMADRH.4; + NVMADRH_NVMADR11 : bit absolute NVMADRH.3; + NVMADRH_NVMADR10 : bit absolute NVMADRH.2; + NVMADRH_NVMADR9 : bit absolute NVMADRH.1; + NVMADRH_NVMADR8 : bit absolute NVMADRH.0; + NVMDATL : byte absolute $081C; + NVMDATL_NVMDAT7 : bit absolute NVMDATL.7; + NVMDATL_NVMDAT6 : bit absolute NVMDATL.6; + NVMDATL_NVMDAT5 : bit absolute NVMDATL.5; + NVMDATL_NVMDAT4 : bit absolute NVMDATL.4; + NVMDATL_NVMDAT3 : bit absolute NVMDATL.3; + NVMDATL_NVMDAT2 : bit absolute NVMDATL.2; + NVMDATL_NVMDAT1 : bit absolute NVMDATL.1; + NVMDATL_NVMDAT0 : bit absolute NVMDATL.0; + NVMDATH : byte absolute $081D; + NVMDATH_NVMDAT13 : bit absolute NVMDATH.5; + NVMDATH_NVMDAT12 : bit absolute NVMDATH.4; + NVMDATH_NVMDAT11 : bit absolute NVMDATH.3; + NVMDATH_NVMDAT10 : bit absolute NVMDATH.2; + NVMDATH_NVMDAT9 : bit absolute NVMDATH.1; + NVMDATH_NVMDAT8 : bit absolute NVMDATH.0; + NVMCON1 : byte absolute $081E; + NVMCON1_NVMREGS : bit absolute NVMCON1.6; + NVMCON1_LWLO : bit absolute NVMCON1.5; + NVMCON1_FREE : bit absolute NVMCON1.4; + NVMCON1_WRERR : bit absolute NVMCON1.3; + NVMCON1_WREN : bit absolute NVMCON1.2; + NVMCON1_WR : bit absolute NVMCON1.1; + NVMCON1_RD : bit absolute NVMCON1.0; + NVMCON2 : byte absolute $081F; + CPUDOZE : byte absolute $088C; + CPUDOZE_IDLEN : bit absolute CPUDOZE.7; + CPUDOZE_DOZEN : bit absolute CPUDOZE.6; + CPUDOZE_ROI : bit absolute CPUDOZE.5; + CPUDOZE_DOE : bit absolute CPUDOZE.4; + CPUDOZE_DOZE2 : bit absolute CPUDOZE.2; + CPUDOZE_DOZE1 : bit absolute CPUDOZE.1; + CPUDOZE_DOZE0 : bit absolute CPUDOZE.0; + OSCCON1 : byte absolute $088D; + OSCCON1_NOSC2 : bit absolute OSCCON1.6; + OSCCON1_NOSC1 : bit absolute OSCCON1.5; + OSCCON1_NOSC0 : bit absolute OSCCON1.4; + OSCCON1_NDIV3 : bit absolute OSCCON1.3; + OSCCON1_NDIV2 : bit absolute OSCCON1.2; + OSCCON1_NDIV1 : bit absolute OSCCON1.1; + OSCCON1_NDIV0 : bit absolute OSCCON1.0; + OSCCON2 : byte absolute $088E; + OSCCON2_COSC2 : bit absolute OSCCON2.6; + OSCCON2_COSC1 : bit absolute OSCCON2.5; + OSCCON2_COSC0 : bit absolute OSCCON2.4; + OSCCON2_CDIV3 : bit absolute OSCCON2.3; + OSCCON2_CDIV2 : bit absolute OSCCON2.2; + OSCCON2_CDIV1 : bit absolute OSCCON2.1; + OSCCON2_CDIV0 : bit absolute OSCCON2.0; + OSCCON3 : byte absolute $088F; + OSCCON3_CSWHOLD : bit absolute OSCCON3.7; + OSCCON3_SOSCPWR : bit absolute OSCCON3.6; + OSCCON3_ORDY : bit absolute OSCCON3.4; + OSCCON3_NOSCR : bit absolute OSCCON3.3; + OSCSTAT : byte absolute $0890; + OSCSTAT_EXTOR : bit absolute OSCSTAT.7; + OSCSTAT_HFOR : bit absolute OSCSTAT.6; + OSCSTAT_MFOR : bit absolute OSCSTAT.5; + OSCSTAT_LFOR : bit absolute OSCSTAT.4; + OSCSTAT_SOR : bit absolute OSCSTAT.3; + OSCSTAT_ADOR : bit absolute OSCSTAT.2; + OSCSTAT_PLLR : bit absolute OSCSTAT.0; + OSCEN : byte absolute $0891; + OSCEN_EXTOEN : bit absolute OSCEN.7; + OSCEN_HFOEN : bit absolute OSCEN.6; + OSCEN_MFOEN : bit absolute OSCEN.5; + OSCEN_LFOEN : bit absolute OSCEN.4; + OSCEN_SOSCEN : bit absolute OSCEN.3; + OSCEN_ADOEN : bit absolute OSCEN.2; + OSCTUNE : byte absolute $0892; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCFRQ : byte absolute $0893; + OSCFRQ_HFFRQ2 : bit absolute OSCFRQ.2; + OSCFRQ_HFFRQ1 : bit absolute OSCFRQ.1; + OSCFRQ_HFFRQ0 : bit absolute OSCFRQ.0; + ACTCON : byte absolute $0894; + ACTCON_ACTEN : bit absolute ACTCON.7; + ACTCON_ACTUD : bit absolute ACTCON.6; + ACTCON_ACTLOCK : bit absolute ACTCON.3; + ACTCON_ACTORS : bit absolute ACTCON.1; + FVRCON : byte absolute $090C; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DAC1CON0 : byte absolute $090E; + DAC1CON0_OE1 : bit absolute DAC1CON0.5; + DAC1CON0_OE2 : bit absolute DAC1CON0.4; + DAC1CON0_PSS1 : bit absolute DAC1CON0.3; + DAC1CON0_PSS0 : bit absolute DAC1CON0.2; + DAC1CON1 : byte absolute $090F; + DAC1CON1_DAC1R4 : bit absolute DAC1CON1.4; + DAC1CON1_DAC1R3 : bit absolute DAC1CON1.3; + DAC1CON1_DAC1R2 : bit absolute DAC1CON1.2; + DAC1CON1_DAC1R1 : bit absolute DAC1CON1.1; + DAC1CON1_DAC1R0 : bit absolute DAC1CON1.0; + ZCDCON : byte absolute $091F; + ZCDCON_ZCDSEN : bit absolute ZCDCON.7; + ZCDCON_ZCDOUT : bit absolute ZCDCON.5; + ZCDCON_ZCDPOL : bit absolute ZCDCON.4; + ZCDCON_ZCDINTP : bit absolute ZCDCON.1; + ZCDCON_ZCDINTN : bit absolute ZCDCON.0; + CMOUT : byte absolute $098F; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + CM1CON0 : byte absolute $0990; + CM1CON0_HYS : bit absolute CM1CON0.1; + CM1CON1 : byte absolute $0991; + CM1CON1_INTP : bit absolute CM1CON1.1; + CM1CON1_INTN : bit absolute CM1CON1.0; + CM1NSEL : byte absolute $0992; + CM1NSEL_NCH2 : bit absolute CM1NSEL.2; + CM1NSEL_NCH1 : bit absolute CM1NSEL.1; + CM1NSEL_NCH0 : bit absolute CM1NSEL.0; + CM1PSEL : byte absolute $0993; + CM1PSEL_PCH3 : bit absolute CM1PSEL.3; + CM1PSEL_PCH2 : bit absolute CM1PSEL.2; + CM1PSEL_PCH1 : bit absolute CM1PSEL.1; + CM1PSEL_PCH0 : bit absolute CM1PSEL.0; + CM2CON0 : byte absolute $0994; + CM2CON1 : byte absolute $0995; + CM2NSEL : byte absolute $0996; + CM2PSEL : byte absolute $0997; + RC2REG : byte absolute $0A19; + TX2REG : byte absolute $0A1A; + SP2BRGL : byte absolute $0A1B; + SP2BRGH : byte absolute $0A1C; + RC2STA : byte absolute $0A1D; + TX2STA : byte absolute $0A1E; + BAUD2CON : byte absolute $0A1F; + RTCCON : byte absolute $0C0C; + RTCCON_RTCEN : bit absolute RTCCON.7; + RTCCON_RTCWREN : bit absolute RTCCON.5; + RTCCON_RTCSYNC : bit absolute RTCCON.4; + RTCCON_HALFSEC : bit absolute RTCCON.3; + RTCCON_RTCCLKSEL1 : bit absolute RTCCON.1; + RTCCON_RTCCLKSEL0 : bit absolute RTCCON.0; + RTCCAL : byte absolute $0C0D; + ALRMCON : byte absolute $0C0E; + ALRMCON_ALRMEN : bit absolute ALRMCON.7; + ALRMCON_CHIME : bit absolute ALRMCON.6; + ALRMCON_AMASK3 : bit absolute ALRMCON.5; + ALRMCON_AMASK2 : bit absolute ALRMCON.4; + ALRMCON_AMASK1 : bit absolute ALRMCON.3; + ALRMCON_AMASK0 : bit absolute ALRMCON.2; + ALRMRPT : byte absolute $0C0F; + YEAR : byte absolute $0C10; + YEAR_YEARH3 : bit absolute YEAR.7; + YEAR_YEARH2 : bit absolute YEAR.6; + YEAR_YEARH1 : bit absolute YEAR.5; + YEAR_YEARH0 : bit absolute YEAR.4; + YEAR_YEARL3 : bit absolute YEAR.3; + YEAR_YEARL2 : bit absolute YEAR.2; + YEAR_YEARL1 : bit absolute YEAR.1; + YEAR_YEARL0 : bit absolute YEAR.0; + MONTH : byte absolute $0C11; + MONTH_MONTHL3 : bit absolute MONTH.3; + MONTH_MONTHL2 : bit absolute MONTH.2; + MONTH_MONTHL1 : bit absolute MONTH.1; + MONTH_MONTHL0 : bit absolute MONTH.0; + WEEKDAY : byte absolute $0C12; + WEEKDAY_WDAY2 : bit absolute WEEKDAY.2; + WEEKDAY_WDAY1 : bit absolute WEEKDAY.1; + WEEKDAY_WDAY0 : bit absolute WEEKDAY.0; + DAY : byte absolute $0C13; + DAY_DAYH1 : bit absolute DAY.5; + DAY_DAYH0 : bit absolute DAY.4; + DAY_DAYL3 : bit absolute DAY.3; + DAY_DAYL2 : bit absolute DAY.2; + DAY_DAYL1 : bit absolute DAY.1; + DAY_DAYL0 : bit absolute DAY.0; + HOURS : byte absolute $0C14; + HOURS_HRH1 : bit absolute HOURS.5; + HOURS_HRH0 : bit absolute HOURS.4; + HOURS_HRL3 : bit absolute HOURS.3; + HOURS_HRL2 : bit absolute HOURS.2; + HOURS_HRL1 : bit absolute HOURS.1; + HOURS_HRL0 : bit absolute HOURS.0; + MINUTES : byte absolute $0C15; + MINUTES_MINH2 : bit absolute MINUTES.6; + MINUTES_MINH1 : bit absolute MINUTES.5; + MINUTES_MINH0 : bit absolute MINUTES.4; + MINUTES_MINL3 : bit absolute MINUTES.3; + MINUTES_MINL2 : bit absolute MINUTES.2; + MINUTES_MINL1 : bit absolute MINUTES.1; + MINUTES_MINL0 : bit absolute MINUTES.0; + SECONDS : byte absolute $0C16; + SECONDS_SECH2 : bit absolute SECONDS.6; + SECONDS_SECH1 : bit absolute SECONDS.5; + SECONDS_SECH0 : bit absolute SECONDS.4; + SECONDS_SECL3 : bit absolute SECONDS.3; + SECONDS_SECL2 : bit absolute SECONDS.2; + SECONDS_SECL1 : bit absolute SECONDS.1; + SECONDS_SECL0 : bit absolute SECONDS.0; + ALRMMTH : byte absolute $0C17; + ALRMMTH_MTHALRMH0 : bit absolute ALRMMTH.4; + ALRMMTH_MTHALRML3 : bit absolute ALRMMTH.3; + ALRMMTH_MTHALRML2 : bit absolute ALRMMTH.2; + ALRMMTH_MTHALRML1 : bit absolute ALRMMTH.1; + ALRMMTH_MTHALRML0 : bit absolute ALRMMTH.0; + ALRMWD : byte absolute $0C18; + ALRMWD_WDALRM2 : bit absolute ALRMWD.2; + ALRMWD_WDALRM1 : bit absolute ALRMWD.1; + ALRMWD_WDALRM0 : bit absolute ALRMWD.0; + ALRMDAY : byte absolute $0C19; + ALRMDAY_DAYALRMH1 : bit absolute ALRMDAY.5; + ALRMDAY_DAYALRMH0 : bit absolute ALRMDAY.4; + ALRMDAY_DAYALRML3 : bit absolute ALRMDAY.3; + ALRMDAY_DAYALRML2 : bit absolute ALRMDAY.2; + ALRMDAY_DAYALRML1 : bit absolute ALRMDAY.1; + ALRMDAY_DAYALRML0 : bit absolute ALRMDAY.0; + ALRMHR : byte absolute $0C1A; + ALRMHR_HRALRMH1 : bit absolute ALRMHR.5; + ALRMHR_HRALRMH0 : bit absolute ALRMHR.4; + ALRMHR_HRALRML3 : bit absolute ALRMHR.3; + ALRMHR_HRALRML2 : bit absolute ALRMHR.2; + ALRMHR_HRALRML1 : bit absolute ALRMHR.1; + ALRMHR_HRALRML0 : bit absolute ALRMHR.0; + ALRMMIN : byte absolute $0C1B; + ALRMMIN_MINALRMH2 : bit absolute ALRMMIN.6; + ALRMMIN_MINALRMH1 : bit absolute ALRMMIN.5; + ALRMMIN_MINALRMH0 : bit absolute ALRMMIN.4; + ALRMMIN_MINALRML3 : bit absolute ALRMMIN.3; + ALRMMIN_MINALRML2 : bit absolute ALRMMIN.2; + ALRMMIN_MINALRML1 : bit absolute ALRMMIN.1; + ALRMMIN_MINALRML0 : bit absolute ALRMMIN.0; + ALRMSEC : byte absolute $0C1C; + ALRMSEC_SECALRMH2 : bit absolute ALRMSEC.6; + ALRMSEC_SECALRMH1 : bit absolute ALRMSEC.5; + ALRMSEC_SECALRMH0 : bit absolute ALRMSEC.4; + ALRMSEC_SECALRML3 : bit absolute ALRMSEC.3; + ALRMSEC_SECALRML2 : bit absolute ALRMSEC.2; + ALRMSEC_SECALRML1 : bit absolute ALRMSEC.1; + ALRMSEC_SECALRML0 : bit absolute ALRMSEC.0; + PORTG : byte absolute $0C8C; + PORTG_RG7 : bit absolute PORTG.7; + PORTG_RG6 : bit absolute PORTG.6; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + PORTH : byte absolute $0C8D; + PORTH_RH3 : bit absolute PORTH.3; + PORTH_RH2 : bit absolute PORTH.2; + PORTH_RH1 : bit absolute PORTH.1; + PORTH_RH0 : bit absolute PORTH.0; + TRISG : byte absolute $0C8E; + TRISG_TRISG7 : bit absolute TRISG.7; + TRISG_TRISG6 : bit absolute TRISG.6; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + TRISH : byte absolute $0C8F; + TRISH_TRISH3 : bit absolute TRISH.3; + TRISH_TRISH2 : bit absolute TRISH.2; + TRISH_TRISH1 : bit absolute TRISH.1; + TRISH_TRISH0 : bit absolute TRISH.0; + LATG : byte absolute $0C90; + LATG_LATG7 : bit absolute LATG.7; + LATG_LATG6 : bit absolute LATG.6; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + LATH : byte absolute $0C91; + LATH_LATH3 : bit absolute LATH.3; + LATH_LATH2 : bit absolute LATH.2; + LATH_LATH1 : bit absolute LATH.1; + LATH_LATH0 : bit absolute LATH.0; + VB0GPR : byte absolute $0E8C; + VB1GPR : byte absolute $0E8D; + VB2GPR : byte absolute $0E8E; + VB3GPR : byte absolute $0E8F; + LCDCON : byte absolute $1D0C; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_LMUX3 : bit absolute LCDCON.3; + LCDCON_LMUX2 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $1D0D; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDSE0 : byte absolute $1D0E; + LCDSE0_SE07 : bit absolute LCDSE0.7; + LCDSE0_SE06 : bit absolute LCDSE0.6; + LCDSE0_SE05 : bit absolute LCDSE0.5; + LCDSE0_SE04 : bit absolute LCDSE0.4; + LCDSE0_SE03 : bit absolute LCDSE0.3; + LCDSE0_SE02 : bit absolute LCDSE0.2; + LCDSE0_SE01 : bit absolute LCDSE0.1; + LCDSE0_SE00 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $1D0F; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE09 : bit absolute LCDSE1.1; + LCDSE1_SE08 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $1D10; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $1D11; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $1D12; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $1D13; + LCDSE5_SE47 : bit absolute LCDSE5.7; + LCDSE5_SE46 : bit absolute LCDSE5.6; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDVCON1 : byte absolute $1D14; + LCDVCON1_LPEN : bit absolute LCDVCON1.7; + LCDVCON1_EN5V : bit absolute LCDVCON1.6; + LCDVCON1_BIAS2 : bit absolute LCDVCON1.2; + LCDVCON1_BIAS1 : bit absolute LCDVCON1.1; + LCDVCON1_BIAS0 : bit absolute LCDVCON1.0; + LCDVCON2 : byte absolute $1D15; + LCDVCON2_CPWDT : bit absolute LCDVCON2.7; + LCDVCON2_LCDVSRC3 : bit absolute LCDVCON2.3; + LCDVCON2_LCDVSRC2 : bit absolute LCDVCON2.2; + LCDVCON2_LCDVSRC1 : bit absolute LCDVCON2.1; + LCDVCON2_LCDVSRC0 : bit absolute LCDVCON2.0; + LCDREF : byte absolute $1D16; + LCDREF_LCDCST2 : bit absolute LCDREF.2; + LCDREF_LCDCST1 : bit absolute LCDREF.1; + LCDREF_LCDCST0 : bit absolute LCDREF.0; + LCDRL : byte absolute $1D17; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LCDIRI : bit absolute LCDRL.3; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDDATA0 : byte absolute $1D18; + LCDDATA0_S07C0 : bit absolute LCDDATA0.7; + LCDDATA0_S06C0 : bit absolute LCDDATA0.6; + LCDDATA0_S05C0 : bit absolute LCDDATA0.5; + LCDDATA0_S04C0 : bit absolute LCDDATA0.4; + LCDDATA0_S03C0 : bit absolute LCDDATA0.3; + LCDDATA0_S02C0 : bit absolute LCDDATA0.2; + LCDDATA0_S01C0 : bit absolute LCDDATA0.1; + LCDDATA0_S00C0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $1D19; + LCDDATA1_S15C0 : bit absolute LCDDATA1.7; + LCDDATA1_S14C0 : bit absolute LCDDATA1.6; + LCDDATA1_S13C0 : bit absolute LCDDATA1.5; + LCDDATA1_S12C0 : bit absolute LCDDATA1.4; + LCDDATA1_S11C0 : bit absolute LCDDATA1.3; + LCDDATA1_S10C0 : bit absolute LCDDATA1.2; + LCDDATA1_S09C0 : bit absolute LCDDATA1.1; + LCDDATA1_S08C0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $1D1A; + LCDDATA2_S23C0 : bit absolute LCDDATA2.7; + LCDDATA2_S22C0 : bit absolute LCDDATA2.6; + LCDDATA2_S21C0 : bit absolute LCDDATA2.5; + LCDDATA2_S20C0 : bit absolute LCDDATA2.4; + LCDDATA2_S19C0 : bit absolute LCDDATA2.3; + LCDDATA2_S18C0 : bit absolute LCDDATA2.2; + LCDDATA2_S17C0 : bit absolute LCDDATA2.1; + LCDDATA2_S16C0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $1D1B; + LCDDATA3_S31C0 : bit absolute LCDDATA3.7; + LCDDATA3_S30C0 : bit absolute LCDDATA3.6; + LCDDATA3_S29C0 : bit absolute LCDDATA3.5; + LCDDATA3_S28C0 : bit absolute LCDDATA3.4; + LCDDATA3_S27C0 : bit absolute LCDDATA3.3; + LCDDATA3_S26C0 : bit absolute LCDDATA3.2; + LCDDATA3_S25C0 : bit absolute LCDDATA3.1; + LCDDATA3_S24C0 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $1D1C; + LCDDATA4_S39C0 : bit absolute LCDDATA4.7; + LCDDATA4_S38C0 : bit absolute LCDDATA4.6; + LCDDATA4_S37C0 : bit absolute LCDDATA4.5; + LCDDATA4_S36C0 : bit absolute LCDDATA4.4; + LCDDATA4_S35C0 : bit absolute LCDDATA4.3; + LCDDATA4_S34C0 : bit absolute LCDDATA4.2; + LCDDATA4_S33C0 : bit absolute LCDDATA4.1; + LCDDATA4_S32C0 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $1D1D; + LCDDATA5_S45C0 : bit absolute LCDDATA5.5; + LCDDATA5_S44C0 : bit absolute LCDDATA5.4; + LCDDATA5_S43C0 : bit absolute LCDDATA5.3; + LCDDATA5_S42C0 : bit absolute LCDDATA5.2; + LCDDATA5_S41C0 : bit absolute LCDDATA5.1; + LCDDATA5_S40C0 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $1D1E; + LCDDATA6_S07C1 : bit absolute LCDDATA6.7; + LCDDATA6_S06C1 : bit absolute LCDDATA6.6; + LCDDATA6_S05C1 : bit absolute LCDDATA6.5; + LCDDATA6_S04C1 : bit absolute LCDDATA6.4; + LCDDATA6_S03C1 : bit absolute LCDDATA6.3; + LCDDATA6_S02C1 : bit absolute LCDDATA6.2; + LCDDATA6_S01C1 : bit absolute LCDDATA6.1; + LCDDATA6_S00C1 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $1D1F; + LCDDATA7_S15C1 : bit absolute LCDDATA7.7; + LCDDATA7_S14C1 : bit absolute LCDDATA7.6; + LCDDATA7_S13C1 : bit absolute LCDDATA7.5; + LCDDATA7_S12C1 : bit absolute LCDDATA7.4; + LCDDATA7_S11C1 : bit absolute LCDDATA7.3; + LCDDATA7_S10C1 : bit absolute LCDDATA7.2; + LCDDATA7_S09C1 : bit absolute LCDDATA7.1; + LCDDATA7_S08C1 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $1D20; + LCDDATA8_S23C1 : bit absolute LCDDATA8.7; + LCDDATA8_S22C1 : bit absolute LCDDATA8.6; + LCDDATA8_S21C1 : bit absolute LCDDATA8.5; + LCDDATA8_S20C1 : bit absolute LCDDATA8.4; + LCDDATA8_S19C1 : bit absolute LCDDATA8.3; + LCDDATA8_S18C1 : bit absolute LCDDATA8.2; + LCDDATA8_S17C1 : bit absolute LCDDATA8.1; + LCDDATA8_S16C1 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $1D21; + LCDDATA9_S31C1 : bit absolute LCDDATA9.7; + LCDDATA9_S30C1 : bit absolute LCDDATA9.6; + LCDDATA9_S29C1 : bit absolute LCDDATA9.5; + LCDDATA9_S28C1 : bit absolute LCDDATA9.4; + LCDDATA9_S27C1 : bit absolute LCDDATA9.3; + LCDDATA9_S26C1 : bit absolute LCDDATA9.2; + LCDDATA9_S25C1 : bit absolute LCDDATA9.1; + LCDDATA9_S24C1 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $1D22; + LCDDATA10_S39C1 : bit absolute LCDDATA10.7; + LCDDATA10_S38C1 : bit absolute LCDDATA10.6; + LCDDATA10_S37C1 : bit absolute LCDDATA10.5; + LCDDATA10_S36C1 : bit absolute LCDDATA10.4; + LCDDATA10_S35C1 : bit absolute LCDDATA10.3; + LCDDATA10_S34C1 : bit absolute LCDDATA10.2; + LCDDATA10_S33C1 : bit absolute LCDDATA10.1; + LCDDATA10_S32C1 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $1D23; + LCDDATA11_S45C1 : bit absolute LCDDATA11.5; + LCDDATA11_S44C1 : bit absolute LCDDATA11.4; + LCDDATA11_S43C1 : bit absolute LCDDATA11.3; + LCDDATA11_S42C1 : bit absolute LCDDATA11.2; + LCDDATA11_S41C1 : bit absolute LCDDATA11.1; + LCDDATA11_S40C1 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $1D24; + LCDDATA12_S07C2 : bit absolute LCDDATA12.7; + LCDDATA12_S06C2 : bit absolute LCDDATA12.6; + LCDDATA12_S05C2 : bit absolute LCDDATA12.5; + LCDDATA12_S04C2 : bit absolute LCDDATA12.4; + LCDDATA12_S03C2 : bit absolute LCDDATA12.3; + LCDDATA12_S02C2 : bit absolute LCDDATA12.2; + LCDDATA12_S01C2 : bit absolute LCDDATA12.1; + LCDDATA12_S00C2 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $1D25; + LCDDATA13_S15C2 : bit absolute LCDDATA13.7; + LCDDATA13_S14C2 : bit absolute LCDDATA13.6; + LCDDATA13_S13C2 : bit absolute LCDDATA13.5; + LCDDATA13_S12C2 : bit absolute LCDDATA13.4; + LCDDATA13_S11C2 : bit absolute LCDDATA13.3; + LCDDATA13_S10C2 : bit absolute LCDDATA13.2; + LCDDATA13_S09C2 : bit absolute LCDDATA13.1; + LCDDATA13_S08C2 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $1D26; + LCDDATA14_S23C2 : bit absolute LCDDATA14.7; + LCDDATA14_S22C2 : bit absolute LCDDATA14.6; + LCDDATA14_S21C2 : bit absolute LCDDATA14.5; + LCDDATA14_S20C2 : bit absolute LCDDATA14.4; + LCDDATA14_S19C2 : bit absolute LCDDATA14.3; + LCDDATA14_S18C2 : bit absolute LCDDATA14.2; + LCDDATA14_S17C2 : bit absolute LCDDATA14.1; + LCDDATA14_S16C2 : bit absolute LCDDATA14.0; + LCDDATA15 : byte absolute $1D27; + LCDDATA15_S31C2 : bit absolute LCDDATA15.7; + LCDDATA15_S30C2 : bit absolute LCDDATA15.6; + LCDDATA15_S29C2 : bit absolute LCDDATA15.5; + LCDDATA15_S28C2 : bit absolute LCDDATA15.4; + LCDDATA15_S27C2 : bit absolute LCDDATA15.3; + LCDDATA15_S26C2 : bit absolute LCDDATA15.2; + LCDDATA15_S25C2 : bit absolute LCDDATA15.1; + LCDDATA15_S24C2 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $1D28; + LCDDATA16_S39C2 : bit absolute LCDDATA16.7; + LCDDATA16_S38C2 : bit absolute LCDDATA16.6; + LCDDATA16_S37C2 : bit absolute LCDDATA16.5; + LCDDATA16_S36C2 : bit absolute LCDDATA16.4; + LCDDATA16_S35C2 : bit absolute LCDDATA16.3; + LCDDATA16_S34C2 : bit absolute LCDDATA16.2; + LCDDATA16_S33C2 : bit absolute LCDDATA16.1; + LCDDATA16_S32C2 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $1D29; + LCDDATA17_S45C2 : bit absolute LCDDATA17.5; + LCDDATA17_S44C2 : bit absolute LCDDATA17.4; + LCDDATA17_S43C2 : bit absolute LCDDATA17.3; + LCDDATA17_S42C2 : bit absolute LCDDATA17.2; + LCDDATA17_S41C2 : bit absolute LCDDATA17.1; + LCDDATA17_S40C2 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $1D2A; + LCDDATA18_S07C3 : bit absolute LCDDATA18.7; + LCDDATA18_S06C3 : bit absolute LCDDATA18.6; + LCDDATA18_S05C3 : bit absolute LCDDATA18.5; + LCDDATA18_S04C3 : bit absolute LCDDATA18.4; + LCDDATA18_S03C3 : bit absolute LCDDATA18.3; + LCDDATA18_S02C3 : bit absolute LCDDATA18.2; + LCDDATA18_S01C3 : bit absolute LCDDATA18.1; + LCDDATA18_S00C3 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $1D2B; + LCDDATA19_S15C3 : bit absolute LCDDATA19.7; + LCDDATA19_S14C3 : bit absolute LCDDATA19.6; + LCDDATA19_S13C3 : bit absolute LCDDATA19.5; + LCDDATA19_S12C3 : bit absolute LCDDATA19.4; + LCDDATA19_S11C3 : bit absolute LCDDATA19.3; + LCDDATA19_S10C3 : bit absolute LCDDATA19.2; + LCDDATA19_S09C3 : bit absolute LCDDATA19.1; + LCDDATA19_S08C3 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $1D2C; + LCDDATA20_S23C3 : bit absolute LCDDATA20.7; + LCDDATA20_S22C3 : bit absolute LCDDATA20.6; + LCDDATA20_S21C3 : bit absolute LCDDATA20.5; + LCDDATA20_S20C3 : bit absolute LCDDATA20.4; + LCDDATA20_S19C3 : bit absolute LCDDATA20.3; + LCDDATA20_S18C3 : bit absolute LCDDATA20.2; + LCDDATA20_S17C3 : bit absolute LCDDATA20.1; + LCDDATA20_S16C3 : bit absolute LCDDATA20.0; + LCDDATA21 : byte absolute $1D2D; + LCDDATA21_S31C3 : bit absolute LCDDATA21.7; + LCDDATA21_S30C3 : bit absolute LCDDATA21.6; + LCDDATA21_S29C3 : bit absolute LCDDATA21.5; + LCDDATA21_S28C3 : bit absolute LCDDATA21.4; + LCDDATA21_S27C3 : bit absolute LCDDATA21.3; + LCDDATA21_S26C3 : bit absolute LCDDATA21.2; + LCDDATA21_S25C3 : bit absolute LCDDATA21.1; + LCDDATA21_S24C3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $1D2E; + LCDDATA22_S39C3 : bit absolute LCDDATA22.7; + LCDDATA22_S38C3 : bit absolute LCDDATA22.6; + LCDDATA22_S37C3 : bit absolute LCDDATA22.5; + LCDDATA22_S36C3 : bit absolute LCDDATA22.4; + LCDDATA22_S35C3 : bit absolute LCDDATA22.3; + LCDDATA22_S34C3 : bit absolute LCDDATA22.2; + LCDDATA22_S33C3 : bit absolute LCDDATA22.1; + LCDDATA22_S32C3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $1D2F; + LCDDATA23_S45C3 : bit absolute LCDDATA23.5; + LCDDATA23_S44C3 : bit absolute LCDDATA23.4; + LCDDATA23_S43C3 : bit absolute LCDDATA23.3; + LCDDATA23_S42C3 : bit absolute LCDDATA23.2; + LCDDATA23_S41C3 : bit absolute LCDDATA23.1; + LCDDATA23_S40C3 : bit absolute LCDDATA23.0; + LCDDATA24 : byte absolute $1D30; + LCDDATA24_S07C4 : bit absolute LCDDATA24.7; + LCDDATA24_S06C4 : bit absolute LCDDATA24.6; + LCDDATA24_S05C4 : bit absolute LCDDATA24.5; + LCDDATA24_S04C4 : bit absolute LCDDATA24.4; + LCDDATA24_S03C4 : bit absolute LCDDATA24.3; + LCDDATA24_S02C4 : bit absolute LCDDATA24.2; + LCDDATA24_S01C4 : bit absolute LCDDATA24.1; + LCDDATA24_S00C4 : bit absolute LCDDATA24.0; + LCDDATA25 : byte absolute $1D31; + LCDDATA25_S15C4 : bit absolute LCDDATA25.7; + LCDDATA25_S14C4 : bit absolute LCDDATA25.6; + LCDDATA25_S13C4 : bit absolute LCDDATA25.5; + LCDDATA25_S12C4 : bit absolute LCDDATA25.4; + LCDDATA25_S11C4 : bit absolute LCDDATA25.3; + LCDDATA25_S10C4 : bit absolute LCDDATA25.2; + LCDDATA25_S09C4 : bit absolute LCDDATA25.1; + LCDDATA25_S08C4 : bit absolute LCDDATA25.0; + LCDDATA26 : byte absolute $1D32; + LCDDATA26_S23C4 : bit absolute LCDDATA26.7; + LCDDATA26_S22C4 : bit absolute LCDDATA26.6; + LCDDATA26_S21C4 : bit absolute LCDDATA26.5; + LCDDATA26_S20C4 : bit absolute LCDDATA26.4; + LCDDATA26_S19C4 : bit absolute LCDDATA26.3; + LCDDATA26_S18C4 : bit absolute LCDDATA26.2; + LCDDATA26_S17C4 : bit absolute LCDDATA26.1; + LCDDATA26_S16C4 : bit absolute LCDDATA26.0; + LCDDATA27 : byte absolute $1D33; + LCDDATA27_S31C4 : bit absolute LCDDATA27.7; + LCDDATA27_S30C4 : bit absolute LCDDATA27.6; + LCDDATA27_S29C4 : bit absolute LCDDATA27.5; + LCDDATA27_S28C4 : bit absolute LCDDATA27.4; + LCDDATA27_S27C4 : bit absolute LCDDATA27.3; + LCDDATA27_S26C4 : bit absolute LCDDATA27.2; + LCDDATA27_S25C4 : bit absolute LCDDATA27.1; + LCDDATA27_S24C4 : bit absolute LCDDATA27.0; + LCDDATA28 : byte absolute $1D34; + LCDDATA28_S39C4 : bit absolute LCDDATA28.7; + LCDDATA28_S38C4 : bit absolute LCDDATA28.6; + LCDDATA28_S37C4 : bit absolute LCDDATA28.5; + LCDDATA28_S36C4 : bit absolute LCDDATA28.4; + LCDDATA28_S35C4 : bit absolute LCDDATA28.3; + LCDDATA28_S34C4 : bit absolute LCDDATA28.2; + LCDDATA28_S33C4 : bit absolute LCDDATA28.1; + LCDDATA28_S32C4 : bit absolute LCDDATA28.0; + LCDDATA29 : byte absolute $1D35; + LCDDATA29_S45C4 : bit absolute LCDDATA29.5; + LCDDATA29_S44C4 : bit absolute LCDDATA29.4; + LCDDATA29_S43C4 : bit absolute LCDDATA29.3; + LCDDATA29_S42C4 : bit absolute LCDDATA29.2; + LCDDATA29_S41C4 : bit absolute LCDDATA29.1; + LCDDATA29_S40C4 : bit absolute LCDDATA29.0; + LCDDATA30 : byte absolute $1D36; + LCDDATA30_S07C5 : bit absolute LCDDATA30.7; + LCDDATA30_S06C5 : bit absolute LCDDATA30.6; + LCDDATA30_S05C5 : bit absolute LCDDATA30.5; + LCDDATA30_S04C5 : bit absolute LCDDATA30.4; + LCDDATA30_S03C5 : bit absolute LCDDATA30.3; + LCDDATA30_S02C5 : bit absolute LCDDATA30.2; + LCDDATA30_S01C5 : bit absolute LCDDATA30.1; + LCDDATA30_S00C5 : bit absolute LCDDATA30.0; + LCDDATA31 : byte absolute $1D37; + LCDDATA31_S15C5 : bit absolute LCDDATA31.7; + LCDDATA31_S14C5 : bit absolute LCDDATA31.6; + LCDDATA31_S13C5 : bit absolute LCDDATA31.5; + LCDDATA31_S12C5 : bit absolute LCDDATA31.4; + LCDDATA31_S11C5 : bit absolute LCDDATA31.3; + LCDDATA31_S10C5 : bit absolute LCDDATA31.2; + LCDDATA31_S09C5 : bit absolute LCDDATA31.1; + LCDDATA31_S08C5 : bit absolute LCDDATA31.0; + LCDDATA32 : byte absolute $1D38; + LCDDATA32_S23C5 : bit absolute LCDDATA32.7; + LCDDATA32_S22C5 : bit absolute LCDDATA32.6; + LCDDATA32_S21C5 : bit absolute LCDDATA32.5; + LCDDATA32_S20C5 : bit absolute LCDDATA32.4; + LCDDATA32_S19C5 : bit absolute LCDDATA32.3; + LCDDATA32_S18C5 : bit absolute LCDDATA32.2; + LCDDATA32_S17C5 : bit absolute LCDDATA32.1; + LCDDATA32_S16C5 : bit absolute LCDDATA32.0; + LCDDATA33 : byte absolute $1D39; + LCDDATA33_S31C5 : bit absolute LCDDATA33.7; + LCDDATA33_S30C5 : bit absolute LCDDATA33.6; + LCDDATA33_S29C5 : bit absolute LCDDATA33.5; + LCDDATA33_S28C5 : bit absolute LCDDATA33.4; + LCDDATA33_S27C5 : bit absolute LCDDATA33.3; + LCDDATA33_S26C5 : bit absolute LCDDATA33.2; + LCDDATA33_S25C5 : bit absolute LCDDATA33.1; + LCDDATA33_S24C5 : bit absolute LCDDATA33.0; + LCDDATA34 : byte absolute $1D3A; + LCDDATA34_S39C5 : bit absolute LCDDATA34.7; + LCDDATA34_S38C5 : bit absolute LCDDATA34.6; + LCDDATA34_S37C5 : bit absolute LCDDATA34.5; + LCDDATA34_S36C5 : bit absolute LCDDATA34.4; + LCDDATA34_S35C5 : bit absolute LCDDATA34.3; + LCDDATA34_S34C5 : bit absolute LCDDATA34.2; + LCDDATA34_S33C5 : bit absolute LCDDATA34.1; + LCDDATA34_S32C5 : bit absolute LCDDATA34.0; + LCDDATA35 : byte absolute $1D3B; + LCDDATA35_S45C5 : bit absolute LCDDATA35.5; + LCDDATA35_S44C5 : bit absolute LCDDATA35.4; + LCDDATA35_S43C5 : bit absolute LCDDATA35.3; + LCDDATA35_S42C5 : bit absolute LCDDATA35.2; + LCDDATA35_S41C5 : bit absolute LCDDATA35.1; + LCDDATA35_S40C5 : bit absolute LCDDATA35.0; + LCDDATA36 : byte absolute $1D3C; + LCDDATA36_S07C6 : bit absolute LCDDATA36.7; + LCDDATA36_S06C6 : bit absolute LCDDATA36.6; + LCDDATA36_S05C6 : bit absolute LCDDATA36.5; + LCDDATA36_S04C6 : bit absolute LCDDATA36.4; + LCDDATA36_S03C6 : bit absolute LCDDATA36.3; + LCDDATA36_S02C6 : bit absolute LCDDATA36.2; + LCDDATA36_S01C6 : bit absolute LCDDATA36.1; + LCDDATA36_S00C6 : bit absolute LCDDATA36.0; + LCDDATA37 : byte absolute $1D3D; + LCDDATA37_S15C6 : bit absolute LCDDATA37.7; + LCDDATA37_S14C6 : bit absolute LCDDATA37.6; + LCDDATA37_S13C6 : bit absolute LCDDATA37.5; + LCDDATA37_S12C6 : bit absolute LCDDATA37.4; + LCDDATA37_S11C6 : bit absolute LCDDATA37.3; + LCDDATA37_S10C6 : bit absolute LCDDATA37.2; + LCDDATA37_S09C6 : bit absolute LCDDATA37.1; + LCDDATA37_S08C6 : bit absolute LCDDATA37.0; + LCDDATA38 : byte absolute $1D3E; + LCDDATA38_S23C6 : bit absolute LCDDATA38.7; + LCDDATA38_S22C6 : bit absolute LCDDATA38.6; + LCDDATA38_S21C6 : bit absolute LCDDATA38.5; + LCDDATA38_S20C6 : bit absolute LCDDATA38.4; + LCDDATA38_S19C6 : bit absolute LCDDATA38.3; + LCDDATA38_S18C6 : bit absolute LCDDATA38.2; + LCDDATA38_S17C6 : bit absolute LCDDATA38.1; + LCDDATA38_S16C6 : bit absolute LCDDATA38.0; + LCDDATA39 : byte absolute $1D3F; + LCDDATA39_S31C6 : bit absolute LCDDATA39.7; + LCDDATA39_S30C6 : bit absolute LCDDATA39.6; + LCDDATA39_S29C6 : bit absolute LCDDATA39.5; + LCDDATA39_S28C6 : bit absolute LCDDATA39.4; + LCDDATA39_S27C6 : bit absolute LCDDATA39.3; + LCDDATA39_S26C6 : bit absolute LCDDATA39.2; + LCDDATA39_S25C6 : bit absolute LCDDATA39.1; + LCDDATA39_S24C6 : bit absolute LCDDATA39.0; + LCDDATA40 : byte absolute $1D40; + LCDDATA40_S39C6 : bit absolute LCDDATA40.7; + LCDDATA40_S38C6 : bit absolute LCDDATA40.6; + LCDDATA40_S37C6 : bit absolute LCDDATA40.5; + LCDDATA40_S36C6 : bit absolute LCDDATA40.4; + LCDDATA40_S35C6 : bit absolute LCDDATA40.3; + LCDDATA40_S34C6 : bit absolute LCDDATA40.2; + LCDDATA40_S33C6 : bit absolute LCDDATA40.1; + LCDDATA40_S32C6 : bit absolute LCDDATA40.0; + LCDDATA41 : byte absolute $1D41; + LCDDATA41_S45C6 : bit absolute LCDDATA41.5; + LCDDATA41_S44C6 : bit absolute LCDDATA41.4; + LCDDATA41_S43C6 : bit absolute LCDDATA41.3; + LCDDATA41_S42C6 : bit absolute LCDDATA41.2; + LCDDATA41_S41C6 : bit absolute LCDDATA41.1; + LCDDATA41_S40C6 : bit absolute LCDDATA41.0; + LCDDATA42 : byte absolute $1D42; + LCDDATA42_S07C7 : bit absolute LCDDATA42.7; + LCDDATA42_S06C7 : bit absolute LCDDATA42.6; + LCDDATA42_S05C7 : bit absolute LCDDATA42.5; + LCDDATA42_S04C7 : bit absolute LCDDATA42.4; + LCDDATA42_S03C7 : bit absolute LCDDATA42.3; + LCDDATA42_S02C7 : bit absolute LCDDATA42.2; + LCDDATA42_S01C7 : bit absolute LCDDATA42.1; + LCDDATA42_S00C7 : bit absolute LCDDATA42.0; + LCDDATA43 : byte absolute $1D43; + LCDDATA43_S15C7 : bit absolute LCDDATA43.7; + LCDDATA43_S14C7 : bit absolute LCDDATA43.6; + LCDDATA43_S13C7 : bit absolute LCDDATA43.5; + LCDDATA43_S12C7 : bit absolute LCDDATA43.4; + LCDDATA43_S11C7 : bit absolute LCDDATA43.3; + LCDDATA43_S10C7 : bit absolute LCDDATA43.2; + LCDDATA43_S09C7 : bit absolute LCDDATA43.1; + LCDDATA43_S08C7 : bit absolute LCDDATA43.0; + LCDDATA44 : byte absolute $1D44; + LCDDATA44_S23C7 : bit absolute LCDDATA44.7; + LCDDATA44_S22C7 : bit absolute LCDDATA44.6; + LCDDATA44_S21C7 : bit absolute LCDDATA44.5; + LCDDATA44_S20C7 : bit absolute LCDDATA44.4; + LCDDATA44_S19C7 : bit absolute LCDDATA44.3; + LCDDATA44_S18C7 : bit absolute LCDDATA44.2; + LCDDATA44_S17C7 : bit absolute LCDDATA44.1; + LCDDATA44_S16C7 : bit absolute LCDDATA44.0; + LCDDATA45 : byte absolute $1D45; + LCDDATA45_S31C7 : bit absolute LCDDATA45.7; + LCDDATA45_S30C7 : bit absolute LCDDATA45.6; + LCDDATA45_S29C7 : bit absolute LCDDATA45.5; + LCDDATA45_S28C7 : bit absolute LCDDATA45.4; + LCDDATA45_S27C7 : bit absolute LCDDATA45.3; + LCDDATA45_S26C7 : bit absolute LCDDATA45.2; + LCDDATA45_S25C7 : bit absolute LCDDATA45.1; + LCDDATA45_S24C7 : bit absolute LCDDATA45.0; + LCDDATA46 : byte absolute $1D46; + LCDDATA46_S39C7 : bit absolute LCDDATA46.7; + LCDDATA46_S38C7 : bit absolute LCDDATA46.6; + LCDDATA46_S37C7 : bit absolute LCDDATA46.5; + LCDDATA46_S36C7 : bit absolute LCDDATA46.4; + LCDDATA46_S35C7 : bit absolute LCDDATA46.3; + LCDDATA46_S34C7 : bit absolute LCDDATA46.2; + LCDDATA46_S33C7 : bit absolute LCDDATA46.1; + LCDDATA46_S32C7 : bit absolute LCDDATA46.0; + LCDDATA47 : byte absolute $1D47; + LCDDATA47_S45C7 : bit absolute LCDDATA47.5; + LCDDATA47_S44C7 : bit absolute LCDDATA47.4; + LCDDATA47_S43C7 : bit absolute LCDDATA47.3; + LCDDATA47_S42C7 : bit absolute LCDDATA47.2; + LCDDATA47_S41C7 : bit absolute LCDDATA47.1; + LCDDATA47_S40C7 : bit absolute LCDDATA47.0; + CLCDATA : byte absolute $1E0F; + CLCDATA_MLC4OUT : bit absolute CLCDATA.3; + CLCDATA_MLC3OUT : bit absolute CLCDATA.2; + CLCDATA_MLC2OUT : bit absolute CLCDATA.1; + CLCDATA_MLC1OUT : bit absolute CLCDATA.0; + CLC1CON : byte absolute $1E10; + CLC1CON_LC1EN : bit absolute CLC1CON.7; + CLC1CON_LC1OUT : bit absolute CLC1CON.5; + CLC1CON_LC1INTP : bit absolute CLC1CON.4; + CLC1CON_LC1INTN : bit absolute CLC1CON.3; + CLC1CON_LC1MODE2 : bit absolute CLC1CON.2; + CLC1CON_LC1MODE1 : bit absolute CLC1CON.1; + CLC1CON_LC1MODE0 : bit absolute CLC1CON.0; + CLC1POL : byte absolute $1E11; + CLC1POL_LC1POL : bit absolute CLC1POL.7; + CLC1POL_LC1G4POL : bit absolute CLC1POL.3; + CLC1POL_LC1G3POL : bit absolute CLC1POL.2; + CLC1POL_LC1G2POL : bit absolute CLC1POL.1; + CLC1POL_LC1G1POL : bit absolute CLC1POL.0; + CLC1SEL0 : byte absolute $1E12; + CLC1SEL0_LC1D1S7 : bit absolute CLC1SEL0.7; + CLC1SEL0_LC1D1S6 : bit absolute CLC1SEL0.6; + CLC1SEL0_LC1D1S5 : bit absolute CLC1SEL0.5; + CLC1SEL0_LC1D1S4 : bit absolute CLC1SEL0.4; + CLC1SEL0_LC1D1S3 : bit absolute CLC1SEL0.3; + CLC1SEL0_LC1D1S2 : bit absolute CLC1SEL0.2; + CLC1SEL0_LC1D1S1 : bit absolute CLC1SEL0.1; + CLC1SEL0_LC1D1S0 : bit absolute CLC1SEL0.0; + CLC1SEL1 : byte absolute $1E13; + CLC1SEL1_LC1D2S7 : bit absolute CLC1SEL1.7; + CLC1SEL1_LC1D2S6 : bit absolute CLC1SEL1.6; + CLC1SEL1_LC1D2S5 : bit absolute CLC1SEL1.5; + CLC1SEL1_LC1D2S4 : bit absolute CLC1SEL1.4; + CLC1SEL1_LC1D2S3 : bit absolute CLC1SEL1.3; + CLC1SEL1_LC1D2S2 : bit absolute CLC1SEL1.2; + CLC1SEL1_LC1D2S1 : bit absolute CLC1SEL1.1; + CLC1SEL1_LC1D2S0 : bit absolute CLC1SEL1.0; + CLC1SEL2 : byte absolute $1E14; + CLC1SEL2_LC1D3S7 : bit absolute CLC1SEL2.7; + CLC1SEL2_LC1D3S6 : bit absolute CLC1SEL2.6; + CLC1SEL2_LC1D3S5 : bit absolute CLC1SEL2.5; + CLC1SEL2_LC1D3S4 : bit absolute CLC1SEL2.4; + CLC1SEL2_LC1D3S3 : bit absolute CLC1SEL2.3; + CLC1SEL2_LC1D3S2 : bit absolute CLC1SEL2.2; + CLC1SEL2_LC1D3S1 : bit absolute CLC1SEL2.1; + CLC1SEL2_LC1D3S0 : bit absolute CLC1SEL2.0; + CLC1SEL3 : byte absolute $1E15; + CLC1SEL3_LC1D4S7 : bit absolute CLC1SEL3.7; + CLC1SEL3_LC1D4S6 : bit absolute CLC1SEL3.6; + CLC1SEL3_LC1D4S5 : bit absolute CLC1SEL3.5; + CLC1SEL3_LC1D4S4 : bit absolute CLC1SEL3.4; + CLC1SEL3_LC1D4S3 : bit absolute CLC1SEL3.3; + CLC1SEL3_LC1D4S2 : bit absolute CLC1SEL3.2; + CLC1SEL3_LC1D4S1 : bit absolute CLC1SEL3.1; + CLC1SEL3_LC1D4S0 : bit absolute CLC1SEL3.0; + CLC1GLS0 : byte absolute $1E16; + CLC1GLS0_LC1G1D4T : bit absolute CLC1GLS0.7; + CLC1GLS0_LC1G1D4N : bit absolute CLC1GLS0.6; + CLC1GLS0_LC1G1D3T : bit absolute CLC1GLS0.5; + CLC1GLS0_LC1G1D3N : bit absolute CLC1GLS0.4; + CLC1GLS0_LC1G1D2T : bit absolute CLC1GLS0.3; + CLC1GLS0_LC1G1D2N : bit absolute CLC1GLS0.2; + CLC1GLS0_LC1G1D1T : bit absolute CLC1GLS0.1; + CLC1GLS0_LC1G1D1N : bit absolute CLC1GLS0.0; + CLC1GLS1 : byte absolute $1E17; + CLC1GLS1_LC1G2D4T : bit absolute CLC1GLS1.7; + CLC1GLS1_LC1G2D4N : bit absolute CLC1GLS1.6; + CLC1GLS1_LC1G2D3T : bit absolute CLC1GLS1.5; + CLC1GLS1_LC1G2D3N : bit absolute CLC1GLS1.4; + CLC1GLS1_LC1G2D2T : bit absolute CLC1GLS1.3; + CLC1GLS1_LC1G2D2N : bit absolute CLC1GLS1.2; + CLC1GLS1_LC1G2D1T : bit absolute CLC1GLS1.1; + CLC1GLS1_LC1G2D1N : bit absolute CLC1GLS1.0; + CLC1GLS2 : byte absolute $1E18; + CLC1GLS2_LC1G3D4T : bit absolute CLC1GLS2.7; + CLC1GLS2_LC1G3D4N : bit absolute CLC1GLS2.6; + CLC1GLS2_LC1G3D3T : bit absolute CLC1GLS2.5; + CLC1GLS2_LC1G3D3N : bit absolute CLC1GLS2.4; + CLC1GLS2_LC1G3D2T : bit absolute CLC1GLS2.3; + CLC1GLS2_LC1G3D2N : bit absolute CLC1GLS2.2; + CLC1GLS2_LC1G3D1T : bit absolute CLC1GLS2.1; + CLC1GLS2_LC1G3D1N : bit absolute CLC1GLS2.0; + CLC1GLS3 : byte absolute $1E19; + CLC1GLS3_LC1G4D4T : bit absolute CLC1GLS3.7; + CLC1GLS3_LC1G4D4N : bit absolute CLC1GLS3.6; + CLC1GLS3_LC1G4D3T : bit absolute CLC1GLS3.5; + CLC1GLS3_LC1G4D3N : bit absolute CLC1GLS3.4; + CLC1GLS3_LC1G4D2T : bit absolute CLC1GLS3.3; + CLC1GLS3_LC1G4D2N : bit absolute CLC1GLS3.2; + CLC1GLS3_LC1G4D1T : bit absolute CLC1GLS3.1; + CLC1GLS3_LC1G4D1N : bit absolute CLC1GLS3.0; + CLC2CON : byte absolute $1E1A; + CLC2CON_LC2EN : bit absolute CLC2CON.7; + CLC2CON_LC2OUT : bit absolute CLC2CON.5; + CLC2CON_LC2INTP : bit absolute CLC2CON.4; + CLC2CON_LC2INTN : bit absolute CLC2CON.3; + CLC2CON_LC2MODE2 : bit absolute CLC2CON.2; + CLC2CON_LC2MODE1 : bit absolute CLC2CON.1; + CLC2CON_LC2MODE0 : bit absolute CLC2CON.0; + CLC2POL : byte absolute $1E1B; + CLC2POL_LC2POL : bit absolute CLC2POL.7; + CLC2POL_LC2G4POL : bit absolute CLC2POL.3; + CLC2POL_LC2G3POL : bit absolute CLC2POL.2; + CLC2POL_LC2G2POL : bit absolute CLC2POL.1; + CLC2POL_LC2G1POL : bit absolute CLC2POL.0; + CLC2SEL0 : byte absolute $1E1C; + CLC2SEL0_LC2D1S7 : bit absolute CLC2SEL0.7; + CLC2SEL0_LC2D1S6 : bit absolute CLC2SEL0.6; + CLC2SEL0_LC2D1S5 : bit absolute CLC2SEL0.5; + CLC2SEL0_LC2D1S4 : bit absolute CLC2SEL0.4; + CLC2SEL0_LC2D1S3 : bit absolute CLC2SEL0.3; + CLC2SEL0_LC2D1S2 : bit absolute CLC2SEL0.2; + CLC2SEL0_LC2D1S1 : bit absolute CLC2SEL0.1; + CLC2SEL0_LC2D1S0 : bit absolute CLC2SEL0.0; + CLC2SEL1 : byte absolute $1E1D; + CLC2SEL1_LC2D2S7 : bit absolute CLC2SEL1.7; + CLC2SEL1_LC2D2S6 : bit absolute CLC2SEL1.6; + CLC2SEL1_LC2D2S5 : bit absolute CLC2SEL1.5; + CLC2SEL1_LC2D2S4 : bit absolute CLC2SEL1.4; + CLC2SEL1_LC2D2S3 : bit absolute CLC2SEL1.3; + CLC2SEL1_LC2D2S2 : bit absolute CLC2SEL1.2; + CLC2SEL1_LC2D2S1 : bit absolute CLC2SEL1.1; + CLC2SEL1_LC2D2S0 : bit absolute CLC2SEL1.0; + CLC2SEL2 : byte absolute $1E1E; + CLC2SEL2_LC2D3S7 : bit absolute CLC2SEL2.7; + CLC2SEL2_LC2D3S6 : bit absolute CLC2SEL2.6; + CLC2SEL2_LC2D3S5 : bit absolute CLC2SEL2.5; + CLC2SEL2_LC2D3S4 : bit absolute CLC2SEL2.4; + CLC2SEL2_LC2D3S3 : bit absolute CLC2SEL2.3; + CLC2SEL2_LC2D3S2 : bit absolute CLC2SEL2.2; + CLC2SEL2_LC2D3S1 : bit absolute CLC2SEL2.1; + CLC2SEL2_LC2D3S0 : bit absolute CLC2SEL2.0; + CLC2SEL3 : byte absolute $1E1F; + CLC2SEL3_LC2D4S7 : bit absolute CLC2SEL3.7; + CLC2SEL3_LC2D4S6 : bit absolute CLC2SEL3.6; + CLC2SEL3_LC2D4S5 : bit absolute CLC2SEL3.5; + CLC2SEL3_LC2D4S4 : bit absolute CLC2SEL3.4; + CLC2SEL3_LC2D4S3 : bit absolute CLC2SEL3.3; + CLC2SEL3_LC2D4S2 : bit absolute CLC2SEL3.2; + CLC2SEL3_LC2D4S1 : bit absolute CLC2SEL3.1; + CLC2SEL3_LC2D4S0 : bit absolute CLC2SEL3.0; + CLC2GLS0 : byte absolute $1E20; + CLC2GLS0_LC2G1D4T : bit absolute CLC2GLS0.7; + CLC2GLS0_LC2G1D4N : bit absolute CLC2GLS0.6; + CLC2GLS0_LC2G1D3T : bit absolute CLC2GLS0.5; + CLC2GLS0_LC2G1D3N : bit absolute CLC2GLS0.4; + CLC2GLS0_LC2G1D2T : bit absolute CLC2GLS0.3; + CLC2GLS0_LC2G1D2N : bit absolute CLC2GLS0.2; + CLC2GLS0_LC2G1D1T : bit absolute CLC2GLS0.1; + CLC2GLS0_LC2G1D1N : bit absolute CLC2GLS0.0; + CLC2GLS1 : byte absolute $1E21; + CLC2GLS1_LC2G2D4T : bit absolute CLC2GLS1.7; + CLC2GLS1_LC2G2D4N : bit absolute CLC2GLS1.6; + CLC2GLS1_LC2G2D3T : bit absolute CLC2GLS1.5; + CLC2GLS1_LC2G2D3N : bit absolute CLC2GLS1.4; + CLC2GLS1_LC2G2D2T : bit absolute CLC2GLS1.3; + CLC2GLS1_LC2G2D2N : bit absolute CLC2GLS1.2; + CLC2GLS1_LC2G2D1T : bit absolute CLC2GLS1.1; + CLC2GLS1_LC2G2D1N : bit absolute CLC2GLS1.0; + CLC2GLS2 : byte absolute $1E22; + CLC2GLS2_LC2G3D4T : bit absolute CLC2GLS2.7; + CLC2GLS2_LC2G3D4N : bit absolute CLC2GLS2.6; + CLC2GLS2_LC2G3D3T : bit absolute CLC2GLS2.5; + CLC2GLS2_LC2G3D3N : bit absolute CLC2GLS2.4; + CLC2GLS2_LC2G3D2T : bit absolute CLC2GLS2.3; + CLC2GLS2_LC2G3D2N : bit absolute CLC2GLS2.2; + CLC2GLS2_LC2G3D1T : bit absolute CLC2GLS2.1; + CLC2GLS2_LC2G3D1N : bit absolute CLC2GLS2.0; + CLC2GLS3 : byte absolute $1E23; + CLC2GLS3_LC2G4D4T : bit absolute CLC2GLS3.7; + CLC2GLS3_LC2G4D4N : bit absolute CLC2GLS3.6; + CLC2GLS3_LC2G4D3T : bit absolute CLC2GLS3.5; + CLC2GLS3_LC2G4D3N : bit absolute CLC2GLS3.4; + CLC2GLS3_LC2G4D2T : bit absolute CLC2GLS3.3; + CLC2GLS3_LC2G4D2N : bit absolute CLC2GLS3.2; + CLC2GLS3_LC2G4D1T : bit absolute CLC2GLS3.1; + CLC2GLS3_LC2G4D1N : bit absolute CLC2GLS3.0; + CLC3CON : byte absolute $1E24; + CLC3CON_LC3EN : bit absolute CLC3CON.7; + CLC3CON_LC3OUT : bit absolute CLC3CON.5; + CLC3CON_LC3INTP : bit absolute CLC3CON.4; + CLC3CON_LC3INTN : bit absolute CLC3CON.3; + CLC3CON_LC3MODE2 : bit absolute CLC3CON.2; + CLC3CON_LC3MODE1 : bit absolute CLC3CON.1; + CLC3CON_LC3MODE0 : bit absolute CLC3CON.0; + CLC3POL : byte absolute $1E25; + CLC3POL_LC3POL : bit absolute CLC3POL.7; + CLC3POL_LC3G4POL : bit absolute CLC3POL.3; + CLC3POL_LC3G3POL : bit absolute CLC3POL.2; + CLC3POL_LC3G2POL : bit absolute CLC3POL.1; + CLC3POL_LC3G1POL : bit absolute CLC3POL.0; + CLC3SEL0 : byte absolute $1E26; + CLC3SEL0_LC3D1S7 : bit absolute CLC3SEL0.7; + CLC3SEL0_LC3D1S6 : bit absolute CLC3SEL0.6; + CLC3SEL0_LC3D1S5 : bit absolute CLC3SEL0.5; + CLC3SEL0_LC3D1S4 : bit absolute CLC3SEL0.4; + CLC3SEL0_LC3D1S3 : bit absolute CLC3SEL0.3; + CLC3SEL0_LC3D1S2 : bit absolute CLC3SEL0.2; + CLC3SEL0_LC3D1S1 : bit absolute CLC3SEL0.1; + CLC3SEL0_LC3D1S0 : bit absolute CLC3SEL0.0; + CLC3SEL1 : byte absolute $1E27; + CLC3SEL1_LC3D2S7 : bit absolute CLC3SEL1.7; + CLC3SEL1_LC3D2S6 : bit absolute CLC3SEL1.6; + CLC3SEL1_LC3D2S5 : bit absolute CLC3SEL1.5; + CLC3SEL1_LC3D2S4 : bit absolute CLC3SEL1.4; + CLC3SEL1_LC3D2S3 : bit absolute CLC3SEL1.3; + CLC3SEL1_LC3D2S2 : bit absolute CLC3SEL1.2; + CLC3SEL1_LC3D2S1 : bit absolute CLC3SEL1.1; + CLC3SEL1_LC3D2S0 : bit absolute CLC3SEL1.0; + CLC3SEL2 : byte absolute $1E28; + CLC3SEL2_LC3D3S7 : bit absolute CLC3SEL2.7; + CLC3SEL2_LC3D3S6 : bit absolute CLC3SEL2.6; + CLC3SEL2_LC3D3S5 : bit absolute CLC3SEL2.5; + CLC3SEL2_LC3D3S4 : bit absolute CLC3SEL2.4; + CLC3SEL2_LC3D3S3 : bit absolute CLC3SEL2.3; + CLC3SEL2_LC3D3S2 : bit absolute CLC3SEL2.2; + CLC3SEL2_LC3D3S1 : bit absolute CLC3SEL2.1; + CLC3SEL2_LC3D3S0 : bit absolute CLC3SEL2.0; + CLC3SEL3 : byte absolute $1E29; + CLC3SEL3_LC3D4S7 : bit absolute CLC3SEL3.7; + CLC3SEL3_LC3D4S6 : bit absolute CLC3SEL3.6; + CLC3SEL3_LC3D4S5 : bit absolute CLC3SEL3.5; + CLC3SEL3_LC3D4S4 : bit absolute CLC3SEL3.4; + CLC3SEL3_LC3D4S3 : bit absolute CLC3SEL3.3; + CLC3SEL3_LC3D4S2 : bit absolute CLC3SEL3.2; + CLC3SEL3_LC3D4S1 : bit absolute CLC3SEL3.1; + CLC3SEL3_LC3D4S0 : bit absolute CLC3SEL3.0; + CLC3GLS0 : byte absolute $1E2A; + CLC3GLS0_LC3G1D4T : bit absolute CLC3GLS0.7; + CLC3GLS0_LC3G1D4N : bit absolute CLC3GLS0.6; + CLC3GLS0_LC3G1D3T : bit absolute CLC3GLS0.5; + CLC3GLS0_LC3G1D3N : bit absolute CLC3GLS0.4; + CLC3GLS0_LC3G1D2T : bit absolute CLC3GLS0.3; + CLC3GLS0_LC3G1D2N : bit absolute CLC3GLS0.2; + CLC3GLS0_LC3G1D1T : bit absolute CLC3GLS0.1; + CLC3GLS0_LC3G1D1N : bit absolute CLC3GLS0.0; + CLC3GLS1 : byte absolute $1E2B; + CLC3GLS1_LC3G2D4T : bit absolute CLC3GLS1.7; + CLC3GLS1_LC3G2D4N : bit absolute CLC3GLS1.6; + CLC3GLS1_LC3G2D3T : bit absolute CLC3GLS1.5; + CLC3GLS1_LC3G2D3N : bit absolute CLC3GLS1.4; + CLC3GLS1_LC3G2D2T : bit absolute CLC3GLS1.3; + CLC3GLS1_LC3G2D2N : bit absolute CLC3GLS1.2; + CLC3GLS1_LC3G2D1T : bit absolute CLC3GLS1.1; + CLC3GLS1_LC3G2D1N : bit absolute CLC3GLS1.0; + CLC3GLS2 : byte absolute $1E2C; + CLC3GLS2_LC3G3D4T : bit absolute CLC3GLS2.7; + CLC3GLS2_LC3G3D4N : bit absolute CLC3GLS2.6; + CLC3GLS2_LC3G3D3T : bit absolute CLC3GLS2.5; + CLC3GLS2_LC3G3D3N : bit absolute CLC3GLS2.4; + CLC3GLS2_LC3G3D2T : bit absolute CLC3GLS2.3; + CLC3GLS2_LC3G3D2N : bit absolute CLC3GLS2.2; + CLC3GLS2_LC3G3D1T : bit absolute CLC3GLS2.1; + CLC3GLS2_LC3G3D1N : bit absolute CLC3GLS2.0; + CLC3GLS3 : byte absolute $1E2D; + CLC3GLS3_LC3G4D4T : bit absolute CLC3GLS3.7; + CLC3GLS3_LC3G4D4N : bit absolute CLC3GLS3.6; + CLC3GLS3_LC3G4D3T : bit absolute CLC3GLS3.5; + CLC3GLS3_LC3G4D3N : bit absolute CLC3GLS3.4; + CLC3GLS3_LC3G4D2T : bit absolute CLC3GLS3.3; + CLC3GLS3_LC3G4D2N : bit absolute CLC3GLS3.2; + CLC3GLS3_LC3G4D1T : bit absolute CLC3GLS3.1; + CLC3GLS3_LC3G4D1N : bit absolute CLC3GLS3.0; + CLC4CON : byte absolute $1E2E; + CLC4CON_LC4EN : bit absolute CLC4CON.7; + CLC4CON_LC4OUT : bit absolute CLC4CON.5; + CLC4CON_LC4INTP : bit absolute CLC4CON.4; + CLC4CON_LC4INTN : bit absolute CLC4CON.3; + CLC4CON_LC4MODE2 : bit absolute CLC4CON.2; + CLC4CON_LC4MODE1 : bit absolute CLC4CON.1; + CLC4CON_LC4MODE0 : bit absolute CLC4CON.0; + CLC4POL : byte absolute $1E2F; + CLC4POL_LC4POL : bit absolute CLC4POL.7; + CLC4POL_LC4G4POL : bit absolute CLC4POL.3; + CLC4POL_LC4G3POL : bit absolute CLC4POL.2; + CLC4POL_LC4G2POL : bit absolute CLC4POL.1; + CLC4POL_LC4G1POL : bit absolute CLC4POL.0; + CLC4SEL0 : byte absolute $1E30; + CLC4SEL0_LC4D1S7 : bit absolute CLC4SEL0.7; + CLC4SEL0_LC4D1S6 : bit absolute CLC4SEL0.6; + CLC4SEL0_LC4D1S5 : bit absolute CLC4SEL0.5; + CLC4SEL0_LC4D1S4 : bit absolute CLC4SEL0.4; + CLC4SEL0_LC4D1S3 : bit absolute CLC4SEL0.3; + CLC4SEL0_LC4D1S2 : bit absolute CLC4SEL0.2; + CLC4SEL0_LC4D1S1 : bit absolute CLC4SEL0.1; + CLC4SEL0_LC4D1S0 : bit absolute CLC4SEL0.0; + CLC4SEL1 : byte absolute $1E31; + CLC4SEL1_LC4D2S7 : bit absolute CLC4SEL1.7; + CLC4SEL1_LC4D2S6 : bit absolute CLC4SEL1.6; + CLC4SEL1_LC4D2S5 : bit absolute CLC4SEL1.5; + CLC4SEL1_LC4D2S4 : bit absolute CLC4SEL1.4; + CLC4SEL1_LC4D2S3 : bit absolute CLC4SEL1.3; + CLC4SEL1_LC4D2S2 : bit absolute CLC4SEL1.2; + CLC4SEL1_LC4D2S1 : bit absolute CLC4SEL1.1; + CLC4SEL1_LC4D2S0 : bit absolute CLC4SEL1.0; + CLC4SEL2 : byte absolute $1E32; + CLC4SEL2_LC4D3S7 : bit absolute CLC4SEL2.7; + CLC4SEL2_LC4D3S6 : bit absolute CLC4SEL2.6; + CLC4SEL2_LC4D3S5 : bit absolute CLC4SEL2.5; + CLC4SEL2_LC4D3S4 : bit absolute CLC4SEL2.4; + CLC4SEL2_LC4D3S3 : bit absolute CLC4SEL2.3; + CLC4SEL2_LC4D3S2 : bit absolute CLC4SEL2.2; + CLC4SEL2_LC4D3S1 : bit absolute CLC4SEL2.1; + CLC4SEL2_LC4D3S0 : bit absolute CLC4SEL2.0; + CLC4SEL3 : byte absolute $1E33; + CLC4SEL3_LC4D4S7 : bit absolute CLC4SEL3.7; + CLC4SEL3_LC4D4S6 : bit absolute CLC4SEL3.6; + CLC4SEL3_LC4D4S5 : bit absolute CLC4SEL3.5; + CLC4SEL3_LC4D4S4 : bit absolute CLC4SEL3.4; + CLC4SEL3_LC4D4S3 : bit absolute CLC4SEL3.3; + CLC4SEL3_LC4D4S2 : bit absolute CLC4SEL3.2; + CLC4SEL3_LC4D4S1 : bit absolute CLC4SEL3.1; + CLC4SEL3_LC4D4S0 : bit absolute CLC4SEL3.0; + CLC4GLS0 : byte absolute $1E34; + CLC4GLS0_LC4G1D4T : bit absolute CLC4GLS0.7; + CLC4GLS0_LC4G1D4N : bit absolute CLC4GLS0.6; + CLC4GLS0_LC4G1D3T : bit absolute CLC4GLS0.5; + CLC4GLS0_LC4G1D3N : bit absolute CLC4GLS0.4; + CLC4GLS0_LC4G1D2T : bit absolute CLC4GLS0.3; + CLC4GLS0_LC4G1D2N : bit absolute CLC4GLS0.2; + CLC4GLS0_LC4G1D1T : bit absolute CLC4GLS0.1; + CLC4GLS0_LC4G1D1N : bit absolute CLC4GLS0.0; + CLC4GLS1 : byte absolute $1E35; + CLC4GLS1_LC4G2D4T : bit absolute CLC4GLS1.7; + CLC4GLS1_LC4G2D4N : bit absolute CLC4GLS1.6; + CLC4GLS1_LC4G2D3T : bit absolute CLC4GLS1.5; + CLC4GLS1_LC4G2D3N : bit absolute CLC4GLS1.4; + CLC4GLS1_LC4G2D2T : bit absolute CLC4GLS1.3; + CLC4GLS1_LC4G2D2N : bit absolute CLC4GLS1.2; + CLC4GLS1_LC4G2D1T : bit absolute CLC4GLS1.1; + CLC4GLS1_LC4G2D1N : bit absolute CLC4GLS1.0; + CLC4GLS2 : byte absolute $1E36; + CLC4GLS2_LC4G3D4T : bit absolute CLC4GLS2.7; + CLC4GLS2_LC4G3D4N : bit absolute CLC4GLS2.6; + CLC4GLS2_LC4G3D3T : bit absolute CLC4GLS2.5; + CLC4GLS2_LC4G3D3N : bit absolute CLC4GLS2.4; + CLC4GLS2_LC4G3D2T : bit absolute CLC4GLS2.3; + CLC4GLS2_LC4G3D2N : bit absolute CLC4GLS2.2; + CLC4GLS2_LC4G3D1T : bit absolute CLC4GLS2.1; + CLC4GLS2_LC4G3D1N : bit absolute CLC4GLS2.0; + CLC4GLS3 : byte absolute $1E37; + CLC4GLS3_LC4G4D4T : bit absolute CLC4GLS3.7; + CLC4GLS3_LC4G4D4N : bit absolute CLC4GLS3.6; + CLC4GLS3_LC4G4D3T : bit absolute CLC4GLS3.5; + CLC4GLS3_LC4G4D3N : bit absolute CLC4GLS3.4; + CLC4GLS3_LC4G4D2T : bit absolute CLC4GLS3.3; + CLC4GLS3_LC4G4D2N : bit absolute CLC4GLS3.2; + CLC4GLS3_LC4G4D1T : bit absolute CLC4GLS3.1; + CLC4GLS3_LC4G4D1N : bit absolute CLC4GLS3.0; + RF0PPS : byte absolute $1E38; + RF0PPS_RF0PPS5 : bit absolute RF0PPS.5; + RF0PPS_RF0PPS4 : bit absolute RF0PPS.4; + RF0PPS_RF0PPS3 : bit absolute RF0PPS.3; + RF0PPS_RF0PPS2 : bit absolute RF0PPS.2; + RF0PPS_RF0PPS1 : bit absolute RF0PPS.1; + RF0PPS_RF0PPS0 : bit absolute RF0PPS.0; + RF1PPS : byte absolute $1E39; + RF1PPS_RF1PPS5 : bit absolute RF1PPS.5; + RF1PPS_RF1PPS4 : bit absolute RF1PPS.4; + RF1PPS_RF1PPS3 : bit absolute RF1PPS.3; + RF1PPS_RF1PPS2 : bit absolute RF1PPS.2; + RF1PPS_RF1PPS1 : bit absolute RF1PPS.1; + RF1PPS_RF1PPS0 : bit absolute RF1PPS.0; + RF2PPS : byte absolute $1E3A; + RF2PPS_RF2PPS5 : bit absolute RF2PPS.5; + RF2PPS_RF2PPS4 : bit absolute RF2PPS.4; + RF2PPS_RF2PPS3 : bit absolute RF2PPS.3; + RF2PPS_RF2PPS2 : bit absolute RF2PPS.2; + RF2PPS_RF2PPS1 : bit absolute RF2PPS.1; + RF2PPS_RF2PPS0 : bit absolute RF2PPS.0; + RF3PPS : byte absolute $1E3B; + RF3PPS_RF3PPS5 : bit absolute RF3PPS.5; + RF3PPS_RF3PPS4 : bit absolute RF3PPS.4; + RF3PPS_RF3PPS3 : bit absolute RF3PPS.3; + RF3PPS_RF3PPS2 : bit absolute RF3PPS.2; + RF3PPS_RF3PPS1 : bit absolute RF3PPS.1; + RF3PPS_RF3PPS0 : bit absolute RF3PPS.0; + RF4PPS : byte absolute $1E3C; + RF4PPS_RF4PPS5 : bit absolute RF4PPS.5; + RF4PPS_RF4PPS4 : bit absolute RF4PPS.4; + RF4PPS_RF4PPS3 : bit absolute RF4PPS.3; + RF4PPS_RF4PPS2 : bit absolute RF4PPS.2; + RF4PPS_RF4PPS1 : bit absolute RF4PPS.1; + RF4PPS_RF4PPS0 : bit absolute RF4PPS.0; + RF5PPS : byte absolute $1E3D; + RF5PPS_RF5PPS5 : bit absolute RF5PPS.5; + RF5PPS_RF5PPS4 : bit absolute RF5PPS.4; + RF5PPS_RF5PPS3 : bit absolute RF5PPS.3; + RF5PPS_RF5PPS2 : bit absolute RF5PPS.2; + RF5PPS_RF5PPS1 : bit absolute RF5PPS.1; + RF5PPS_RF5PPS0 : bit absolute RF5PPS.0; + RF6PPS : byte absolute $1E3E; + RF6PPS_RF6PPS5 : bit absolute RF6PPS.5; + RF6PPS_RF6PPS4 : bit absolute RF6PPS.4; + RF6PPS_RF6PPS3 : bit absolute RF6PPS.3; + RF6PPS_RF6PPS2 : bit absolute RF6PPS.2; + RF6PPS_RF6PPS1 : bit absolute RF6PPS.1; + RF6PPS_RF6PPS0 : bit absolute RF6PPS.0; + RF7PPS : byte absolute $1E3F; + RF7PPS_RF7PPS5 : bit absolute RF7PPS.5; + RF7PPS_RF7PPS4 : bit absolute RF7PPS.4; + RF7PPS_RF7PPS3 : bit absolute RF7PPS.3; + RF7PPS_RF7PPS2 : bit absolute RF7PPS.2; + RF7PPS_RF7PPS1 : bit absolute RF7PPS.1; + RF7PPS_RF7PPS0 : bit absolute RF7PPS.0; + RG0PPS : byte absolute $1E40; + RG0PPS_RG0PPS5 : bit absolute RG0PPS.5; + RG0PPS_RG0PPS4 : bit absolute RG0PPS.4; + RG0PPS_RG0PPS3 : bit absolute RG0PPS.3; + RG0PPS_RG0PPS2 : bit absolute RG0PPS.2; + RG0PPS_RG0PPS1 : bit absolute RG0PPS.1; + RG0PPS_RG0PPS0 : bit absolute RG0PPS.0; + RG1PPS : byte absolute $1E41; + RG1PPS_RG1PPS5 : bit absolute RG1PPS.5; + RG1PPS_RG1PPS4 : bit absolute RG1PPS.4; + RG1PPS_RG1PPS3 : bit absolute RG1PPS.3; + RG1PPS_RG1PPS2 : bit absolute RG1PPS.2; + RG1PPS_RG1PPS1 : bit absolute RG1PPS.1; + RG1PPS_RG1PPS0 : bit absolute RG1PPS.0; + RG2PPS : byte absolute $1E42; + RG2PPS_RG2PPS5 : bit absolute RG2PPS.5; + RG2PPS_RG2PPS4 : bit absolute RG2PPS.4; + RG2PPS_RG2PPS3 : bit absolute RG2PPS.3; + RG2PPS_RG2PPS2 : bit absolute RG2PPS.2; + RG2PPS_RG2PPS1 : bit absolute RG2PPS.1; + RG2PPS_RG2PPS0 : bit absolute RG2PPS.0; + RG3PPS : byte absolute $1E43; + RG3PPS_RG3PPS5 : bit absolute RG3PPS.5; + RG3PPS_RG3PPS4 : bit absolute RG3PPS.4; + RG3PPS_RG3PPS3 : bit absolute RG3PPS.3; + RG3PPS_RG3PPS2 : bit absolute RG3PPS.2; + RG3PPS_RG3PPS1 : bit absolute RG3PPS.1; + RG3PPS_RG3PPS0 : bit absolute RG3PPS.0; + RG4PPS : byte absolute $1E44; + RG4PPS_RG4PPS5 : bit absolute RG4PPS.5; + RG4PPS_RG4PPS4 : bit absolute RG4PPS.4; + RG4PPS_RG4PPS3 : bit absolute RG4PPS.3; + RG4PPS_RG4PPS2 : bit absolute RG4PPS.2; + RG4PPS_RG4PPS1 : bit absolute RG4PPS.1; + RG4PPS_RG4PPS0 : bit absolute RG4PPS.0; + RG6PPS : byte absolute $1E46; + RG6PPS_RG6PPS5 : bit absolute RG6PPS.5; + RG6PPS_RG6PPS4 : bit absolute RG6PPS.4; + RG6PPS_RG6PPS3 : bit absolute RG6PPS.3; + RG6PPS_RG6PPS2 : bit absolute RG6PPS.2; + RG6PPS_RG6PPS1 : bit absolute RG6PPS.1; + RG6PPS_RG6PPS0 : bit absolute RG6PPS.0; + RG7PPS : byte absolute $1E47; + RG7PPS_RG7PPS5 : bit absolute RG7PPS.5; + RG7PPS_RG7PPS4 : bit absolute RG7PPS.4; + RG7PPS_RG7PPS3 : bit absolute RG7PPS.3; + RG7PPS_RG7PPS2 : bit absolute RG7PPS.2; + RG7PPS_RG7PPS1 : bit absolute RG7PPS.1; + RG7PPS_RG7PPS0 : bit absolute RG7PPS.0; + RH0PPS : byte absolute $1E48; + RH0PPS_RH0PPS5 : bit absolute RH0PPS.5; + RH0PPS_RH0PPS4 : bit absolute RH0PPS.4; + RH0PPS_RH0PPS3 : bit absolute RH0PPS.3; + RH0PPS_RH0PPS2 : bit absolute RH0PPS.2; + RH0PPS_RH0PPS1 : bit absolute RH0PPS.1; + RH0PPS_RH0PPS0 : bit absolute RH0PPS.0; + RH1PPS : byte absolute $1E49; + RH1PPS_RH1PPS5 : bit absolute RH1PPS.5; + RH1PPS_RH1PPS4 : bit absolute RH1PPS.4; + RH1PPS_RH1PPS3 : bit absolute RH1PPS.3; + RH1PPS_RH1PPS2 : bit absolute RH1PPS.2; + RH1PPS_RH1PPS1 : bit absolute RH1PPS.1; + RH1PPS_RH1PPS0 : bit absolute RH1PPS.0; + RH2PPS : byte absolute $1E4A; + RH2PPS_RH2PPS5 : bit absolute RH2PPS.5; + RH2PPS_RH2PPS4 : bit absolute RH2PPS.4; + RH2PPS_RH2PPS3 : bit absolute RH2PPS.3; + RH2PPS_RH2PPS2 : bit absolute RH2PPS.2; + RH2PPS_RH2PPS1 : bit absolute RH2PPS.1; + RH2PPS_RH2PPS0 : bit absolute RH2PPS.0; + RH3PPS : byte absolute $1E4B; + RH3PPS_RH3PPS5 : bit absolute RH3PPS.5; + RH3PPS_RH3PPS4 : bit absolute RH3PPS.4; + RH3PPS_RH3PPS3 : bit absolute RH3PPS.3; + RH3PPS_RH3PPS2 : bit absolute RH3PPS.2; + RH3PPS_RH3PPS1 : bit absolute RH3PPS.1; + RH3PPS_RH3PPS0 : bit absolute RH3PPS.0; + ANSELF : byte absolute $1E50; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + WPUF : byte absolute $1E51; + WPUF_WPUF7 : bit absolute WPUF.7; + WPUF_WPUF6 : bit absolute WPUF.6; + WPUF_WPUF5 : bit absolute WPUF.5; + WPUF_WPUF4 : bit absolute WPUF.4; + WPUF_WPUF3 : bit absolute WPUF.3; + WPUF_WPUF2 : bit absolute WPUF.2; + WPUF_WPUF1 : bit absolute WPUF.1; + WPUF_WPUF0 : bit absolute WPUF.0; + ODCONF : byte absolute $1E52; + ODCONF_ODCF7 : bit absolute ODCONF.7; + ODCONF_ODCF6 : bit absolute ODCONF.6; + ODCONF_ODCF5 : bit absolute ODCONF.5; + ODCONF_ODCF4 : bit absolute ODCONF.4; + ODCONF_ODCF3 : bit absolute ODCONF.3; + ODCONF_ODCF2 : bit absolute ODCONF.2; + ODCONF_ODCF1 : bit absolute ODCONF.1; + ODCONF_ODCF0 : bit absolute ODCONF.0; + SLRCONF : byte absolute $1E53; + SLRCONF_SLRF7 : bit absolute SLRCONF.7; + SLRCONF_SLRF6 : bit absolute SLRCONF.6; + SLRCONF_SLRF5 : bit absolute SLRCONF.5; + SLRCONF_SLRF4 : bit absolute SLRCONF.4; + SLRCONF_SLRF3 : bit absolute SLRCONF.3; + SLRCONF_SLRF2 : bit absolute SLRCONF.2; + SLRCONF_SLRF1 : bit absolute SLRCONF.1; + SLRCONF_SLRF0 : bit absolute SLRCONF.0; + INLVLF : byte absolute $1E54; + INLVLF_INLVLF7 : bit absolute INLVLF.7; + INLVLF_INLVLF6 : bit absolute INLVLF.6; + INLVLF_INLVLF5 : bit absolute INLVLF.5; + INLVLF_INLVLF4 : bit absolute INLVLF.4; + INLVLF_INLVLF3 : bit absolute INLVLF.3; + INLVLF_INLVLF2 : bit absolute INLVLF.2; + INLVLF_INLVLF1 : bit absolute INLVLF.1; + INLVLF_INLVLF0 : bit absolute INLVLF.0; + HIDRVF : byte absolute $1E55; + HIDRVF_HIDF7 : bit absolute HIDRVF.7; + ANSELG : byte absolute $1E5B; + ANSELG_ANSG7 : bit absolute ANSELG.7; + ANSELG_ANSG6 : bit absolute ANSELG.6; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + ANSELG_ANSG0 : bit absolute ANSELG.0; + WPUG : byte absolute $1E5C; + WPUG_WPUG7 : bit absolute WPUG.7; + WPUG_WPUG6 : bit absolute WPUG.6; + WPUG_WPUG5 : bit absolute WPUG.5; + WPUG_WPUG4 : bit absolute WPUG.4; + WPUG_WPUG3 : bit absolute WPUG.3; + WPUG_WPUG2 : bit absolute WPUG.2; + WPUG_WPUG1 : bit absolute WPUG.1; + WPUG_WPUG0 : bit absolute WPUG.0; + ODCONG : byte absolute $1E5D; + ODCONG_ODCG7 : bit absolute ODCONG.7; + ODCONG_ODCG6 : bit absolute ODCONG.6; + ODCONG_ODCG4 : bit absolute ODCONG.4; + ODCONG_ODCG3 : bit absolute ODCONG.3; + ODCONG_ODCG2 : bit absolute ODCONG.2; + ODCONG_ODCG1 : bit absolute ODCONG.1; + ODCONG_ODCG0 : bit absolute ODCONG.0; + SLRCONG : byte absolute $1E5E; + SLRCONG_SLRG7 : bit absolute SLRCONG.7; + SLRCONG_SLRG6 : bit absolute SLRCONG.6; + SLRCONG_SLRG4 : bit absolute SLRCONG.4; + SLRCONG_SLRG3 : bit absolute SLRCONG.3; + SLRCONG_SLRG2 : bit absolute SLRCONG.2; + SLRCONG_SLRG1 : bit absolute SLRCONG.1; + SLRCONG_SLRG0 : bit absolute SLRCONG.0; + INLVLG : byte absolute $1E5F; + INLVLG_INLVLG7 : bit absolute INLVLG.7; + INLVLG_INLVLG6 : bit absolute INLVLG.6; + INLVLG_INLVLG5 : bit absolute INLVLG.5; + INLVLG_INLVLG4 : bit absolute INLVLG.4; + INLVLG_INLVLG3 : bit absolute INLVLG.3; + INLVLG_INLVLG2 : bit absolute INLVLG.2; + INLVLG_INLVLG1 : bit absolute INLVLG.1; + INLVLG_INLVLG0 : bit absolute INLVLG.0; + IOCGP : byte absolute $1E60; + IOCGP_IOCGP5 : bit absolute IOCGP.5; + IOCGN : byte absolute $1E61; + IOCGN_IOCGN5 : bit absolute IOCGN.5; + IOCGF : byte absolute $1E62; + IOCGF_IOCGF5 : bit absolute IOCGF.5; + WPUH : byte absolute $1E67; + WPUH_WPUH3 : bit absolute WPUH.3; + WPUH_WPUH2 : bit absolute WPUH.2; + WPUH_WPUH1 : bit absolute WPUH.1; + WPUH_WPUH0 : bit absolute WPUH.0; + ODCONH : byte absolute $1E68; + ODCONH_ODCH3 : bit absolute ODCONH.3; + ODCONH_ODCH2 : bit absolute ODCONH.2; + ODCONH_ODCH1 : bit absolute ODCONH.1; + ODCONH_ODCH0 : bit absolute ODCONH.0; + SLRCONH : byte absolute $1E69; + SLRCONH_SLRH3 : bit absolute SLRCONH.3; + SLRCONH_SLRH2 : bit absolute SLRCONH.2; + SLRCONH_SLRH1 : bit absolute SLRCONH.1; + SLRCONH_SLRH0 : bit absolute SLRCONH.0; + INLVLH : byte absolute $1E6A; + INLVLH_INLVLH3 : bit absolute INLVLH.3; + INLVLH_INLVLH2 : bit absolute INLVLH.2; + INLVLH_INLVLH1 : bit absolute INLVLH.1; + INLVLH_INLVLH0 : bit absolute INLVLH.0; + PPSLOCK : byte absolute $1E8F; + PPSLOCK_PPSLOCKED : bit absolute PPSLOCK.0; + INTPPS : byte absolute $1E90; + INTPPS_INTPPS5 : bit absolute INTPPS.5; + INTPPS_INTPPS4 : bit absolute INTPPS.4; + INTPPS_INTPPS3 : bit absolute INTPPS.3; + INTPPS_INTPPS2 : bit absolute INTPPS.2; + INTPPS_INTPPS1 : bit absolute INTPPS.1; + INTPPS_INTPPS0 : bit absolute INTPPS.0; + T0CKIPPS : byte absolute $1E91; + T0CKIPPS_T0CKIPPS5 : bit absolute T0CKIPPS.5; + T0CKIPPS_T0CKIPPS4 : bit absolute T0CKIPPS.4; + T0CKIPPS_T0CKIPPS3 : bit absolute T0CKIPPS.3; + T0CKIPPS_T0CKIPPS2 : bit absolute T0CKIPPS.2; + T0CKIPPS_T0CKIPPS1 : bit absolute T0CKIPPS.1; + T0CKIPPS_T0CKIPPS0 : bit absolute T0CKIPPS.0; + T1CKIPPS : byte absolute $1E92; + T1CKIPPS_T1CKIPPS5 : bit absolute T1CKIPPS.5; + T1CKIPPS_T1CKIPPS4 : bit absolute T1CKIPPS.4; + T1CKIPPS_T1CKIPPS3 : bit absolute T1CKIPPS.3; + T1CKIPPS_T1CKIPPS2 : bit absolute T1CKIPPS.2; + T1CKIPPS_T1CKIPPS1 : bit absolute T1CKIPPS.1; + T1CKIPPS_T1CKIPPS0 : bit absolute T1CKIPPS.0; + T1GPPS : byte absolute $1E93; + T1GPPS_T1GPPS5 : bit absolute T1GPPS.5; + T1GPPS_T1GPPS4 : bit absolute T1GPPS.4; + T1GPPS_T1GPPS3 : bit absolute T1GPPS.3; + T1GPPS_T1GPPS2 : bit absolute T1GPPS.2; + T1GPPS_T1GPPS1 : bit absolute T1GPPS.1; + T1GPPS_T1GPPS0 : bit absolute T1GPPS.0; + T2INPPS : byte absolute $1E9C; + T2INPPS_T2INPPS5 : bit absolute T2INPPS.5; + T2INPPS_T2INPPS4 : bit absolute T2INPPS.4; + T2INPPS_T2INPPS3 : bit absolute T2INPPS.3; + T2INPPS_T2INPPS2 : bit absolute T2INPPS.2; + T2INPPS_T2INPPS1 : bit absolute T2INPPS.1; + T2INPPS_T2INPPS0 : bit absolute T2INPPS.0; + T4INPPS : byte absolute $1E9D; + T4INPPS_T4INPPS5 : bit absolute T4INPPS.5; + T4INPPS_T4INPPS4 : bit absolute T4INPPS.4; + T4INPPS_T4INPPS3 : bit absolute T4INPPS.3; + T4INPPS_T4INPPS2 : bit absolute T4INPPS.2; + T4INPPS_T4INPPS1 : bit absolute T4INPPS.1; + T4INPPS_T4INPPS0 : bit absolute T4INPPS.0; + CCP1PPS : byte absolute $1EA1; + CCP1PPS_CCP1PPS5 : bit absolute CCP1PPS.5; + CCP1PPS_CCP1PPS4 : bit absolute CCP1PPS.4; + CCP1PPS_CCP1PPS3 : bit absolute CCP1PPS.3; + CCP1PPS_CCP1PPS2 : bit absolute CCP1PPS.2; + CCP1PPS_CCP1PPS1 : bit absolute CCP1PPS.1; + CCP1PPS_CCP1PPS0 : bit absolute CCP1PPS.0; + CCP2PPS : byte absolute $1EA2; + CCP2PPS_CCP2PPS5 : bit absolute CCP2PPS.5; + CCP2PPS_CCP2PPS4 : bit absolute CCP2PPS.4; + CCP2PPS_CCP2PPS3 : bit absolute CCP2PPS.3; + CCP2PPS_CCP2PPS2 : bit absolute CCP2PPS.2; + CCP2PPS_CCP2PPS1 : bit absolute CCP2PPS.1; + CCP2PPS_CCP2PPS0 : bit absolute CCP2PPS.0; + SMT1WINPPS : byte absolute $1EA9; + SMT1WINPPS_SMT1WINPPS5 : bit absolute SMT1WINPPS.5; + SMT1WINPPS_SMT1WINPPS4 : bit absolute SMT1WINPPS.4; + SMT1WINPPS_SMT1WINPPS3 : bit absolute SMT1WINPPS.3; + SMT1WINPPS_SMT1WINPPS2 : bit absolute SMT1WINPPS.2; + SMT1WINPPS_SMT1WINPPS1 : bit absolute SMT1WINPPS.1; + SMT1WINPPS_SMT1WINPPS0 : bit absolute SMT1WINPPS.0; + SMT1SIGPPS : byte absolute $1EAA; + SMT1SIGPPS_SMT1SIGPPS5 : bit absolute SMT1SIGPPS.5; + SMT1SIGPPS_SMT1SIGPPS4 : bit absolute SMT1SIGPPS.4; + SMT1SIGPPS_SMT1SIGPPS3 : bit absolute SMT1SIGPPS.3; + SMT1SIGPPS_SMT1SIGPPS2 : bit absolute SMT1SIGPPS.2; + SMT1SIGPPS_SMT1SIGPPS1 : bit absolute SMT1SIGPPS.1; + SMT1SIGPPS_SMT1SIGPPS0 : bit absolute SMT1SIGPPS.0; + CWG1PPS : byte absolute $1EB1; + CWG1PPS_CWG1PPS5 : bit absolute CWG1PPS.5; + CWG1PPS_CWG1PPS4 : bit absolute CWG1PPS.4; + CWG1PPS_CWG1PPS3 : bit absolute CWG1PPS.3; + CWG1PPS_CWG1PPS2 : bit absolute CWG1PPS.2; + CWG1PPS_CWG1PPS1 : bit absolute CWG1PPS.1; + CWG1PPS_CWG1PPS0 : bit absolute CWG1PPS.0; + CLCIN0PPS : byte absolute $1EBB; + CLCIN0PPS_CLCIN0PPS5 : bit absolute CLCIN0PPS.5; + CLCIN0PPS_CLCIN0PPS4 : bit absolute CLCIN0PPS.4; + CLCIN0PPS_CLCIN0PPS3 : bit absolute CLCIN0PPS.3; + CLCIN0PPS_CLCIN0PPS2 : bit absolute CLCIN0PPS.2; + CLCIN0PPS_CLCIN0PPS1 : bit absolute CLCIN0PPS.1; + CLCIN0PPS_CLCIN0PPS0 : bit absolute CLCIN0PPS.0; + CLCIN1PPS : byte absolute $1EBC; + CLCIN1PPS_CLCIN1PPS5 : bit absolute CLCIN1PPS.5; + CLCIN1PPS_CLCIN1PPS4 : bit absolute CLCIN1PPS.4; + CLCIN1PPS_CLCIN1PPS3 : bit absolute CLCIN1PPS.3; + CLCIN1PPS_CLCIN1PPS2 : bit absolute CLCIN1PPS.2; + CLCIN1PPS_CLCIN1PPS1 : bit absolute CLCIN1PPS.1; + CLCIN1PPS_CLCIN1PPS0 : bit absolute CLCIN1PPS.0; + CLCIN2PPS : byte absolute $1EBD; + CLCIN2PPS_CLCIN2PPS5 : bit absolute CLCIN2PPS.5; + CLCIN2PPS_CLCIN2PPS4 : bit absolute CLCIN2PPS.4; + CLCIN2PPS_CLCIN2PPS3 : bit absolute CLCIN2PPS.3; + CLCIN2PPS_CLCIN2PPS2 : bit absolute CLCIN2PPS.2; + CLCIN2PPS_CLCIN2PPS1 : bit absolute CLCIN2PPS.1; + CLCIN2PPS_CLCIN2PPS0 : bit absolute CLCIN2PPS.0; + CLCIN3PPS : byte absolute $1EBE; + CLCIN3PPS_CLCIN3PPS5 : bit absolute CLCIN3PPS.5; + CLCIN3PPS_CLCIN3PPS4 : bit absolute CLCIN3PPS.4; + CLCIN3PPS_CLCIN3PPS3 : bit absolute CLCIN3PPS.3; + CLCIN3PPS_CLCIN3PPS2 : bit absolute CLCIN3PPS.2; + CLCIN3PPS_CLCIN3PPS1 : bit absolute CLCIN3PPS.1; + CLCIN3PPS_CLCIN3PPS0 : bit absolute CLCIN3PPS.0; + ADACTPPS : byte absolute $1EC3; + ADACTPPS_ADACTPPS5 : bit absolute ADACTPPS.5; + ADACTPPS_ADACTPPS4 : bit absolute ADACTPPS.4; + ADACTPPS_ADACTPPS3 : bit absolute ADACTPPS.3; + ADACTPPS_ADACTPPS2 : bit absolute ADACTPPS.2; + ADACTPPS_ADACTPPS1 : bit absolute ADACTPPS.1; + ADACTPPS_ADACTPPS0 : bit absolute ADACTPPS.0; + SSP1CLKPPS : byte absolute $1EC5; + SSP1CLKPPS_SSP1CLKPPS5 : bit absolute SSP1CLKPPS.5; + SSP1CLKPPS_SSP1CLKPPS4 : bit absolute SSP1CLKPPS.4; + SSP1CLKPPS_SSP1CLKPPS3 : bit absolute SSP1CLKPPS.3; + SSP1CLKPPS_SSP1CLKPPS2 : bit absolute SSP1CLKPPS.2; + SSP1CLKPPS_SSP1CLKPPS1 : bit absolute SSP1CLKPPS.1; + SSP1CLKPPS_SSP1CLKPPS0 : bit absolute SSP1CLKPPS.0; + SSP1DATPPS : byte absolute $1EC6; + SSP1DATPPS_SSP1DATPPS5 : bit absolute SSP1DATPPS.5; + SSP1DATPPS_SSP1DATPPS4 : bit absolute SSP1DATPPS.4; + SSP1DATPPS_SSP1DATPPS3 : bit absolute SSP1DATPPS.3; + SSP1DATPPS_SSP1DATPPS2 : bit absolute SSP1DATPPS.2; + SSP1DATPPS_SSP1DATPPS1 : bit absolute SSP1DATPPS.1; + SSP1DATPPS_SSP1DATPPS0 : bit absolute SSP1DATPPS.0; + SSP1SSPPS : byte absolute $1EC7; + SSP1SSPPS_SSP1SSPPS5 : bit absolute SSP1SSPPS.5; + SSP1SSPPS_SSP1SSPPS4 : bit absolute SSP1SSPPS.4; + SSP1SSPPS_SSP1SSPPS3 : bit absolute SSP1SSPPS.3; + SSP1SSPPS_SSP1SSPPS2 : bit absolute SSP1SSPPS.2; + SSP1SSPPS_SSP1SSPPS1 : bit absolute SSP1SSPPS.1; + SSP1SSPPS_SSP1SSPPS0 : bit absolute SSP1SSPPS.0; + RX1PPS : byte absolute $1ECB; + RX1PPS_RX1PPS5 : bit absolute RX1PPS.5; + RX1PPS_RX1PPS4 : bit absolute RX1PPS.4; + RX1PPS_RX1PPS3 : bit absolute RX1PPS.3; + RX1PPS_RX1PPS2 : bit absolute RX1PPS.2; + RX1PPS_RX1PPS1 : bit absolute RX1PPS.1; + RX1PPS_RX1PPS0 : bit absolute RX1PPS.0; + TX1PPS : byte absolute $1ECC; + TX1PPS_TX1PPS5 : bit absolute TX1PPS.5; + TX1PPS_TX1PPS4 : bit absolute TX1PPS.4; + TX1PPS_TX1PPS3 : bit absolute TX1PPS.3; + TX1PPS_TX1PPS2 : bit absolute TX1PPS.2; + TX1PPS_TX1PPS1 : bit absolute TX1PPS.1; + TX1PPS_TX1PPS0 : bit absolute TX1PPS.0; + RX2PPS : byte absolute $1ECD; + RX2PPS_RX2PPS5 : bit absolute RX2PPS.5; + RX2PPS_RX2PPS4 : bit absolute RX2PPS.4; + RX2PPS_RX2PPS3 : bit absolute RX2PPS.3; + RX2PPS_RX2PPS2 : bit absolute RX2PPS.2; + RX2PPS_RX2PPS1 : bit absolute RX2PPS.1; + RX2PPS_RX2PPS0 : bit absolute RX2PPS.0; + TX2PPS : byte absolute $1ECE; + TX2PPS_TX2PPS5 : bit absolute TX2PPS.5; + TX2PPS_TX2PPS4 : bit absolute TX2PPS.4; + TX2PPS_TX2PPS3 : bit absolute TX2PPS.3; + TX2PPS_TX2PPS2 : bit absolute TX2PPS.2; + TX2PPS_TX2PPS1 : bit absolute TX2PPS.1; + TX2PPS_TX2PPS0 : bit absolute TX2PPS.0; + RA0PPS : byte absolute $1F10; + RA0PPS_RA0PPS5 : bit absolute RA0PPS.5; + RA0PPS_RA0PPS4 : bit absolute RA0PPS.4; + RA0PPS_RA0PPS3 : bit absolute RA0PPS.3; + RA0PPS_RA0PPS2 : bit absolute RA0PPS.2; + RA0PPS_RA0PPS1 : bit absolute RA0PPS.1; + RA0PPS_RA0PPS0 : bit absolute RA0PPS.0; + RA1PPS : byte absolute $1F11; + RA1PPS_RA1PPS5 : bit absolute RA1PPS.5; + RA1PPS_RA1PPS4 : bit absolute RA1PPS.4; + RA1PPS_RA1PPS3 : bit absolute RA1PPS.3; + RA1PPS_RA1PPS2 : bit absolute RA1PPS.2; + RA1PPS_RA1PPS1 : bit absolute RA1PPS.1; + RA1PPS_RA1PPS0 : bit absolute RA1PPS.0; + RA2PPS : byte absolute $1F12; + RA2PPS_RA2PPS5 : bit absolute RA2PPS.5; + RA2PPS_RA2PPS4 : bit absolute RA2PPS.4; + RA2PPS_RA2PPS3 : bit absolute RA2PPS.3; + RA2PPS_RA2PPS2 : bit absolute RA2PPS.2; + RA2PPS_RA2PPS1 : bit absolute RA2PPS.1; + RA2PPS_RA2PPS0 : bit absolute RA2PPS.0; + RA3PPS : byte absolute $1F13; + RA3PPS_RA3PPS5 : bit absolute RA3PPS.5; + RA3PPS_RA3PPS4 : bit absolute RA3PPS.4; + RA3PPS_RA3PPS3 : bit absolute RA3PPS.3; + RA3PPS_RA3PPS2 : bit absolute RA3PPS.2; + RA3PPS_RA3PPS1 : bit absolute RA3PPS.1; + RA3PPS_RA3PPS0 : bit absolute RA3PPS.0; + RA4PPS : byte absolute $1F14; + RA4PPS_RA4PPS5 : bit absolute RA4PPS.5; + RA4PPS_RA4PPS4 : bit absolute RA4PPS.4; + RA4PPS_RA4PPS3 : bit absolute RA4PPS.3; + RA4PPS_RA4PPS2 : bit absolute RA4PPS.2; + RA4PPS_RA4PPS1 : bit absolute RA4PPS.1; + RA4PPS_RA4PPS0 : bit absolute RA4PPS.0; + RA5PPS : byte absolute $1F15; + RA5PPS_RA5PPS5 : bit absolute RA5PPS.5; + RA5PPS_RA5PPS4 : bit absolute RA5PPS.4; + RA5PPS_RA5PPS3 : bit absolute RA5PPS.3; + RA5PPS_RA5PPS2 : bit absolute RA5PPS.2; + RA5PPS_RA5PPS1 : bit absolute RA5PPS.1; + RA5PPS_RA5PPS0 : bit absolute RA5PPS.0; + RA6PPS : byte absolute $1F16; + RA6PPS_RA6PPS5 : bit absolute RA6PPS.5; + RA6PPS_RA6PPS4 : bit absolute RA6PPS.4; + RA6PPS_RA6PPS3 : bit absolute RA6PPS.3; + RA6PPS_RA6PPS2 : bit absolute RA6PPS.2; + RA6PPS_RA6PPS1 : bit absolute RA6PPS.1; + RA6PPS_RA6PPS0 : bit absolute RA6PPS.0; + RA7PPS : byte absolute $1F17; + RA7PPS_RA7PPS5 : bit absolute RA7PPS.5; + RA7PPS_RA7PPS4 : bit absolute RA7PPS.4; + RA7PPS_RA7PPS3 : bit absolute RA7PPS.3; + RA7PPS_RA7PPS2 : bit absolute RA7PPS.2; + RA7PPS_RA7PPS1 : bit absolute RA7PPS.1; + RA7PPS_RA7PPS0 : bit absolute RA7PPS.0; + RB0PPS : byte absolute $1F18; + RB0PPS_RB0PPS5 : bit absolute RB0PPS.5; + RB0PPS_RB0PPS4 : bit absolute RB0PPS.4; + RB0PPS_RB0PPS3 : bit absolute RB0PPS.3; + RB0PPS_RB0PPS2 : bit absolute RB0PPS.2; + RB0PPS_RB0PPS1 : bit absolute RB0PPS.1; + RB0PPS_RB0PPS0 : bit absolute RB0PPS.0; + RB1PPS : byte absolute $1F19; + RB1PPS_RB1PPS5 : bit absolute RB1PPS.5; + RB1PPS_RB1PPS4 : bit absolute RB1PPS.4; + RB1PPS_RB1PPS3 : bit absolute RB1PPS.3; + RB1PPS_RB1PPS2 : bit absolute RB1PPS.2; + RB1PPS_RB1PPS1 : bit absolute RB1PPS.1; + RB1PPS_RB1PPS0 : bit absolute RB1PPS.0; + RB2PPS : byte absolute $1F1A; + RB2PPS_RB2PPS5 : bit absolute RB2PPS.5; + RB2PPS_RB2PPS4 : bit absolute RB2PPS.4; + RB2PPS_RB2PPS3 : bit absolute RB2PPS.3; + RB2PPS_RB2PPS2 : bit absolute RB2PPS.2; + RB2PPS_RB2PPS1 : bit absolute RB2PPS.1; + RB2PPS_RB2PPS0 : bit absolute RB2PPS.0; + RB3PPS : byte absolute $1F1B; + RB3PPS_RB3PPS5 : bit absolute RB3PPS.5; + RB3PPS_RB3PPS4 : bit absolute RB3PPS.4; + RB3PPS_RB3PPS3 : bit absolute RB3PPS.3; + RB3PPS_RB3PPS2 : bit absolute RB3PPS.2; + RB3PPS_RB3PPS1 : bit absolute RB3PPS.1; + RB3PPS_RB3PPS0 : bit absolute RB3PPS.0; + RB4PPS : byte absolute $1F1C; + RB4PPS_RB4PPS5 : bit absolute RB4PPS.5; + RB4PPS_RB4PPS4 : bit absolute RB4PPS.4; + RB4PPS_RB4PPS3 : bit absolute RB4PPS.3; + RB4PPS_RB4PPS2 : bit absolute RB4PPS.2; + RB4PPS_RB4PPS1 : bit absolute RB4PPS.1; + RB4PPS_RB4PPS0 : bit absolute RB4PPS.0; + RB5PPS : byte absolute $1F1D; + RB5PPS_RB5PPS5 : bit absolute RB5PPS.5; + RB5PPS_RB5PPS4 : bit absolute RB5PPS.4; + RB5PPS_RB5PPS3 : bit absolute RB5PPS.3; + RB5PPS_RB5PPS2 : bit absolute RB5PPS.2; + RB5PPS_RB5PPS1 : bit absolute RB5PPS.1; + RB5PPS_RB5PPS0 : bit absolute RB5PPS.0; + RB6PPS : byte absolute $1F1E; + RB6PPS_RB6PPS5 : bit absolute RB6PPS.5; + RB6PPS_RB6PPS4 : bit absolute RB6PPS.4; + RB6PPS_RB6PPS3 : bit absolute RB6PPS.3; + RB6PPS_RB6PPS2 : bit absolute RB6PPS.2; + RB6PPS_RB6PPS1 : bit absolute RB6PPS.1; + RB6PPS_RB6PPS0 : bit absolute RB6PPS.0; + RB7PPS : byte absolute $1F1F; + RB7PPS_RB7PPS5 : bit absolute RB7PPS.5; + RB7PPS_RB7PPS4 : bit absolute RB7PPS.4; + RB7PPS_RB7PPS3 : bit absolute RB7PPS.3; + RB7PPS_RB7PPS2 : bit absolute RB7PPS.2; + RB7PPS_RB7PPS1 : bit absolute RB7PPS.1; + RB7PPS_RB7PPS0 : bit absolute RB7PPS.0; + RC0PPS : byte absolute $1F20; + RC0PPS_RC0PPS5 : bit absolute RC0PPS.5; + RC0PPS_RC0PPS4 : bit absolute RC0PPS.4; + RC0PPS_RC0PPS3 : bit absolute RC0PPS.3; + RC0PPS_RC0PPS2 : bit absolute RC0PPS.2; + RC0PPS_RC0PPS1 : bit absolute RC0PPS.1; + RC0PPS_RC0PPS0 : bit absolute RC0PPS.0; + RC1PPS : byte absolute $1F21; + RC1PPS_RC1PPS5 : bit absolute RC1PPS.5; + RC1PPS_RC1PPS4 : bit absolute RC1PPS.4; + RC1PPS_RC1PPS3 : bit absolute RC1PPS.3; + RC1PPS_RC1PPS2 : bit absolute RC1PPS.2; + RC1PPS_RC1PPS1 : bit absolute RC1PPS.1; + RC1PPS_RC1PPS0 : bit absolute RC1PPS.0; + RC2PPS : byte absolute $1F22; + RC2PPS_RC2PPS5 : bit absolute RC2PPS.5; + RC2PPS_RC2PPS4 : bit absolute RC2PPS.4; + RC2PPS_RC2PPS3 : bit absolute RC2PPS.3; + RC2PPS_RC2PPS2 : bit absolute RC2PPS.2; + RC2PPS_RC2PPS1 : bit absolute RC2PPS.1; + RC2PPS_RC2PPS0 : bit absolute RC2PPS.0; + RC3PPS : byte absolute $1F23; + RC3PPS_RC3PPS5 : bit absolute RC3PPS.5; + RC3PPS_RC3PPS4 : bit absolute RC3PPS.4; + RC3PPS_RC3PPS3 : bit absolute RC3PPS.3; + RC3PPS_RC3PPS2 : bit absolute RC3PPS.2; + RC3PPS_RC3PPS1 : bit absolute RC3PPS.1; + RC3PPS_RC3PPS0 : bit absolute RC3PPS.0; + RC4PPS : byte absolute $1F24; + RC4PPS_RC4PPS5 : bit absolute RC4PPS.5; + RC4PPS_RC4PPS4 : bit absolute RC4PPS.4; + RC4PPS_RC4PPS3 : bit absolute RC4PPS.3; + RC4PPS_RC4PPS2 : bit absolute RC4PPS.2; + RC4PPS_RC4PPS1 : bit absolute RC4PPS.1; + RC4PPS_RC4PPS0 : bit absolute RC4PPS.0; + RC5PPS : byte absolute $1F25; + RC5PPS_RC5PPS5 : bit absolute RC5PPS.5; + RC5PPS_RC5PPS4 : bit absolute RC5PPS.4; + RC5PPS_RC5PPS3 : bit absolute RC5PPS.3; + RC5PPS_RC5PPS2 : bit absolute RC5PPS.2; + RC5PPS_RC5PPS1 : bit absolute RC5PPS.1; + RC5PPS_RC5PPS0 : bit absolute RC5PPS.0; + RC6PPS : byte absolute $1F26; + RC6PPS_RC6PPS5 : bit absolute RC6PPS.5; + RC6PPS_RC6PPS4 : bit absolute RC6PPS.4; + RC6PPS_RC6PPS3 : bit absolute RC6PPS.3; + RC6PPS_RC6PPS2 : bit absolute RC6PPS.2; + RC6PPS_RC6PPS1 : bit absolute RC6PPS.1; + RC6PPS_RC6PPS0 : bit absolute RC6PPS.0; + RC7PPS : byte absolute $1F27; + RC7PPS_RC7PPS5 : bit absolute RC7PPS.5; + RC7PPS_RC7PPS4 : bit absolute RC7PPS.4; + RC7PPS_RC7PPS3 : bit absolute RC7PPS.3; + RC7PPS_RC7PPS2 : bit absolute RC7PPS.2; + RC7PPS_RC7PPS1 : bit absolute RC7PPS.1; + RC7PPS_RC7PPS0 : bit absolute RC7PPS.0; + RD0PPS : byte absolute $1F28; + RD0PPS_RD0PPS5 : bit absolute RD0PPS.5; + RD0PPS_RD0PPS4 : bit absolute RD0PPS.4; + RD0PPS_RD0PPS3 : bit absolute RD0PPS.3; + RD0PPS_RD0PPS2 : bit absolute RD0PPS.2; + RD0PPS_RD0PPS1 : bit absolute RD0PPS.1; + RD0PPS_RD0PPS0 : bit absolute RD0PPS.0; + RD1PPS : byte absolute $1F29; + RD1PPS_RD1PPS5 : bit absolute RD1PPS.5; + RD1PPS_RD1PPS4 : bit absolute RD1PPS.4; + RD1PPS_RD1PPS3 : bit absolute RD1PPS.3; + RD1PPS_RD1PPS2 : bit absolute RD1PPS.2; + RD1PPS_RD1PPS1 : bit absolute RD1PPS.1; + RD1PPS_RD1PPS0 : bit absolute RD1PPS.0; + RD2PPS : byte absolute $1F2A; + RD2PPS_RD2PPS5 : bit absolute RD2PPS.5; + RD2PPS_RD2PPS4 : bit absolute RD2PPS.4; + RD2PPS_RD2PPS3 : bit absolute RD2PPS.3; + RD2PPS_RD2PPS2 : bit absolute RD2PPS.2; + RD2PPS_RD2PPS1 : bit absolute RD2PPS.1; + RD2PPS_RD2PPS0 : bit absolute RD2PPS.0; + RD3PPS : byte absolute $1F2B; + RD3PPS_RD3PPS5 : bit absolute RD3PPS.5; + RD3PPS_RD3PPS4 : bit absolute RD3PPS.4; + RD3PPS_RD3PPS3 : bit absolute RD3PPS.3; + RD3PPS_RD3PPS2 : bit absolute RD3PPS.2; + RD3PPS_RD3PPS1 : bit absolute RD3PPS.1; + RD3PPS_RD3PPS0 : bit absolute RD3PPS.0; + RD4PPS : byte absolute $1F2C; + RD4PPS_RD4PPS5 : bit absolute RD4PPS.5; + RD4PPS_RD4PPS4 : bit absolute RD4PPS.4; + RD4PPS_RD4PPS3 : bit absolute RD4PPS.3; + RD4PPS_RD4PPS2 : bit absolute RD4PPS.2; + RD4PPS_RD4PPS1 : bit absolute RD4PPS.1; + RD4PPS_RD4PPS0 : bit absolute RD4PPS.0; + RD5PPS : byte absolute $1F2D; + RD5PPS_RD5PPS5 : bit absolute RD5PPS.5; + RD5PPS_RD5PPS4 : bit absolute RD5PPS.4; + RD5PPS_RD5PPS3 : bit absolute RD5PPS.3; + RD5PPS_RD5PPS2 : bit absolute RD5PPS.2; + RD5PPS_RD5PPS1 : bit absolute RD5PPS.1; + RD5PPS_RD5PPS0 : bit absolute RD5PPS.0; + RD6PPS : byte absolute $1F2E; + RD6PPS_RD6PPS5 : bit absolute RD6PPS.5; + RD6PPS_RD6PPS4 : bit absolute RD6PPS.4; + RD6PPS_RD6PPS3 : bit absolute RD6PPS.3; + RD6PPS_RD6PPS2 : bit absolute RD6PPS.2; + RD6PPS_RD6PPS1 : bit absolute RD6PPS.1; + RD6PPS_RD6PPS0 : bit absolute RD6PPS.0; + RD7PPS : byte absolute $1F2F; + RD7PPS_RD7PPS5 : bit absolute RD7PPS.5; + RD7PPS_RD7PPS4 : bit absolute RD7PPS.4; + RD7PPS_RD7PPS3 : bit absolute RD7PPS.3; + RD7PPS_RD7PPS2 : bit absolute RD7PPS.2; + RD7PPS_RD7PPS1 : bit absolute RD7PPS.1; + RD7PPS_RD7PPS0 : bit absolute RD7PPS.0; + RE0PPS : byte absolute $1F30; + RE0PPS_RE0PPS5 : bit absolute RE0PPS.5; + RE0PPS_RE0PPS4 : bit absolute RE0PPS.4; + RE0PPS_RE0PPS3 : bit absolute RE0PPS.3; + RE0PPS_RE0PPS2 : bit absolute RE0PPS.2; + RE0PPS_RE0PPS1 : bit absolute RE0PPS.1; + RE0PPS_RE0PPS0 : bit absolute RE0PPS.0; + RE1PPS : byte absolute $1F31; + RE1PPS_RE1PPS5 : bit absolute RE1PPS.5; + RE1PPS_RE1PPS4 : bit absolute RE1PPS.4; + RE1PPS_RE1PPS3 : bit absolute RE1PPS.3; + RE1PPS_RE1PPS2 : bit absolute RE1PPS.2; + RE1PPS_RE1PPS1 : bit absolute RE1PPS.1; + RE1PPS_RE1PPS0 : bit absolute RE1PPS.0; + RE3PPS : byte absolute $1F33; + RE3PPS_RE3PPS5 : bit absolute RE3PPS.5; + RE3PPS_RE3PPS4 : bit absolute RE3PPS.4; + RE3PPS_RE3PPS3 : bit absolute RE3PPS.3; + RE3PPS_RE3PPS2 : bit absolute RE3PPS.2; + RE3PPS_RE3PPS1 : bit absolute RE3PPS.1; + RE3PPS_RE3PPS0 : bit absolute RE3PPS.0; + RE4PPS : byte absolute $1F34; + RE4PPS_RE4PPS5 : bit absolute RE4PPS.5; + RE4PPS_RE4PPS4 : bit absolute RE4PPS.4; + RE4PPS_RE4PPS3 : bit absolute RE4PPS.3; + RE4PPS_RE4PPS2 : bit absolute RE4PPS.2; + RE4PPS_RE4PPS1 : bit absolute RE4PPS.1; + RE4PPS_RE4PPS0 : bit absolute RE4PPS.0; + RE5PPS : byte absolute $1F35; + RE5PPS_RE5PPS5 : bit absolute RE5PPS.5; + RE5PPS_RE5PPS4 : bit absolute RE5PPS.4; + RE5PPS_RE5PPS3 : bit absolute RE5PPS.3; + RE5PPS_RE5PPS2 : bit absolute RE5PPS.2; + RE5PPS_RE5PPS1 : bit absolute RE5PPS.1; + RE5PPS_RE5PPS0 : bit absolute RE5PPS.0; + RE6PPS : byte absolute $1F36; + RE6PPS_RE6PPS5 : bit absolute RE6PPS.5; + RE6PPS_RE6PPS4 : bit absolute RE6PPS.4; + RE6PPS_RE6PPS3 : bit absolute RE6PPS.3; + RE6PPS_RE6PPS2 : bit absolute RE6PPS.2; + RE6PPS_RE6PPS1 : bit absolute RE6PPS.1; + RE6PPS_RE6PPS0 : bit absolute RE6PPS.0; + RE7PPS : byte absolute $1F37; + RE7PPS_RE7PPS5 : bit absolute RE7PPS.5; + RE7PPS_RE7PPS4 : bit absolute RE7PPS.4; + RE7PPS_RE7PPS3 : bit absolute RE7PPS.3; + RE7PPS_RE7PPS2 : bit absolute RE7PPS.2; + RE7PPS_RE7PPS1 : bit absolute RE7PPS.1; + RE7PPS_RE7PPS0 : bit absolute RE7PPS.0; + ANSELA : byte absolute $1F38; + ANSELA_ANSA7 : bit absolute ANSELA.7; + ANSELA_ANSA6 : bit absolute ANSELA.6; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + WPUA : byte absolute $1F39; + WPUA_WPUA7 : bit absolute WPUA.7; + WPUA_WPUA6 : bit absolute WPUA.6; + WPUA_WPUA5 : bit absolute WPUA.5; + WPUA_WPUA4 : bit absolute WPUA.4; + WPUA_WPUA3 : bit absolute WPUA.3; + WPUA_WPUA2 : bit absolute WPUA.2; + WPUA_WPUA1 : bit absolute WPUA.1; + WPUA_WPUA0 : bit absolute WPUA.0; + ODCONA : byte absolute $1F3A; + ODCONA_ODCA7 : bit absolute ODCONA.7; + ODCONA_ODCA6 : bit absolute ODCONA.6; + ODCONA_ODCA4 : bit absolute ODCONA.4; + ODCONA_ODCA3 : bit absolute ODCONA.3; + ODCONA_ODCA2 : bit absolute ODCONA.2; + ODCONA_ODCA1 : bit absolute ODCONA.1; + ODCONA_ODCA0 : bit absolute ODCONA.0; + SLRCONA : byte absolute $1F3B; + SLRCONA_SLRA7 : bit absolute SLRCONA.7; + SLRCONA_SLRA6 : bit absolute SLRCONA.6; + SLRCONA_SLRA4 : bit absolute SLRCONA.4; + SLRCONA_SLRA3 : bit absolute SLRCONA.3; + SLRCONA_SLRA2 : bit absolute SLRCONA.2; + SLRCONA_SLRA1 : bit absolute SLRCONA.1; + SLRCONA_SLRA0 : bit absolute SLRCONA.0; + INLVLA : byte absolute $1F3C; + INLVLA_INLVLA7 : bit absolute INLVLA.7; + INLVLA_INLVLA6 : bit absolute INLVLA.6; + INLVLA_INLVLA5 : bit absolute INLVLA.5; + INLVLA_INLVLA4 : bit absolute INLVLA.4; + INLVLA_INLVLA3 : bit absolute INLVLA.3; + INLVLA_INLVLA2 : bit absolute INLVLA.2; + INLVLA_INLVLA1 : bit absolute INLVLA.1; + INLVLA_INLVLA0 : bit absolute INLVLA.0; + ANSELB : byte absolute $1F43; + ANSELB_ANSB7 : bit absolute ANSELB.7; + ANSELB_ANSB6 : bit absolute ANSELB.6; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + WPUB : byte absolute $1F44; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + ODCONB : byte absolute $1F45; + ODCONB_ODCB7 : bit absolute ODCONB.7; + ODCONB_ODCB6 : bit absolute ODCONB.6; + ODCONB_ODCB5 : bit absolute ODCONB.5; + ODCONB_ODCB4 : bit absolute ODCONB.4; + ODCONB_ODCB3 : bit absolute ODCONB.3; + ODCONB_ODCB2 : bit absolute ODCONB.2; + ODCONB_ODCB1 : bit absolute ODCONB.1; + ODCONB_ODCB0 : bit absolute ODCONB.0; + SLRCONB : byte absolute $1F46; + SLRCONB_SLRB7 : bit absolute SLRCONB.7; + SLRCONB_SLRB6 : bit absolute SLRCONB.6; + SLRCONB_SLRB5 : bit absolute SLRCONB.5; + SLRCONB_SLRB4 : bit absolute SLRCONB.4; + SLRCONB_SLRB3 : bit absolute SLRCONB.3; + SLRCONB_SLRB2 : bit absolute SLRCONB.2; + SLRCONB_SLRB1 : bit absolute SLRCONB.1; + SLRCONB_SLRB0 : bit absolute SLRCONB.0; + INLVLB : byte absolute $1F47; + INLVLB_INLVLB7 : bit absolute INLVLB.7; + INLVLB_INLVLB6 : bit absolute INLVLB.6; + INLVLB_INLVLB5 : bit absolute INLVLB.5; + INLVLB_INLVLB4 : bit absolute INLVLB.4; + INLVLB_INLVLB3 : bit absolute INLVLB.3; + INLVLB_INLVLB2 : bit absolute INLVLB.2; + INLVLB_INLVLB1 : bit absolute INLVLB.1; + INLVLB_INLVLB0 : bit absolute INLVLB.0; + IOCBP : byte absolute $1F48; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $1F49; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $1F4A; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELC : byte absolute $1F4E; + ANSELC_ANSC7 : bit absolute ANSELC.7; + ANSELC_ANSC6 : bit absolute ANSELC.6; + ANSELC_ANSC5 : bit absolute ANSELC.5; + ANSELC_ANSC4 : bit absolute ANSELC.4; + ANSELC_ANSC3 : bit absolute ANSELC.3; + ANSELC_ANSC2 : bit absolute ANSELC.2; + ANSELC_ANSC1 : bit absolute ANSELC.1; + ANSELC_ANSC0 : bit absolute ANSELC.0; + WPUC : byte absolute $1F4F; + WPUC_WPUC7 : bit absolute WPUC.7; + WPUC_WPUC6 : bit absolute WPUC.6; + WPUC_WPUC5 : bit absolute WPUC.5; + WPUC_WPUC4 : bit absolute WPUC.4; + WPUC_WPUC3 : bit absolute WPUC.3; + WPUC_WPUC2 : bit absolute WPUC.2; + WPUC_WPUC1 : bit absolute WPUC.1; + WPUC_WPUC0 : bit absolute WPUC.0; + ODCONC : byte absolute $1F50; + ODCONC_ODCC7 : bit absolute ODCONC.7; + ODCONC_ODCC6 : bit absolute ODCONC.6; + ODCONC_ODCC5 : bit absolute ODCONC.5; + ODCONC_ODCC4 : bit absolute ODCONC.4; + ODCONC_ODCC3 : bit absolute ODCONC.3; + ODCONC_ODCC2 : bit absolute ODCONC.2; + ODCONC_ODCC1 : bit absolute ODCONC.1; + ODCONC_ODCC0 : bit absolute ODCONC.0; + SLRCONC : byte absolute $1F51; + SLRCONC_SLRC7 : bit absolute SLRCONC.7; + SLRCONC_SLRC6 : bit absolute SLRCONC.6; + SLRCONC_SLRC5 : bit absolute SLRCONC.5; + SLRCONC_SLRC4 : bit absolute SLRCONC.4; + SLRCONC_SLRC3 : bit absolute SLRCONC.3; + SLRCONC_SLRC2 : bit absolute SLRCONC.2; + SLRCONC_SLRC1 : bit absolute SLRCONC.1; + SLRCONC_SLRC0 : bit absolute SLRCONC.0; + INLVLC : byte absolute $1F52; + INLVLC_INLVLC7 : bit absolute INLVLC.7; + INLVLC_INLVLC6 : bit absolute INLVLC.6; + INLVLC_INLVLC5 : bit absolute INLVLC.5; + INLVLC_INLVLC4 : bit absolute INLVLC.4; + INLVLC_INLVLC3 : bit absolute INLVLC.3; + INLVLC_INLVLC2 : bit absolute INLVLC.2; + INLVLC_INLVLC1 : bit absolute INLVLC.1; + INLVLC_INLVLC0 : bit absolute INLVLC.0; + IOCCP : byte absolute $1F53; + IOCCP_IOCCP7 : bit absolute IOCCP.7; + IOCCP_IOCCP6 : bit absolute IOCCP.6; + IOCCP_IOCCP5 : bit absolute IOCCP.5; + IOCCP_IOCCP4 : bit absolute IOCCP.4; + IOCCP_IOCCP3 : bit absolute IOCCP.3; + IOCCP_IOCCP2 : bit absolute IOCCP.2; + IOCCP_IOCCP1 : bit absolute IOCCP.1; + IOCCP_IOCCP0 : bit absolute IOCCP.0; + IOCCN : byte absolute $1F54; + IOCCN_IOCCN7 : bit absolute IOCCN.7; + IOCCN_IOCCN6 : bit absolute IOCCN.6; + IOCCN_IOCCN5 : bit absolute IOCCN.5; + IOCCN_IOCCN4 : bit absolute IOCCN.4; + IOCCN_IOCCN3 : bit absolute IOCCN.3; + IOCCN_IOCCN2 : bit absolute IOCCN.2; + IOCCN_IOCCN1 : bit absolute IOCCN.1; + IOCCN_IOCCN0 : bit absolute IOCCN.0; + IOCCF : byte absolute $1F55; + IOCCF_IOCCF7 : bit absolute IOCCF.7; + IOCCF_IOCCF6 : bit absolute IOCCF.6; + IOCCF_IOCCF5 : bit absolute IOCCF.5; + IOCCF_IOCCF4 : bit absolute IOCCF.4; + IOCCF_IOCCF3 : bit absolute IOCCF.3; + IOCCF_IOCCF2 : bit absolute IOCCF.2; + IOCCF_IOCCF1 : bit absolute IOCCF.1; + IOCCF_IOCCF0 : bit absolute IOCCF.0; + ANSELD : byte absolute $1F59; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + WPUD : byte absolute $1F5A; + WPUD_WPUD7 : bit absolute WPUD.7; + WPUD_WPUD6 : bit absolute WPUD.6; + WPUD_WPUD5 : bit absolute WPUD.5; + WPUD_WPUD4 : bit absolute WPUD.4; + WPUD_WPUD3 : bit absolute WPUD.3; + WPUD_WPUD2 : bit absolute WPUD.2; + WPUD_WPUD1 : bit absolute WPUD.1; + WPUD_WPUD0 : bit absolute WPUD.0; + ODCOND : byte absolute $1F5B; + ODCOND_ODCD7 : bit absolute ODCOND.7; + ODCOND_ODCD6 : bit absolute ODCOND.6; + ODCOND_ODCD5 : bit absolute ODCOND.5; + ODCOND_ODCD4 : bit absolute ODCOND.4; + ODCOND_ODCD3 : bit absolute ODCOND.3; + ODCOND_ODCD2 : bit absolute ODCOND.2; + ODCOND_ODCD1 : bit absolute ODCOND.1; + ODCOND_ODCD0 : bit absolute ODCOND.0; + SLRCOND : byte absolute $1F5C; + SLRCOND_SLRD7 : bit absolute SLRCOND.7; + SLRCOND_SLRD6 : bit absolute SLRCOND.6; + SLRCOND_SLRD5 : bit absolute SLRCOND.5; + SLRCOND_SLRD4 : bit absolute SLRCOND.4; + SLRCOND_SLRD3 : bit absolute SLRCOND.3; + SLRCOND_SLRD2 : bit absolute SLRCOND.2; + SLRCOND_SLRD1 : bit absolute SLRCOND.1; + SLRCOND_SLRD0 : bit absolute SLRCOND.0; + INLVLD : byte absolute $1F5D; + INLVLD_INLVLD7 : bit absolute INLVLD.7; + INLVLD_INLVLD6 : bit absolute INLVLD.6; + INLVLD_INLVLD5 : bit absolute INLVLD.5; + INLVLD_INLVLD4 : bit absolute INLVLD.4; + INLVLD_INLVLD3 : bit absolute INLVLD.3; + INLVLD_INLVLD2 : bit absolute INLVLD.2; + INLVLD_INLVLD1 : bit absolute INLVLD.1; + INLVLD_INLVLD0 : bit absolute INLVLD.0; + ANSELE : byte absolute $1F64; + ANSELE_ANSE7 : bit absolute ANSELE.7; + ANSELE_ANSE6 : bit absolute ANSELE.6; + ANSELE_ANSE5 : bit absolute ANSELE.5; + ANSELE_ANSE4 : bit absolute ANSELE.4; + ANSELE_ANSE3 : bit absolute ANSELE.3; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + WPUE : byte absolute $1F65; + WPUE_WPUE7 : bit absolute WPUE.7; + WPUE_WPUE6 : bit absolute WPUE.6; + WPUE_WPUE5 : bit absolute WPUE.5; + WPUE_WPUE4 : bit absolute WPUE.4; + WPUE_WPUE3 : bit absolute WPUE.3; + WPUE_WPUE1 : bit absolute WPUE.1; + WPUE_WPUE0 : bit absolute WPUE.0; + ODCONE : byte absolute $1F66; + ODCONE_ODCE7 : bit absolute ODCONE.7; + ODCONE_ODCE6 : bit absolute ODCONE.6; + ODCONE_ODCE5 : bit absolute ODCONE.5; + ODCONE_ODCE4 : bit absolute ODCONE.4; + ODCONE_ODCE3 : bit absolute ODCONE.3; + ODCONE_ODCE1 : bit absolute ODCONE.1; + ODCONE_ODCE0 : bit absolute ODCONE.0; + SLRCONE : byte absolute $1F67; + SLRCONE_SLRE7 : bit absolute SLRCONE.7; + SLRCONE_SLRE6 : bit absolute SLRCONE.6; + SLRCONE_SLRE5 : bit absolute SLRCONE.5; + SLRCONE_SLRE4 : bit absolute SLRCONE.4; + SLRCONE_SLRE3 : bit absolute SLRCONE.3; + SLRCONE_SLRE1 : bit absolute SLRCONE.1; + SLRCONE_SLRE0 : bit absolute SLRCONE.0; + INLVLE : byte absolute $1F68; + INLVLE_INLVLE7 : bit absolute INLVLE.7; + INLVLE_INLVLE6 : bit absolute INLVLE.6; + INLVLE_INLVLE5 : bit absolute INLVLE.5; + INLVLE_INLVLE4 : bit absolute INLVLE.4; + INLVLE_INLVLE3 : bit absolute INLVLE.3; + INLVLE_INLVLE1 : bit absolute INLVLE.1; + INLVLE_INLVLE0 : bit absolute INLVLE.0; + IOCEP : byte absolute $1F69; + IOCEP_IOCEP7 : bit absolute IOCEP.7; + IOCEP_IOCEP6 : bit absolute IOCEP.6; + IOCEP_IOCEP5 : bit absolute IOCEP.5; + IOCEP_IOCEP4 : bit absolute IOCEP.4; + IOCEP_IOCEP3 : bit absolute IOCEP.3; + IOCEP_IOCEP1 : bit absolute IOCEP.1; + IOCEP_IOCEP0 : bit absolute IOCEP.0; + IOCEN : byte absolute $1F6A; + IOCEN_IOCEN7 : bit absolute IOCEN.7; + IOCEN_IOCEN6 : bit absolute IOCEN.6; + IOCEN_IOCEN5 : bit absolute IOCEN.5; + IOCEN_IOCEN4 : bit absolute IOCEN.4; + IOCEN_IOCEN3 : bit absolute IOCEN.3; + IOCEN_IOCEN1 : bit absolute IOCEN.1; + IOCEN_IOCEN0 : bit absolute IOCEN.0; + IOCEF : byte absolute $1F6B; + IOCEF_IOCEF7 : bit absolute IOCEF.7; + IOCEF_IOCEF6 : bit absolute IOCEF.6; + IOCEF_IOCEF5 : bit absolute IOCEF.5; + IOCEF_IOCEF4 : bit absolute IOCEF.4; + IOCEF_IOCEF3 : bit absolute IOCEF.3; + IOCEF_IOCEF1 : bit absolute IOCEF.1; + IOCEF_IOCEF0 : bit absolute IOCEF.0; + STATUS_SHAD : byte absolute $1FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $1FE5; + BSR_SHAD : byte absolute $1FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $1FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $1FE8; + FSR0H_SHAD : byte absolute $1FE9; + FSR1L_SHAD : byte absolute $1FEA; + FSR1H_SHAD : byte absolute $1FEB; + STKPTR : byte absolute $1FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $1FEE; + TOSH : byte absolute $1FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-63 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01D:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, TRISA, TRISB, TRISC, TRISD, TRISE, TRISF, LATA, LATB, LATC, LATD, LATE, LATF + {$SET_STATE_RAM '01F-01F:SFR'} // Bank 0 : ADCPCON0 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09F:SFR'} // Bank 1 : ADLTHL, ADLTHH, ADUTHL, ADUTHH, ADERRL, ADERRH, ADSTPTL, ADSTPTH, ADFLTRL, ADFLTRH, ADACCL, ADACCH, ADACCU, ADCNT, ADRPT, ADPREVL, ADPREVH, ADRESL, ADRESH, ADPCH + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11F:SFR'} // Bank 2 : ADACQL, ADACQH, ADCAP, ADPREL, ADPREH, ADCON0, ADCON1, ADCON2, ADCON3, ADSTAT, ADREF, ADACT, ADCLK, RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-192:SFR'} // Bank 3 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20C-211:SFR'} // Bank 4 : TMR1L, TMR1H, T1CON, T1GCON, T1GATE, T1CLK + {$SET_STATE_RAM '21E-21E:SFR'} // Bank 4 : CCPTMRS0 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-297:SFR'} // Bank 5 : T2TMR, T2PR, T2CON, T2HLT, T2CLKCON, T2RST, T4TMR, T4PR, T4CON, T4HLT, T4CLKCON, T4RST + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-316:SFR'} // Bank 6 : CCPR1L, CCPR1H, CCP1CON, CCP1CAP, CCPR2L, CCPR2H, CCP2CON, CCP2CAP, PWM3DCL, PWM3DCH, PWM3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : PWM4DCL, PWM4DCH, PWM4CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48C-49D:SFR'} // Bank 9 : SMT1TMRL, SMT1TMRH, SMT1TMRU, SMT1CPRL, SMT1CPRH, SMT1CPRU, SMT1CPWL, SMT1CPWH, SMT1CPWU, SMT1PRL, SMT1PRH, SMT1PRU, SMT1CON0, SMT1CON1, SMT1STAT, SMT1CLK, SMT1SIG, SMT1WIN + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '59C-59F:SFR'} // Bank 11 : TMR0L, TMR0H, T0CON0, T0CON1 + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '60C-614:SFR'} // Bank 12 : CWG1CLKCON, CWG1ISM, CWG1DBR, CWG1DBF, CWG1CON0, CWG1CON1, CWG1AS0, CWG1AS1, CWG1STR + {$SET_STATE_RAM '620-66F:GPR'} + {$SET_STATE_RAM '6A0-6EF:GPR'} + {$SET_STATE_RAM '70C-714:SFR'} // Bank 14 : PIR0, PIR1, PIR2, PIR3, PIR4, PIR5, PIR6, PIR7, PIR8 + {$SET_STATE_RAM '716-71E:SFR'} // Bank 14 : PIE0, PIE1, PIE2, PIE3, PIE4, PIE5, PIE6, PIE7, PIE8 + {$SET_STATE_RAM '720-76F:GPR'} + {$SET_STATE_RAM '796-79B:SFR'} // Bank 15 : PMD0, PMD1, PMD2, PMD3, PMD4, PMD5 + {$SET_STATE_RAM '7A0-7EF:GPR'} + {$SET_STATE_RAM '80C-814:SFR'} // Bank 16 : WDTCON0, WDTCON1, WDTPSL, WDTPSH, WDTTMR, BORCON, VREGCON, PCON0, PCON1 + {$SET_STATE_RAM '81A-81F:SFR'} // Bank 16 : NVMADRL, NVMADRH, NVMDATL, NVMDATH, NVMCON1, NVMCON2 + {$SET_STATE_RAM '820-86F:GPR'} + {$SET_STATE_RAM '88C-894:SFR'} // Bank 17 : CPUDOZE, OSCCON1, OSCCON2, OSCCON3, OSCSTAT, OSCEN, OSCTUNE, OSCFRQ, ACTCON + {$SET_STATE_RAM '8A0-8EF:GPR'} + {$SET_STATE_RAM '90C-90C:SFR'} // Bank 18 : FVRCON + {$SET_STATE_RAM '90E-90F:SFR'} // Bank 18 : DAC1CON0, DAC1CON1 + {$SET_STATE_RAM '91F-91F:SFR'} // Bank 18 : ZCDCON + {$SET_STATE_RAM '920-96F:GPR'} + {$SET_STATE_RAM '98F-997:SFR'} // Bank 19 : CMOUT, CM1CON0, CM1CON1, CM1NSEL, CM1PSEL, CM2CON0, CM2CON1, CM2NSEL, CM2PSEL + {$SET_STATE_RAM '9A0-9EF:GPR'} + {$SET_STATE_RAM 'A19-A1F:SFR'} // Bank 20 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM 'A20-A6F:GPR'} + {$SET_STATE_RAM 'AA0-AEF:GPR'} + {$SET_STATE_RAM 'B20-B6F:GPR'} + {$SET_STATE_RAM 'BA0-BEF:GPR'} + {$SET_STATE_RAM 'C0C-C1C:SFR'} // Bank 24 : RTCCON, RTCCAL, ALRMCON, ALRMRPT, YEAR, MONTH, WEEKDAY, DAY, HOURS, MINUTES, SECONDS, ALRMMTH, ALRMWD, ALRMDAY, ALRMHR, ALRMMIN, ALRMSEC + {$SET_STATE_RAM 'C20-C6F:GPR'} + {$SET_STATE_RAM 'C8C-C91:SFR'} // Bank 25 : PORTG, PORTH, TRISG, TRISH, LATG, LATH + {$SET_STATE_RAM 'CA0-CEF:GPR'} + {$SET_STATE_RAM 'D20-D6F:GPR'} + {$SET_STATE_RAM 'DA0-DEF:GPR'} + {$SET_STATE_RAM 'E20-E6F:GPR'} + {$SET_STATE_RAM 'E8C-E8F:SFR'} // Bank 29 : VB0GPR, VB1GPR, VB2GPR, VB3GPR + {$SET_STATE_RAM 'EA0-EEF:GPR'} + {$SET_STATE_RAM 'F20-F6F:GPR'} + {$SET_STATE_RAM 'FA0-FEF:GPR'} + {$SET_STATE_RAM '1020-106F:GPR'} + {$SET_STATE_RAM '10A0-10EF:GPR'} + {$SET_STATE_RAM '1120-116F:GPR'} + {$SET_STATE_RAM '11A0-11EF:GPR'} + {$SET_STATE_RAM '1220-126F:GPR'} + {$SET_STATE_RAM '12A0-12EF:GPR'} + {$SET_STATE_RAM '1320-136F:GPR'} + {$SET_STATE_RAM '13A0-13EF:GPR'} + {$SET_STATE_RAM '1420-146F:GPR'} + {$SET_STATE_RAM '14A0-14EF:GPR'} + {$SET_STATE_RAM '1520-156F:GPR'} + {$SET_STATE_RAM '15A0-15EF:GPR'} + {$SET_STATE_RAM '1620-166F:GPR'} + {$SET_STATE_RAM '16A0-16EF:GPR'} + {$SET_STATE_RAM '1720-176F:GPR'} + {$SET_STATE_RAM '17A0-17EF:GPR'} + {$SET_STATE_RAM '1820-186F:GPR'} + {$SET_STATE_RAM '18A0-18EF:GPR'} + {$SET_STATE_RAM '1920-196F:GPR'} + {$SET_STATE_RAM '1D0C-1D47:SFR'} // Bank 58 : LCDCON, LCDPS, LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5, LCDVCON1, LCDVCON2, LCDREF, LCDRL, LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23, LCDDATA24, LCDDATA25, LCDDATA26, LCDDATA27, LCDDATA28, LCDDATA29, LCDDATA30, LCDDATA31, LCDDATA32, LCDDATA33, LCDDATA34, LCDDATA35, LCDDATA36, LCDDATA37, LCDDATA38, LCDDATA39, LCDDATA40, LCDDATA41, LCDDATA42, LCDDATA43, LCDDATA44, LCDDATA45, LCDDATA46, LCDDATA47 + {$SET_STATE_RAM '1E0F-1E44:SFR'} // Bank 60 : CLCDATA, CLC1CON, CLC1POL, CLC1SEL0, CLC1SEL1, CLC1SEL2, CLC1SEL3, CLC1GLS0, CLC1GLS1, CLC1GLS2, CLC1GLS3, CLC2CON, CLC2POL, CLC2SEL0, CLC2SEL1, CLC2SEL2, CLC2SEL3, CLC2GLS0, CLC2GLS1, CLC2GLS2, CLC2GLS3, CLC3CON, CLC3POL, CLC3SEL0, CLC3SEL1, CLC3SEL2, CLC3SEL3, CLC3GLS0, CLC3GLS1, CLC3GLS2, CLC3GLS3, CLC4CON, CLC4POL, CLC4SEL0, CLC4SEL1, CLC4SEL2, CLC4SEL3, CLC4GLS0, CLC4GLS1, CLC4GLS2, CLC4GLS3, RF0PPS, RF1PPS, RF2PPS, RF3PPS, RF4PPS, RF5PPS, RF6PPS, RF7PPS, RG0PPS, RG1PPS, RG2PPS, RG3PPS, RG4PPS + {$SET_STATE_RAM '1E46-1E4B:SFR'} // Bank 60 : RG6PPS, RG7PPS, RH0PPS, RH1PPS, RH2PPS, RH3PPS + {$SET_STATE_RAM '1E50-1E55:SFR'} // Bank 60 : ANSELF, WPUF, ODCONF, SLRCONF, INLVLF, HIDRVF + {$SET_STATE_RAM '1E5B-1E62:SFR'} // Bank 60 : ANSELG, WPUG, ODCONG, SLRCONG, INLVLG, IOCGP, IOCGN, IOCGF + {$SET_STATE_RAM '1E67-1E6A:SFR'} // Bank 60 : WPUH, ODCONH, SLRCONH, INLVLH + {$SET_STATE_RAM '1E8F-1E93:SFR'} // Bank 61 : PPSLOCK, INTPPS, T0CKIPPS, T1CKIPPS, T1GPPS + {$SET_STATE_RAM '1E9C-1E9D:SFR'} // Bank 61 : T2INPPS, T4INPPS + {$SET_STATE_RAM '1EA1-1EA2:SFR'} // Bank 61 : CCP1PPS, CCP2PPS + {$SET_STATE_RAM '1EA9-1EAA:SFR'} // Bank 61 : SMT1WINPPS, SMT1SIGPPS + {$SET_STATE_RAM '1EB1-1EB1:SFR'} // Bank 61 : CWG1PPS + {$SET_STATE_RAM '1EBB-1EBE:SFR'} // Bank 61 : CLCIN0PPS, CLCIN1PPS, CLCIN2PPS, CLCIN3PPS + {$SET_STATE_RAM '1EC3-1EC3:SFR'} // Bank 61 : ADACTPPS + {$SET_STATE_RAM '1EC5-1EC7:SFR'} // Bank 61 : SSP1CLKPPS, SSP1DATPPS, SSP1SSPPS + {$SET_STATE_RAM '1ECB-1ECE:SFR'} // Bank 61 : RX1PPS, TX1PPS, RX2PPS, TX2PPS + {$SET_STATE_RAM '1F10-1F31:SFR'} // Bank 62 : RA0PPS, RA1PPS, RA2PPS, RA3PPS, RA4PPS, RA5PPS, RA6PPS, RA7PPS, RB0PPS, RB1PPS, RB2PPS, RB3PPS, RB4PPS, RB5PPS, RB6PPS, RB7PPS, RC0PPS, RC1PPS, RC2PPS, RC3PPS, RC4PPS, RC5PPS, RC6PPS, RC7PPS, RD0PPS, RD1PPS, RD2PPS, RD3PPS, RD4PPS, RD5PPS, RD6PPS, RD7PPS, RE0PPS, RE1PPS + {$SET_STATE_RAM '1F33-1F3C:SFR'} // Bank 62 : RE3PPS, RE4PPS, RE5PPS, RE6PPS, RE7PPS, ANSELA, WPUA, ODCONA, SLRCONA, INLVLA + {$SET_STATE_RAM '1F43-1F4A:SFR'} // Bank 62 : ANSELB, WPUB, ODCONB, SLRCONB, INLVLB, IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '1F4E-1F55:SFR'} // Bank 62 : ANSELC, WPUC, ODCONC, SLRCONC, INLVLC, IOCCP, IOCCN, IOCCF + {$SET_STATE_RAM '1F59-1F5D:SFR'} // Bank 62 : ANSELD, WPUD, ODCOND, SLRCOND, INLVLD + {$SET_STATE_RAM '1F64-1F6B:SFR'} // Bank 62 : ANSELE, WPUE, ODCONE, SLRCONE, INLVLE, IOCEP, IOCEN, IOCEF + {$SET_STATE_RAM '1FE4-1FEB:SFR'} // Bank 63 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM '1FED-1FEF:SFR'} // Bank 63 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:3F'} // BSR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '00B:C1'} // INTCON bits 5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:FB'} // PORTE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:DF'} // TRISA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '016:FB'} // TRISE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:DF'} // LATA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:FB'} // LATE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:81'} // ADCPCON0 bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '09F:3F'} // ADPCH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '10D:1F'} // ADACQH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '10E:1F'} // ADCAP bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:1F'} // ADPREH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:D5'} // ADCON0 bits 5,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:E1'} // ADCON1 bits 4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:7F'} // ADCON3 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:F7'} // ADSTAT bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:03'} // ADREF bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '117:1F'} // ADACT bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:3F'} // ADCLK bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '20E:37'} // T1CON bits 7,6,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '20F:FC'} // T1GCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:1F'} // T1GATE bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '211:0F'} // T1CLK bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '290:0F'} // T2CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '291:1F'} // T2RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:0F'} // T4CLKCON bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '297:1F'} // T4RST bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '30F:07'} // CCP1CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '313:07'} // CCP2CAP bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '314:C0'} // PWM3DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:B0'} // PWM3CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '318:C0'} // PWM4DCL bits 5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:B0'} // PWM4CON bits 6,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '498:BF'} // SMT1CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '499:CF'} // SMT1CON1 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '49A:E7'} // SMT1STAT bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49B:07'} // SMT1CLK bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '49C:1F'} // SMT1SIG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '49D:1F'} // SMT1WIN bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '59E:BF'} // T0CON0 bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60C:01'} // CWG1CLKCON bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '60D:0F'} // CWG1ISM bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '60E:3F'} // CWG1DBR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '60F:3F'} // CWG1DBF bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '610:C7'} // CWG1CON0 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '611:2F'} // CWG1CON1 bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '612:FC'} // CWG1AS0 bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '613:7F'} // CWG1AS1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '70C:31'} // PIR0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '70D:C3'} // PIR1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70E:43'} // PIR2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '70F:F3'} // PIR3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '710:0B'} // PIR4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '711:F1'} // PIR5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '712:83'} // PIR6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '713:21'} // PIR7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '714:C7'} // PIR8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '716:31'} // PIE0 bits 7,6,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '717:C3'} // PIE1 bits 5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '718:43'} // PIE2 bits 7,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '719:F3'} // PIE3 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71A:0B'} // PIE4 bits 7,6,5,4,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71B:F1'} // PIE5 bits 3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71C:83'} // PIE6 bits 6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '71D:21'} // PIE7 bits 7,6,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '71E:C7'} // PIE8 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '796:E5'} // PMD0 bits 4,3,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '797:17'} // PMD1 bits 7,6,5,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '798:E7'} // PMD2 bits 4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '799:0F'} // PMD3 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '79A:D1'} // PMD4 bits 5,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '79B:7E'} // PMD5 bits 7,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '80C:3F'} // WDTCON0 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '80D:77'} // WDTCON1 bits 7,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '810:7F'} // WDTTMR bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '811:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '812:02'} // VREGCON bits 7,6,5,4,3,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '814:03'} // PCON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '81D:3F'} // NVMDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '81E:7F'} // NVMCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88C:F7'} // CPUDOZE bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '88D:7F'} // OSCCON1 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88E:7F'} // OSCCON2 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '88F:D8'} // OSCCON3 bits 5,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '890:FD'} // OSCSTAT bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '891:FC'} // OSCEN bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '892:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '893:07'} // OSCFRQ bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '894:CA'} // ACTCON bits 5,4,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90E:BC'} // DAC1CON0 bits 6,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '90F:1F'} // DAC1CON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '91F:B3'} // ZCDCON bits 6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '98F:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '990:D3'} // CM1CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '991:03'} // CM1CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '992:07'} // CM1NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '993:07'} // CM1PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '994:D3'} // CM2CON0 bits 5,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '995:03'} // CM2CON1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '996:07'} // CM2NSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '997:07'} // CM2PSEL bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'A1F:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0C:BB'} // RTCCON bits 6,2 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C0E:FC'} // ALRMCON bits 1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C11:0F'} // MONTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C12:07'} // WEEKDAY bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C13:3F'} // DAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C14:3F'} // HOURS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C15:7F'} // MINUTES bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C16:7F'} // SECONDS bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C17:1F'} // ALRMMTH bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C18:07'} // ALRMWD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C19:3F'} // ALRMDAY bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1A:3F'} // ALRMHR bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1B:7F'} // ALRMMIN bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C1C:7F'} // ALRMSEC bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8D:0F'} // PORTH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8E:DF'} // TRISG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C8F:0F'} // TRISH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C90:DF'} // LATG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'C91:0F'} // LATH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D0D:BF'} // LCDPS bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D14:C7'} // LCDVCON1 bits 5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D15:8F'} // LCDVCON2 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D16:07'} // LCDREF bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D1D:3F'} // LCDDATA5 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D23:3F'} // LCDDATA11 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D29:3F'} // LCDDATA17 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D2F:3F'} // LCDDATA23 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D35:3F'} // LCDDATA29 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D3B:3F'} // LCDDATA35 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D41:3F'} // LCDDATA41 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1D47:3F'} // LCDDATA47 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E0F:0F'} // CLCDATA bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E10:BF'} // CLC1CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E11:8F'} // CLC1POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1A:BF'} // CLC2CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E1B:8F'} // CLC2POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E24:BF'} // CLC3CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E25:8F'} // CLC3POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2E:BF'} // CLC4CON bit 6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E2F:8F'} // CLC4POL bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E38:3F'} // RF0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E39:3F'} // RF1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3A:3F'} // RF2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3B:3F'} // RF3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3C:3F'} // RF4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3D:3F'} // RF5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3E:3F'} // RF6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E3F:3F'} // RF7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E40:3F'} // RG0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E41:3F'} // RG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E42:3F'} // RG2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E43:3F'} // RG3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E44:3F'} // RG4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E46:3F'} // RG6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E47:3F'} // RG7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E48:3F'} // RH0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E49:3F'} // RH1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4A:3F'} // RH2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E4B:3F'} // RH3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E55:80'} // HIDRVF bits 6,5,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5B:DF'} // ANSELG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5D:DF'} // ODCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E5E:DF'} // SLRCONG bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E60:20'} // IOCGP bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E61:20'} // IOCGN bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E62:20'} // IOCGF bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E67:0F'} // WPUH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E68:0F'} // ODCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E69:0F'} // SLRCONH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E6A:0F'} // INLVLH bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E8F:01'} // PPSLOCK bits 7,6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E90:3F'} // INTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E91:3F'} // T0CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E92:3F'} // T1CKIPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E93:3F'} // T1GPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9C:3F'} // T2INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1E9D:3F'} // T4INPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA1:3F'} // CCP1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA2:3F'} // CCP2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EA9:3F'} // SMT1WINPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EAA:3F'} // SMT1SIGPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EB1:3F'} // CWG1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBB:3F'} // CLCIN0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBC:3F'} // CLCIN1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBD:3F'} // CLCIN2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EBE:3F'} // CLCIN3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC3:3F'} // ADACTPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC5:3F'} // SSP1CLKPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC6:3F'} // SSP1DATPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1EC7:3F'} // SSP1SSPPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECB:3F'} // RX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECC:3F'} // TX1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECD:3F'} // RX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1ECE:3F'} // TX2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F10:3F'} // RA0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F11:3F'} // RA1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F12:3F'} // RA2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F13:3F'} // RA3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F14:3F'} // RA4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F15:3F'} // RA5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F16:3F'} // RA6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F17:3F'} // RA7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F18:3F'} // RB0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F19:3F'} // RB1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1A:3F'} // RB2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1B:3F'} // RB3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1C:3F'} // RB4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1D:3F'} // RB5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1E:3F'} // RB6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F1F:3F'} // RB7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F20:3F'} // RC0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F21:3F'} // RC1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F22:3F'} // RC2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F23:3F'} // RC3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F24:3F'} // RC4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F25:3F'} // RC5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F26:3F'} // RC6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F27:3F'} // RC7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F28:3F'} // RD0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F29:3F'} // RD1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2A:3F'} // RD2PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2B:3F'} // RD3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2C:3F'} // RD4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2D:3F'} // RD5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2E:3F'} // RD6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F2F:3F'} // RD7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F30:3F'} // RE0PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F31:3F'} // RE1PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F33:3F'} // RE3PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F34:3F'} // RE4PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F35:3F'} // RE5PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F36:3F'} // RE6PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F37:3F'} // RE7PPS bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F38:DF'} // ANSELA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3A:DF'} // ODCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F3B:DF'} // SLRCONA bit 5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F64:FB'} // ANSELE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F65:FB'} // WPUE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F66:FB'} // ODCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F67:FB'} // SLRCONE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F68:FB'} // INLVLE bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F69:FB'} // IOCEP bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6A:FB'} // IOCEN bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1F6B:FB'} // IOCEF bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '1FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + + // -- PIN mapping -- + + // Pin 1 : VLCD2/ANE1/RE1 + // Pin 2 : VLCD1/ANE0/RE0 + // Pin 3 : SEG42/ANG0/RG0 + // Pin 4 : SEG43/ANG1/RG1 + // Pin 5 : SEG44/ANG2/RG2 + // Pin 6 : SEG45/ANG3/RG3 + // Pin 7 : VPP/ICDMCLR_n/MCLR_n/IOCG5/RG5 + // Pin 8 : SEG26/ANG4/RG4 + // Pin 9 : AVSS/VSS + // Pin 10 : AVDD/VDD + // Pin 11 : SEG25/ANF7/C1IN3-/C2IN3-/HIF7/RF7 + // Pin 12 : SEG24/ANF6/C1IN0+/RF6 + // Pin 13 : DAC1OUT1/SEG23/ANF5/C1IN1-/C2IN1-/RF5 + // Pin 14 : SEG22/ANF4/C2IN0+/RF4 + // Pin 15 : SEG21/ANF3/C1IN2-/C2IN2-/RF3 + // Pin 16 : SEG20/ANF1/C1OUT/RF2 + // Pin 17 : SEG19/ANF1/C2OUT/RF1 + // Pin 18 : SEG41/ANF0/C1IN0-/C2IN0-/RF0 + // Pin 19 : COM7/SEG15/ANG7/RG7 + // Pin 20 : COM6/ANG6/RG6 + // Pin 21 : VREF+/SEG35/ANA3/RA3 + // Pin 22 : SEG34/ANA2/C1IN1+/C2IN1+/RA2 + // Pin 23 : SEG18/ANA1/RA1 + // Pin 24 : SEG33/ANA0/C1IN4-/C2IN4-/RA0 + // Pin 25 : COM5/RH1 + // Pin 26 : COM4/RH0 + // Pin 27 : VBAT/RA5 + // Pin 28 : SEG14/ANA4/C1IN1+/C2IN1+/RA4 + // Pin 29 : SOSCI/SEG32/IOCC1/RC1 + // Pin 30 : SOSCO/SEG40/IOCC0/RC0 + // Pin 31 : SEG27/IOCC6/RC6 + // Pin 32 : SEG28/IOCC7/RC7 + // Pin 33 : SEG13/IOCC2/RC2 + // Pin 34 : SEG17/IOCC3/RC3 + // Pin 35 : SEG16/IOCC4/RC4 + // Pin 36 : SEG12/IOCC5/RC5 + // Pin 37 : ICSPDAT/ICDDAT/DAC1OUT2/SEG39/ANB7/IOCB7/RB7 + // Pin 38 : VDD + // Pin 39 : CLKIN/SEG37/ANA7/RA7 + // Pin 40 : CLKOUT/SEG36/ANA6/RA6 + // Pin 41 : VSS + // Pin 42 : ICSPCLK/ICDCLK/SEG38/ANB6/IOCB6/RB6 + // Pin 43 : SEG29/ANB5/IOCB5/RB5 + // Pin 44 : SEG11/ANB4/IOCB4/RB4 + // Pin 45 : SEG10/ANB3/IOCB3/RB3 + // Pin 46 : SEG9/ANB2/IOCB2/RB2 + // Pin 47 : SEG8/ANB1/IOCB1/RB1 + // Pin 48 : ZCD/SEG30/ANB0/IOCB0/RB0 + // Pin 49 : SEG7/AND7/RD7 + // Pin 50 : SEG6/AND6/RD6 + // Pin 51 : SEG5/AND5/RD5 + // Pin 52 : SEG4/AND4/RD4 + // Pin 53 : SEG3/AND3/RD3 + // Pin 54 : SEG2/AND2/RD2 + // Pin 55 : SEG1/AND1/RD1 + // Pin 56 : SEG47/CFLY2/RH3 + // Pin 57 : SEG46/CFLY1/RH2 + // Pin 58 : SEG0/AND0/RD0 + // Pin 59 : SEG31/ANE7/IOCE7/RE7 + // Pin 60 : COM3/ANE6/IOCE6/RE6 + // Pin 61 : COM2/ANE5/IOCE5/RE5 + // Pin 62 : COM1/ANE4/IOCE4/RE4 + // Pin 63 : COM0/ANE3/IOCE3/RE3 + // Pin 64 : VLCD3/RE2 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '011:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN 'C8C:0-3,1-4,2-5,3-6,4-8,5-7,6-20,7-19'} // PORTG + {$MAP_RAM_TO_PIN 'C8D:0-26,1-25,2-57,3-56'} // PORTH + + + // -- Bits Configuration -- + + // FEXTOSC : External Oscillator mode selection bits + {$define _FEXTOSC_ECH = $3FFF} // EC above 8MHz; PFM set to high power + {$define _FEXTOSC_ECM = $3FFE} // EC for 500kHz to 8MHz; PFM set to medium power + {$define _FEXTOSC_ECL = $3FFD} // EC below 500kHz; PFM set to low power + {$define _FEXTOSC_OFF = $3FF8} // Oscillator not enabled + + // RSTOSC : Power-up default value for COSC bits + {$define _RSTOSC_EXT1X = $3FFF} // EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINT1 = $3FEF} // HFINTOSC (1MHz) + {$define _RSTOSC_LFINT = $3FDF} // LFINTOSC + {$define _RSTOSC_SOSC = $3FCF} // SOSC + {$define _RSTOSC_Reserved = $3FBF} // Reserved + {$define _RSTOSC_EXT4X = $3FAF} // EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits + {$define _RSTOSC_HFINTPLL = $3F9F} // HFINTOSC with 2x PLL, with OSCFRQ = 16 MHz and CDIV = 1:1 (FOSC = 32 MHz) + {$define _RSTOSC_HFINT32 = $3F8F} // HFINTOSC with OSCFRQ= 32 MHz and CDIV = 1:1 + + // CLKOUTEN : Clock Out Enable bit + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled; i/o or oscillator function on OSC2 + {$define _CLKOUTEN_ON = $3EFF} // CLKOUT function is enabled; FOSC/4 clock appears at OSC2 + + // VBATEN : VBAT Pin Enable bit + {$define _VBATEN_ON = $3DFF} // VBAT functionality is enabled + {$define _VBATEN_OFF = $3FFF} // VBAT functionality is disabled + + // LCDPEN : LCD Charge Pump Mode bit + {$define _LCDPEN_OFF = $3BFF} // LCD Charge Pump is disabled. + {$define _LCDPEN_ON = $3FFF} // LCD Charge Pump is enabled + + // CSWEN : Clock Switch Enable bit + {$define _CSWEN_ON = $3FFF} // Writing to NOSC and NDIV is allowed + {$define _CSWEN_OFF = $37FF} // The NOSC and NDIV bits cannot be changed by user software + + // FCMEN : Fail-Safe Clock Monitor Enable bit + {$define _FCMEN_ON = $3FFF} // FSCM timer enabled + {$define _FCMEN_OFF = $1FFF} // FSCM timer disabled + + // MCLRE : Master Clear Enable bit + {$define _MCLRE_ON = $3FFF} // MCLR pin is Master Clear function + {$define _MCLRE_OFF = $3FFE} // MCLR pin function is port defined function + + // PWRTE : Power-up Timer selection bits + {$define _PWRTE_OFF = $3FFF} // PWRT disable + {$define _PWRTE_PWRT_64 = $3FFD} // PWRT set at 64 ms + {$define _PWRTE_PWRT_16 = $3FFB} // PWRT set at 16 ms + {$define _PWRTE_PWRT_1 = $3FF9} // PWRT set at 1 ms + + // LPBOREN : Low-Power BOR enable bit + {$define _LPBOREN_OFF = $3FFF} // ULPBOR disabled + {$define _LPBOREN_ON = $3FDF} // ULPBOR enabled + + // BOREN : Brown-out reset enable bits + {$define _BOREN_ON = $3FFF} // Brown-out Reset Enabled, SBOREN bit is ignored + {$define _BOREN_NSLEEP = $3FBF} // Brown-out Reset enabled while running, disabled in sleep; SBOREN is ignored + {$define _BOREN_SBOREN = $3F7F} // Brown-out reset enabled according to SBOREN bit + {$define _BOREN_OFF = $3F3F} // Brown-out reset disabled + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (VBOR) set to 1.9V on LF, and 2.45V on F Devices + {$define _BORV_HI = $3DFF} // Brown-out Reset Voltage (VBOR) is set to 2.7V + + // ZCD : Zero-cross detect disable + {$define _ZCD_OFF = $3FFF} // Zero-cross detect circuit is disabled at POR. + {$define _ZCD_ON = $3BFF} // Zero-cross detect circuit is always enabled + + // PPS1WAY : Peripheral Pin Select one-way control + {$define _PPS1WAY_ON = $3FFF} // The PPSLOCK bit can be cleared and set only once in software + {$define _PPS1WAY_OFF = $37FF} // The PPSLOCK bit can be set and cleared repeatedly by software + + // STVREN : Stack Overflow/Underflow Reset Enable bit + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a reset + {$define _STVREN_OFF = $2FFF} // Stack Overflow or Underflow will not cause a reset + + // WDTCPS : WDT Period Select bits + {$define _WDTCPS_WDTCPS_0 = $3FE0} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_1 = $3FE1} // Divider ratio 1:64 + {$define _WDTCPS_WDTCPS_2 = $3FE2} // Divider ratio 1:128 + {$define _WDTCPS_WDTCPS_3 = $3FE3} // Divider ratio 1:256 + {$define _WDTCPS_WDTCPS_4 = $3FE4} // Divider ratio 1:512 + {$define _WDTCPS_WDTCPS_5 = $3FE5} // Divider ratio 1:1024 + {$define _WDTCPS_WDTCPS_6 = $3FE6} // Divider ratio 1:2048 + {$define _WDTCPS_WDTCPS_7 = $3FE7} // Divider ratio 1:4096 + {$define _WDTCPS_WDTCPS_8 = $3FE8} // Divider ratio 1:8192 + {$define _WDTCPS_WDTCPS_9 = $3FE9} // Divider ratio 1:16384 + {$define _WDTCPS_WDTCPS_10 = $3FEA} // Divider ratio 1:32768 + {$define _WDTCPS_WDTCPS_11 = $3FEB} // Divider ratio 1:65536 + {$define _WDTCPS_WDTCPS_12 = $3FEC} // Divider ratio 1:131072 + {$define _WDTCPS_WDTCPS_13 = $3FED} // Divider ratio 1:262144 + {$define _WDTCPS_WDTCPS_14 = $3FEE} // Divider ratio 1:524299 + {$define _WDTCPS_WDTCPS_15 = $3FEF} // Divider ratio 1:1048576 + {$define _WDTCPS_WDTCPS_16 = $3FF0} // Divider ratio 1:2097152 + {$define _WDTCPS_WDTCPS_17 = $3FF1} // Divider ratio 1:4194304 + {$define _WDTCPS_WDTCPS_18 = $3FF2} // Divider ratio 1:8388608 + {$define _WDTCPS_WDTCPS_19 = $3FF3} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_20 = $3FF4} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_21 = $3FF5} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_22 = $3FF6} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_23 = $3FF7} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_24 = $3FF8} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_25 = $3FF9} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_26 = $3FFA} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_27 = $3FFB} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_28 = $3FFC} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_29 = $3FFD} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_30 = $3FFE} // Divider ratio 1:32 + {$define _WDTCPS_WDTCPS_31 = $3FFF} // Divider ratio 1:65536; software control of WDTPS + + // WDTE : WDT operating mode + {$define _WDTE_OFF = $3F9F} // WDT Disabled, SWDTEN is ignored + {$define _WDTE_SWDTEN = $3FBF} // WDT enabled/disabled by SWDTEN bit in WDTCON0 + {$define _WDTE_NSLEEP = $3FDF} // WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored + {$define _WDTE_ON = $3FFF} // WDT enabled regardless of sleep; SWDTEN ignored + + // WDTCWS : WDT Window Select bits + {$define _WDTCWS_WDTCWS_0 = $38FF} // window delay = 87.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_1 = $39FF} // window delay = 75 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_2 = $3AFF} // window delay = 62.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_3 = $3BFF} // window delay = 50 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_4 = $3CFF} // window delay = 37.5 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_5 = $3DFF} // window delay = 25 percent of time; no software control; keyed access required + {$define _WDTCWS_WDTCWS_6 = $3EFF} // window always open (100%); no software control; keyed access required + {$define _WDTCWS_WDTCWS_7 = $3FFF} // window always open (100%); software control; keyed access not required + + // WDTCCS : WDT input clock selector + {$define _WDTCCS_LFINTOSC = $07FF} // WDT reference clock is the 31.0kHz LFINTOSC output + {$define _WDTCCS_HFINTOSC = $0FFF} // WDT reference clock is the 31.25 kHz HFINTOSC + {$define _WDTCCS_SOSC = $17FF} // WDT reference clock is the SOSC + {$define _WDTCCS_SC = $3FFF} // Software Control + + // BBSIZE : Boot Block Size Selection bits + {$define _BBSIZE_65536 = $3FF8} // Boot Block Size (Words) 65536 + {$define _BBSIZE_32768 = $3FF9} // Boot Block Size (Words) 32768 + {$define _BBSIZE_16384 = $3FFA} // Boot Block Size (Words) 16384 + {$define _BBSIZE_8192 = $3FFB} // Boot Block Size (Words) 8192 + {$define _BBSIZE_4096 = $3FFC} // Boot Block Size (Words) 4069 + {$define _BBSIZE_2048 = $3FFD} // Boot Block Size (Words) 2048 + {$define _BBSIZE_1024 = $3FFE} // Boot Block Size (Words) 1024 + {$define _BBSIZE_512 = $3FFF} // Boot Block Size (Words) 512 + + // BBEN : Boot Block Enable bit + {$define _BBEN_OFF = $3FFF} // Boot Block disabled + {$define _BBEN_ON = $3FF7} // Boot Block enabled + + // SAFEN : SAF Enable bit + {$define _SAFEN_OFF = $3FFF} // SAF disabled + {$define _SAFEN_ON = $3FEF} // SAF enabled + + // WRTAPP : Application Block Write Protection bit + {$define _WRTAPP_OFF = $3FFF} // Application Block NOT write-protected + {$define _WRTAPP_ON = $3F7F} // Application Block write-protected + + // WRTB : Boot Block Write Protection bit + {$define _WRTB_OFF = $3FFF} // Boot Block NOT write-protected + {$define _WRTB_ON = $3EFF} // Boot Block write-protected + + // WRTC : Configuration Register Write Protection bit + {$define _WRTC_OFF = $3FFF} // Configuration Words NOT write-protected + {$define _WRTC_ON = $3DFF} // Configuration Word write-protected + + // WRTD : Data EEPROM Write Protection bit + {$define _WRTD_OFF = $3FFF} // Data EEPROM NOT write-protected + {$define _WRTD_ON = $3BFF} // Data EEPROM write-protected + + // WRTSAF : Storage Area Flash Write Protection bit + {$define _WRTSAF_OFF = $3FFF} // SAF NOT write-protected + {$define _WRTSAF_ON = $37FF} // SAF write-protected + + // LVP : Low Voltage Programming Enable bit + {$define _LVP_ON = $3FFF} // Low Voltage programming enabled. MCLR/Vpp pin function is MCLR. + {$define _LVP_OFF = $1FFF} // High Voltage on MCLR/Vpp must be used for programming + + // CP : UserNVM Program memory code protection bit + {$define _CP_OFF = $3FFF} // UserNVM code protection disabled + {$define _CP_ON = $3FFE} // UserNVM code protection enabled + +implementation +end. diff --git a/devices17/PIC16F1933.pas b/devices17/PIC16F1933.pas new file mode 100644 index 00000000..2262d8cd --- /dev/null +++ b/devices17/PIC16F1933.pas @@ -0,0 +1,1067 @@ +unit PIC16F1933; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1933'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '110-11B:SFR'} // Bank 2 : LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-799:SFR'} // Bank 15 : LCDSE0, LCDSE1 + {$SET_STATE_RAM '7A0-7A1:SFR'} // Bank 15 : LCDDATA0, LCDDATA1 + {$SET_STATE_RAM '7A3-7A4:SFR'} // Bank 15 : LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '7A6-7A7:SFR'} // Bank 15 : LCDDATA6, LCDDATA7 + {$SET_STATE_RAM '7A9-7AA:SFR'} // Bank 15 : LCDDATA9, LCDDATA10 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:07'} // CPSCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:08'} // LATE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/COM3/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/CCP5/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN/SEG2 + // Pin 10 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 11 : RC0/T1OSO/T1CKI/P2B + // Pin 12 : RC1/T1OSI/CCP2/P2A + // Pin 13 : RC2/CCP1/P1A/SEG3 + // Pin 14 : RC3/SCK/SCL/SEG6 + // Pin 15 : RC4/SDI/SDA/T1G/SEG11 + // Pin 16 : RC5/SDO/SEG10 + // Pin 17 : RC6/TX/CK/CCP3/P3A/SEG9 + // Pin 18 : RC7/RX/DT/P3B/SEG8 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/CPS0/CCP4/SRI/INT/SEG0 + // Pin 22 : RB1/AN10/C12IN3-/CPS1/P1C/VLCD1 + // Pin 23 : RB2/AN8/CPS2/P1B/VLCD2 + // Pin 24 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 25 : RB4/AN11/CPS4/P1D/COM0 + // Pin 26 : RB5/AN13/CPS5/P2B/CCP3/P3A/T1G/COM1 + // Pin 27 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 28 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1934.pas b/devices17/PIC16F1934.pas new file mode 100644 index 00000000..c473ccf9 --- /dev/null +++ b/devices17/PIC16F1934.pas @@ -0,0 +1,1169 @@ +unit PIC16F1934; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1934'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 2} +{$SET PIC_MAXFLASH = 4096} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $079A; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $07A2; + LCDDATA2_SEG23COM0 : bit absolute LCDDATA2.7; + LCDDATA2_SEG22COM0 : bit absolute LCDDATA2.6; + LCDDATA2_SEG21COM0 : bit absolute LCDDATA2.5; + LCDDATA2_SEG20COM0 : bit absolute LCDDATA2.4; + LCDDATA2_SEG19COM0 : bit absolute LCDDATA2.3; + LCDDATA2_SEG18COM0 : bit absolute LCDDATA2.2; + LCDDATA2_SEG17COM0 : bit absolute LCDDATA2.1; + LCDDATA2_SEG16COM0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $07A5; + LCDDATA5_SEG23COM1 : bit absolute LCDDATA5.7; + LCDDATA5_SEG22COM1 : bit absolute LCDDATA5.6; + LCDDATA5_SEG21COM1 : bit absolute LCDDATA5.5; + LCDDATA5_SEG20COM1 : bit absolute LCDDATA5.4; + LCDDATA5_SEG19COM1 : bit absolute LCDDATA5.3; + LCDDATA5_SEG18COM1 : bit absolute LCDDATA5.2; + LCDDATA5_SEG17COM1 : bit absolute LCDDATA5.1; + LCDDATA5_SEG16COM1 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $07A8; + LCDDATA8_SEG23COM2 : bit absolute LCDDATA8.7; + LCDDATA8_SEG22COM2 : bit absolute LCDDATA8.6; + LCDDATA8_SEG21COM2 : bit absolute LCDDATA8.5; + LCDDATA8_SEG20COM2 : bit absolute LCDDATA8.4; + LCDDATA8_SEG19COM2 : bit absolute LCDDATA8.3; + LCDDATA8_SEG18COM2 : bit absolute LCDDATA8.2; + LCDDATA8_SEG17COM2 : bit absolute LCDDATA8.1; + LCDDATA8_SEG16COM2 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $07AB; + LCDDATA11_SEG23COM3 : bit absolute LCDDATA11.7; + LCDDATA11_SEG22COM3 : bit absolute LCDDATA11.6; + LCDDATA11_SEG21COM3 : bit absolute LCDDATA11.5; + LCDDATA11_SEG20COM3 : bit absolute LCDDATA11.4; + LCDDATA11_SEG19COM3 : bit absolute LCDDATA11.3; + LCDDATA11_SEG18COM3 : bit absolute LCDDATA11.2; + LCDDATA11_SEG17COM3 : bit absolute LCDDATA11.1; + LCDDATA11_SEG16COM3 : bit absolute LCDDATA11.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-013:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-093:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11B:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-196:SFR'} // Bank 3 : ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-79A:SFR'} // Bank 15 : LCDSE0, LCDSE1, LCDSE2 + {$SET_STATE_RAM '7A0-7AB:SFR'} // Bank 15 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : RE0/AN5/P3A/CCP3/SEG21 + // Pin 9 : RE1/AN6/P3B/SEG22 + // Pin 10 : RE2/AN7/CCP5/SEG23 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN/SEG2 + // Pin 14 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 15 : RC0/T1OSO/T1CKI/P2B + // Pin 16 : RC1/T1OSI/CCP2/P2A + // Pin 17 : RC2/CCP1/P1A/SEG3 + // Pin 18 : RC3/SCL/SCK/SEG6 + // Pin 19 : RD0/CPS8/COM3 + // Pin 20 : RD1/CPS9/CCP4 + // Pin 21 : RD2/CPS10/P2B + // Pin 22 : RD3/CPS11/P2C/SEG16 + // Pin 23 : RC4/SDI/SDA/T1G/SEG11 + // Pin 24 : RC5/SDO/SEG10 + // Pin 25 : RC6/TX/CK/SEG9 + // Pin 26 : RC7/RX/DT/SEG8 + // Pin 27 : RD4/CPS12/P2D/SEG17 + // Pin 28 : RD5/CPS13/P1B/SEG18 + // Pin 29 : RD6/CPS14/P1C/SEG19 + // Pin 30 : RD7/CPS15/P1D/SEG20 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/CPS0/SRI/INT/SEG0 + // Pin 34 : RB1/AN10/C12IN3-/CPS1/VLCD1 + // Pin 35 : RB2/AN8/CPS2/VLCD2 + // Pin 36 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 37 : RB4/AN11/CPS4/COM0 + // Pin 38 : RB5/AN13/CPS5/CCP3/P3A/T1G/COM1 + // Pin 39 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 40 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 7FFh write protected, 800h to FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1936.pas b/devices17/PIC16F1936.pas new file mode 100644 index 00000000..060dd9d0 --- /dev/null +++ b/devices17/PIC16F1936.pas @@ -0,0 +1,1070 @@ +unit PIC16F1936; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1936'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '110-11B:SFR'} // Bank 2 : LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-799:SFR'} // Bank 15 : LCDSE0, LCDSE1 + {$SET_STATE_RAM '7A0-7A1:SFR'} // Bank 15 : LCDDATA0, LCDDATA1 + {$SET_STATE_RAM '7A3-7A4:SFR'} // Bank 15 : LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '7A6-7A7:SFR'} // Bank 15 : LCDDATA6, LCDDATA7 + {$SET_STATE_RAM '7A9-7AA:SFR'} // Bank 15 : LCDDATA9, LCDDATA10 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:07'} // CPSCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:08'} // LATE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/COM3/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/CCP5/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN/SEG2 + // Pin 10 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 11 : RC0/T1OSO/T1CKI/P2B + // Pin 12 : RC1/T1OSI/CCP2/P2A + // Pin 13 : RC2/CCP1/P1A/SEG3 + // Pin 14 : RC3/SCK/SCL/SEG6 + // Pin 15 : RC4/SDI/SDA/T1G/SEG11 + // Pin 16 : RC5/SDO/SEG10 + // Pin 17 : RC6/TX/CK/CCP3/P3A/SEG9 + // Pin 18 : RC7/RX/DT/P3B/SEG8 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/CPS0/CCP4/SRI/INT/SEG0 + // Pin 22 : RB1/AN10/C12IN3-/CPS1/P1C/VLCD1 + // Pin 23 : RB2/AN8/CPS2/P1B/VLCD2 + // Pin 24 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 25 : RB4/AN11/CPS4/P1D/COM0 + // Pin 26 : RB5/AN13/CPS5/P2B/CCP3/P3A/T1G/COM1 + // Pin 27 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 28 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1937.pas b/devices17/PIC16F1937.pas new file mode 100644 index 00000000..d9bd76a6 --- /dev/null +++ b/devices17/PIC16F1937.pas @@ -0,0 +1,1172 @@ +unit PIC16F1937; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1937'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $079A; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $07A2; + LCDDATA2_SEG23COM0 : bit absolute LCDDATA2.7; + LCDDATA2_SEG22COM0 : bit absolute LCDDATA2.6; + LCDDATA2_SEG21COM0 : bit absolute LCDDATA2.5; + LCDDATA2_SEG20COM0 : bit absolute LCDDATA2.4; + LCDDATA2_SEG19COM0 : bit absolute LCDDATA2.3; + LCDDATA2_SEG18COM0 : bit absolute LCDDATA2.2; + LCDDATA2_SEG17COM0 : bit absolute LCDDATA2.1; + LCDDATA2_SEG16COM0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $07A5; + LCDDATA5_SEG23COM1 : bit absolute LCDDATA5.7; + LCDDATA5_SEG22COM1 : bit absolute LCDDATA5.6; + LCDDATA5_SEG21COM1 : bit absolute LCDDATA5.5; + LCDDATA5_SEG20COM1 : bit absolute LCDDATA5.4; + LCDDATA5_SEG19COM1 : bit absolute LCDDATA5.3; + LCDDATA5_SEG18COM1 : bit absolute LCDDATA5.2; + LCDDATA5_SEG17COM1 : bit absolute LCDDATA5.1; + LCDDATA5_SEG16COM1 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $07A8; + LCDDATA8_SEG23COM2 : bit absolute LCDDATA8.7; + LCDDATA8_SEG22COM2 : bit absolute LCDDATA8.6; + LCDDATA8_SEG21COM2 : bit absolute LCDDATA8.5; + LCDDATA8_SEG20COM2 : bit absolute LCDDATA8.4; + LCDDATA8_SEG19COM2 : bit absolute LCDDATA8.3; + LCDDATA8_SEG18COM2 : bit absolute LCDDATA8.2; + LCDDATA8_SEG17COM2 : bit absolute LCDDATA8.1; + LCDDATA8_SEG16COM2 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $07AB; + LCDDATA11_SEG23COM3 : bit absolute LCDDATA11.7; + LCDDATA11_SEG22COM3 : bit absolute LCDDATA11.6; + LCDDATA11_SEG21COM3 : bit absolute LCDDATA11.5; + LCDDATA11_SEG20COM3 : bit absolute LCDDATA11.4; + LCDDATA11_SEG19COM3 : bit absolute LCDDATA11.3; + LCDDATA11_SEG18COM3 : bit absolute LCDDATA11.2; + LCDDATA11_SEG17COM3 : bit absolute LCDDATA11.1; + LCDDATA11_SEG16COM3 : bit absolute LCDDATA11.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-013:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-093:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11B:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-196:SFR'} // Bank 3 : ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-79A:SFR'} // Bank 15 : LCDSE0, LCDSE1, LCDSE2 + {$SET_STATE_RAM '7A0-7AB:SFR'} // Bank 15 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : RE0/AN5/P3A/CCP3/SEG21 + // Pin 9 : RE1/AN6/P3B/SEG22 + // Pin 10 : RE2/AN7/CCP5/SEG23 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN/SEG2 + // Pin 14 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 15 : RC0/T1OSO/T1CKI/P2B + // Pin 16 : RC1/T1OSI/CCP2/P2A + // Pin 17 : RC2/CCP1/P1A/SEG3 + // Pin 18 : RC3/SCL/SCK/SEG6 + // Pin 19 : RD0/CPS8/COM3 + // Pin 20 : RD1/CPS9/CCP4 + // Pin 21 : RD2/CPS10/P2B + // Pin 22 : RD3/CPS11/P2C/SEG16 + // Pin 23 : RC4/SDI/SDA/T1G/SEG11 + // Pin 24 : RC5/SDO/SEG10 + // Pin 25 : RC6/TX/CK/SEG9 + // Pin 26 : RC7/RX/DT/SEG8 + // Pin 27 : RD4/CPS12/P2D/SEG17 + // Pin 28 : RD5/CPS13/P1B/SEG18 + // Pin 29 : RD6/CPS14/P1C/SEG19 + // Pin 30 : RD7/CPS15/P1D/SEG20 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/CPS0/SRI/INT/SEG0 + // Pin 34 : RB1/AN10/C12IN3-/CPS1/VLCD1 + // Pin 35 : RB2/AN8/CPS2/VLCD2 + // Pin 36 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 37 : RB4/AN11/CPS4/COM0 + // Pin 38 : RB5/AN13/CPS5/CCP3/P3A/T1G/COM1 + // Pin 39 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 40 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1938.pas b/devices17/PIC16F1938.pas new file mode 100644 index 00000000..d36117a0 --- /dev/null +++ b/devices17/PIC16F1938.pas @@ -0,0 +1,1077 @@ +unit PIC16F1938; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1938'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 28} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-00E:SFR'} // Bank 0 : PORTA, PORTB, PORTC + {$SET_STATE_RAM '010-013:SFR'} // Bank 0 : PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-08E:SFR'} // Bank 1 : TRISA, TRISB, TRISC + {$SET_STATE_RAM '090-093:SFR'} // Bank 1 : TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-10E:SFR'} // Bank 2 : LATA, LATB, LATC + {$SET_STATE_RAM '110-11B:SFR'} // Bank 2 : LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '191-196:SFR'} // Bank 3 : EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-799:SFR'} // Bank 15 : LCDSE0, LCDSE1 + {$SET_STATE_RAM '7A0-7A1:SFR'} // Bank 15 : LCDDATA0, LCDDATA1 + {$SET_STATE_RAM '7A3-7A4:SFR'} // Bank 15 : LCDDATA3, LCDDATA4 + {$SET_STATE_RAM '7A6-7A7:SFR'} // Bank 15 : LCDDATA6, LCDDATA7 + {$SET_STATE_RAM '7A9-7AA:SFR'} // Bank 15 : LCDDATA9, LCDDATA10 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:08'} // PORTE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:07'} // CPSCON1 bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:08'} // TRISE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:08'} // LATE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/COM3/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/CCP5/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : Vss + // Pin 9 : RA7/OSC1/CLKIN/SEG2 + // Pin 10 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 11 : RC0/T1OSO/T1CKI/P2B + // Pin 12 : RC1/T1OSI/CCP2/P2A + // Pin 13 : RC2/CCP1/P1A/SEG3 + // Pin 14 : RC3/SCK/SCL/SEG6 + // Pin 15 : RC4/SDI/SDA/T1G/SEG11 + // Pin 16 : RC5/SDO/SEG10 + // Pin 17 : RC6/TX/CK/CCP3/P3A/SEG9 + // Pin 18 : RC7/RX/DT/P3B/SEG8 + // Pin 19 : Vss + // Pin 20 : Vdd + // Pin 21 : RB0/AN12/CPS0/CCP4/SRI/INT/SEG0 + // Pin 22 : RB1/AN10/C12IN3-/CPS1/P1C/VLCD1 + // Pin 23 : RB2/AN8/CPS2/P1B/VLCD2 + // Pin 24 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 25 : RB4/AN11/CPS4/P1D/COM0 + // Pin 26 : RB5/AN13/CPS5/P2B/CCP3/P3A/T1G/COM1 + // Pin 27 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 28 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-10,7-9'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-21,1-22,2-23,3-24,4-25,5-26,6-27,7-28'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-11,1-12,2-13,3-14,4-15,5-16,6-17,7-18'} // PORTC + {$MAP_RAM_TO_PIN '010:3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFFh write protected, 2000h to 3FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1939.pas b/devices17/PIC16F1939.pas new file mode 100644 index 00000000..cf2c0ce9 --- /dev/null +++ b/devices17/PIC16F1939.pas @@ -0,0 +1,1180 @@ +unit PIC16F1939; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1939'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 40} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RCIF : bit absolute PIR1.5; + PIR1_TXIF : bit absolute PIR1.4; + PIR1_SSPIF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RCIE : bit absolute PIE1.5; + PIE1_TXIE : bit absolute PIE1.4; + PIE1_SSPIE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_TMR0CS : bit absolute OPTION_REG.5; + OPTION_REG_TMR0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_CCP3SEL : bit absolute APFCON.6; + APFCON_T1GSEL : bit absolute APFCON.5; + APFCON_P2BSEL : bit absolute APFCON.4; + APFCON_SRNQSEL : bit absolute APFCON.3; + APFCON_C2OUTSEL : bit absolute APFCON.2; + APFCON_SSSEL : bit absolute APFCON.1; + APFCON_CCP2SEL : bit absolute APFCON.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA4 : bit absolute ANSELA.4; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELB : byte absolute $018D; + ANSELB_ANSB5 : bit absolute ANSELB.5; + ANSELB_ANSB4 : bit absolute ANSELB.4; + ANSELB_ANSB3 : bit absolute ANSELB.3; + ANSELB_ANSB2 : bit absolute ANSELB.2; + ANSELB_ANSB1 : bit absolute ANSELB.1; + ANSELB_ANSB0 : bit absolute ANSELB.0; + ANSELD : byte absolute $018F; + ANSELD_ANSD7 : bit absolute ANSELD.7; + ANSELD_ANSD6 : bit absolute ANSELD.6; + ANSELD_ANSD5 : bit absolute ANSELD.5; + ANSELD_ANSD4 : bit absolute ANSELD.4; + ANSELD_ANSD3 : bit absolute ANSELD.3; + ANSELD_ANSD2 : bit absolute ANSELD.2; + ANSELD_ANSD1 : bit absolute ANSELD.1; + ANSELD_ANSD0 : bit absolute ANSELD.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RCREG : byte absolute $0199; + TXREG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RCSTA : byte absolute $019D; + RCSTA_SPEN : bit absolute RCSTA.7; + RCSTA_RX9 : bit absolute RCSTA.6; + RCSTA_SREN : bit absolute RCSTA.5; + RCSTA_CREN : bit absolute RCSTA.4; + RCSTA_ADDEN : bit absolute RCSTA.3; + RCSTA_FERR : bit absolute RCSTA.2; + RCSTA_OERR : bit absolute RCSTA.1; + RCSTA_RX9D : bit absolute RCSTA.0; + TXSTA : byte absolute $019E; + TXSTA_CSRC : bit absolute TXSTA.7; + TXSTA_TX9 : bit absolute TXSTA.6; + TXSTA_TXEN : bit absolute TXSTA.5; + TXSTA_SYNC : bit absolute TXSTA.4; + TXSTA_SENDB : bit absolute TXSTA.3; + TXSTA_BRGH : bit absolute TXSTA.2; + TXSTA_TRMT : bit absolute TXSTA.1; + TXSTA_TX9D : bit absolute TXSTA.0; + BAUDCON : byte absolute $019F; + BAUDCON_ABDOVF : bit absolute BAUDCON.7; + BAUDCON_RCIDL : bit absolute BAUDCON.6; + BAUDCON_SCKP : bit absolute BAUDCON.4; + BAUDCON_BRG16 : bit absolute BAUDCON.3; + BAUDCON_WUE : bit absolute BAUDCON.1; + BAUDCON_ABDEN : bit absolute BAUDCON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + WPUE : byte absolute $0210; + WPUE_WPUE3 : bit absolute WPUE.3; + SSPBUF : byte absolute $0211; + SSPADD : byte absolute $0212; + SSPMSK : byte absolute $0213; + SSPSTAT : byte absolute $0214; + SSPSTAT_SMP : bit absolute SSPSTAT.7; + SSPSTAT_CKE : bit absolute SSPSTAT.6; + SSPSTAT_D_nA : bit absolute SSPSTAT.5; + SSPSTAT_P : bit absolute SSPSTAT.4; + SSPSTAT_S : bit absolute SSPSTAT.3; + SSPSTAT_R_nW : bit absolute SSPSTAT.2; + SSPSTAT_UA : bit absolute SSPSTAT.1; + SSPSTAT_BF : bit absolute SSPSTAT.0; + SSPCON1 : byte absolute $0215; + SSPCON1_WCOL : bit absolute SSPCON1.7; + SSPCON1_SSPOV : bit absolute SSPCON1.6; + SSPCON1_SSPEN : bit absolute SSPCON1.5; + SSPCON1_CKP : bit absolute SSPCON1.4; + SSPCON1_SSPM3 : bit absolute SSPCON1.3; + SSPCON1_SSPM2 : bit absolute SSPCON1.2; + SSPCON1_SSPM1 : bit absolute SSPCON1.1; + SSPCON1_SSPM0 : bit absolute SSPCON1.0; + SSPCON2 : byte absolute $0216; + SSPCON2_GCEN : bit absolute SSPCON2.7; + SSPCON2_ACKSTAT : bit absolute SSPCON2.6; + SSPCON2_ACKDT : bit absolute SSPCON2.5; + SSPCON2_ACKEN : bit absolute SSPCON2.4; + SSPCON2_RCEN : bit absolute SSPCON2.3; + SSPCON2_PEN : bit absolute SSPCON2.2; + SSPCON2_RSEN : bit absolute SSPCON2.1; + SSPCON2_SEN : bit absolute SSPCON2.0; + SSPCON3 : byte absolute $0217; + SSPCON3_ACKTIM : bit absolute SSPCON3.7; + SSPCON3_PCIE : bit absolute SSPCON3.6; + SSPCON3_SCIE : bit absolute SSPCON3.5; + SSPCON3_BOEN : bit absolute SSPCON3.4; + SSPCON3_SDAHT : bit absolute SSPCON3.3; + SSPCON3_SBCDE : bit absolute SSPCON3.2; + SSPCON3_AHEN : bit absolute SSPCON3.1; + SSPCON3_DHEN : bit absolute SSPCON3.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $079A; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $07A2; + LCDDATA2_SEG23COM0 : bit absolute LCDDATA2.7; + LCDDATA2_SEG22COM0 : bit absolute LCDDATA2.6; + LCDDATA2_SEG21COM0 : bit absolute LCDDATA2.5; + LCDDATA2_SEG20COM0 : bit absolute LCDDATA2.4; + LCDDATA2_SEG19COM0 : bit absolute LCDDATA2.3; + LCDDATA2_SEG18COM0 : bit absolute LCDDATA2.2; + LCDDATA2_SEG17COM0 : bit absolute LCDDATA2.1; + LCDDATA2_SEG16COM0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $07A5; + LCDDATA5_SEG23COM1 : bit absolute LCDDATA5.7; + LCDDATA5_SEG22COM1 : bit absolute LCDDATA5.6; + LCDDATA5_SEG21COM1 : bit absolute LCDDATA5.5; + LCDDATA5_SEG20COM1 : bit absolute LCDDATA5.4; + LCDDATA5_SEG19COM1 : bit absolute LCDDATA5.3; + LCDDATA5_SEG18COM1 : bit absolute LCDDATA5.2; + LCDDATA5_SEG17COM1 : bit absolute LCDDATA5.1; + LCDDATA5_SEG16COM1 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $07A8; + LCDDATA8_SEG23COM2 : bit absolute LCDDATA8.7; + LCDDATA8_SEG22COM2 : bit absolute LCDDATA8.6; + LCDDATA8_SEG21COM2 : bit absolute LCDDATA8.5; + LCDDATA8_SEG20COM2 : bit absolute LCDDATA8.4; + LCDDATA8_SEG19COM2 : bit absolute LCDDATA8.3; + LCDDATA8_SEG18COM2 : bit absolute LCDDATA8.2; + LCDDATA8_SEG17COM2 : bit absolute LCDDATA8.1; + LCDDATA8_SEG16COM2 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $07AB; + LCDDATA11_SEG23COM3 : bit absolute LCDDATA11.7; + LCDDATA11_SEG22COM3 : bit absolute LCDDATA11.6; + LCDDATA11_SEG21COM3 : bit absolute LCDDATA11.5; + LCDDATA11_SEG20COM3 : bit absolute LCDDATA11.4; + LCDDATA11_SEG19COM3 : bit absolute LCDDATA11.3; + LCDDATA11_SEG18COM3 : bit absolute LCDDATA11.2; + LCDDATA11_SEG17COM3 : bit absolute LCDDATA11.1; + LCDDATA11_SEG16COM3 : bit absolute LCDDATA11.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-013:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3 + {$SET_STATE_RAM '015-01C:SFR'} // Bank 0 : TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-093:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3 + {$SET_STATE_RAM '095-09E:SFR'} // Bank 1 : OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11B:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11D:SFR'} // Bank 2 : APFCON + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18D:SFR'} // Bank 3 : ANSELA, ANSELB + {$SET_STATE_RAM '18F-196:SFR'} // Bank 3 : ANSELD, ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RCREG, TXREG, SP1BRGL, SP1BRGH, RCSTA, TXSTA, BAUDCON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '210-217:SFR'} // Bank 4 : WPUE, SSPBUF, SSPADD, SSPMSK, SSPSTAT, SSPCON1, SSPCON2, SSPCON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-79A:SFR'} // Bank 15 : LCDSE0, LCDSE1, LCDSE2 + {$SET_STATE_RAM '7A0-7AB:SFR'} // Bank 15 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '010:0F'} // PORTE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '012:FD'} // PIR2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:CF'} // CPSCON0 bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:0F'} // CPSCON1 bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '090:0F'} // TRISE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '092:FD'} // PIE2 bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '110:0F'} // LATE bits 7,6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:03'} // CMOUT bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11D:7F'} // APFCON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:3F'} // ANSELA bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '18D:3F'} // ANSELB bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUDCON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '210:08'} // WPUE bits 7,6,5,4,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '090:08'} // TRISE bit 3 un-implemented (read as 1) + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE3/MCLR/Vpp + // Pin 2 : RA0/AN0/C12IN0-/C2OUT/SRNQ/SS/Vcap/SEG12 + // Pin 3 : RA1/AN1/C12IN1-/SEG7 + // Pin 4 : RA2/AN2/C2IN+/Vref-/DACOUT/COM2 + // Pin 5 : RA3/AN3/C1IN+/Vref+/SEG15 + // Pin 6 : RA4/C1OUT/CPS6/T0CKI/SRQ/SEG4 + // Pin 7 : RA5/AN4/C2OUT/CPS7/SRNQ/SS/Vcap/SEG5 + // Pin 8 : RE0/AN5/P3A/CCP3/SEG21 + // Pin 9 : RE1/AN6/P3B/SEG22 + // Pin 10 : RE2/AN7/CCP5/SEG23 + // Pin 11 : Vdd + // Pin 12 : Vss + // Pin 13 : RA7/OSC1/CLKIN/SEG2 + // Pin 14 : RA6/OSC2/CLKOUT/Vcap/SEG1 + // Pin 15 : RC0/T1OSO/T1CKI/P2B + // Pin 16 : RC1/T1OSI/CCP2/P2A + // Pin 17 : RC2/CCP1/P1A/SEG3 + // Pin 18 : RC3/SCL/SCK/SEG6 + // Pin 19 : RD0/CPS8/COM3 + // Pin 20 : RD1/CPS9/CCP4 + // Pin 21 : RD2/CPS10/P2B + // Pin 22 : RD3/CPS11/P2C/SEG16 + // Pin 23 : RC4/SDI/SDA/T1G/SEG11 + // Pin 24 : RC5/SDO/SEG10 + // Pin 25 : RC6/TX/CK/SEG9 + // Pin 26 : RC7/RX/DT/SEG8 + // Pin 27 : RD4/CPS12/P2D/SEG17 + // Pin 28 : RD5/CPS13/P1B/SEG18 + // Pin 29 : RD6/CPS14/P1C/SEG19 + // Pin 30 : RD7/CPS15/P1D/SEG20 + // Pin 31 : Vss + // Pin 32 : Vdd + // Pin 33 : RB0/AN12/CPS0/SRI/INT/SEG0 + // Pin 34 : RB1/AN10/C12IN3-/CPS1/VLCD1 + // Pin 35 : RB2/AN8/CPS2/VLCD2 + // Pin 36 : RB3/AN9/C12IN2-/CPS3/CCP2/P2A/VLCD3 + // Pin 37 : RB4/AN11/CPS4/COM0 + // Pin 38 : RB5/AN13/CPS5/CCP3/P3A/T1G/COM1 + // Pin 39 : RB6/ICSPCLK/ICDCLK/SEG14 + // Pin 40 : RB7/ICSPDAT/ICDDAT/SEG13 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-2,1-3,2-4,3-5,4-6,5-7,6-14,7-13'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-33,1-34,2-35,3-36,4-37,5-38,6-39,7-40'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-15,1-16,2-17,3-18,4-23,5-24,6-25,7-26'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-19,1-20,2-21,3-22,4-27,5-28,6-29,7-30'} // PORTD + {$MAP_RAM_TO_PIN '010:0-8,1-9,2-10,3-1'} // PORTE + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFFh write protected, 2000h to 3FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // All VCAP pin functionality is disabled + {$define _VCAPEN_RA6 = $3FEF} // VCAP functionality is enabled on RA6 + {$define _VCAPEN_RA5 = $3FDF} // VCAP functionality is enabled on RA5 + {$define _VCAPEN_RA0 = $3FCF} // VCAP functionality is enabled on RA0 + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1946.pas b/devices17/PIC16F1946.pas new file mode 100644 index 00000000..816a6d7e --- /dev/null +++ b/devices17/PIC16F1946.pas @@ -0,0 +1,1435 @@ +unit PIC16F1946; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1946'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 4} +{$SET PIC_MAXFLASH = 8192} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RC1IF : bit absolute PIR1.5; + PIR1_TX1IF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_RC2IF : bit absolute PIR4.5; + PIR4_TX2IF : bit absolute PIR4.4; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH4 : bit absolute CPSCON1.4; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RC1IE : bit absolute PIE1.5; + PIE1_TX1IE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_RC2IE : bit absolute PIE4.5; + PIE4_TX2IE : bit absolute PIE4.4; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_P3CSEL : bit absolute APFCON.7; + APFCON_P3BSEL : bit absolute APFCON.6; + APFCON_P2DSEL : bit absolute APFCON.5; + APFCON_P2CSEL : bit absolute APFCON.4; + APFCON_P2BSEL : bit absolute APFCON.3; + APFCON_CCP2SEL : bit absolute APFCON.2; + APFCON_P1CSEL : bit absolute APFCON.1; + APFCON_P1BSEL : bit absolute APFCON.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH1 : bit absolute CM3CON1.5; + CM3CON1_C3PCH0 : bit absolute CM3CON1.4; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + PORTF : byte absolute $028C; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + PORTG : byte absolute $028D; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + TRISF : byte absolute $030C; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + TRISG : byte absolute $030D; + TRISG_TRISG5 : bit absolute TRISG.5; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + LATF : byte absolute $038C; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + LATG : byte absolute $038D; + LATG_LATG5 : bit absolute LATG.5; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELF : byte absolute $040C; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + ANSELG : byte absolute $040D; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + WPUG : byte absolute $048D; + WPUG_WPUG5 : bit absolute WPUG.5; + RC2REG : byte absolute $0491; + TX2REG : byte absolute $0492; + SP2BRGL : byte absolute $0493; + SP2BRGH : byte absolute $0494; + RC2STA : byte absolute $0495; + TX2STA : byte absolute $0496; + BAUD2CON : byte absolute $0497; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $079A; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $079B; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $079C; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $079D; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $07A2; + LCDDATA2_SEG23COM0 : bit absolute LCDDATA2.7; + LCDDATA2_SEG22COM0 : bit absolute LCDDATA2.6; + LCDDATA2_SEG21COM0 : bit absolute LCDDATA2.5; + LCDDATA2_SEG20COM0 : bit absolute LCDDATA2.4; + LCDDATA2_SEG19COM0 : bit absolute LCDDATA2.3; + LCDDATA2_SEG18COM0 : bit absolute LCDDATA2.2; + LCDDATA2_SEG17COM0 : bit absolute LCDDATA2.1; + LCDDATA2_SEG16COM0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $07A5; + LCDDATA5_SEG23COM1 : bit absolute LCDDATA5.7; + LCDDATA5_SEG22COM1 : bit absolute LCDDATA5.6; + LCDDATA5_SEG21COM1 : bit absolute LCDDATA5.5; + LCDDATA5_SEG20COM1 : bit absolute LCDDATA5.4; + LCDDATA5_SEG19COM1 : bit absolute LCDDATA5.3; + LCDDATA5_SEG18COM1 : bit absolute LCDDATA5.2; + LCDDATA5_SEG17COM1 : bit absolute LCDDATA5.1; + LCDDATA5_SEG16COM1 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $07A8; + LCDDATA8_SEG23COM2 : bit absolute LCDDATA8.7; + LCDDATA8_SEG22COM2 : bit absolute LCDDATA8.6; + LCDDATA8_SEG21COM2 : bit absolute LCDDATA8.5; + LCDDATA8_SEG20COM2 : bit absolute LCDDATA8.4; + LCDDATA8_SEG19COM2 : bit absolute LCDDATA8.3; + LCDDATA8_SEG18COM2 : bit absolute LCDDATA8.2; + LCDDATA8_SEG17COM2 : bit absolute LCDDATA8.1; + LCDDATA8_SEG16COM2 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $07AB; + LCDDATA11_SEG23COM3 : bit absolute LCDDATA11.7; + LCDDATA11_SEG22COM3 : bit absolute LCDDATA11.6; + LCDDATA11_SEG21COM3 : bit absolute LCDDATA11.5; + LCDDATA11_SEG20COM3 : bit absolute LCDDATA11.4; + LCDDATA11_SEG19COM3 : bit absolute LCDDATA11.3; + LCDDATA11_SEG18COM3 : bit absolute LCDDATA11.2; + LCDDATA11_SEG17COM3 : bit absolute LCDDATA11.1; + LCDDATA11_SEG16COM3 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $07AC; + LCDDATA12_SEG31COM0 : bit absolute LCDDATA12.7; + LCDDATA12_SEG30COM0 : bit absolute LCDDATA12.6; + LCDDATA12_SEG29COM0 : bit absolute LCDDATA12.5; + LCDDATA12_SEG28COM0 : bit absolute LCDDATA12.4; + LCDDATA12_SEG27COM0 : bit absolute LCDDATA12.3; + LCDDATA12_SEG26COM0 : bit absolute LCDDATA12.2; + LCDDATA12_SEG25COM0 : bit absolute LCDDATA12.1; + LCDDATA12_SEG24COM0 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $07AD; + LCDDATA13_SEG39COM0 : bit absolute LCDDATA13.7; + LCDDATA13_SEG38COM0 : bit absolute LCDDATA13.6; + LCDDATA13_SEG37COM0 : bit absolute LCDDATA13.5; + LCDDATA13_SEG36COM0 : bit absolute LCDDATA13.4; + LCDDATA13_SEG35COM0 : bit absolute LCDDATA13.3; + LCDDATA13_SEG34COM0 : bit absolute LCDDATA13.2; + LCDDATA13_SEG33COM0 : bit absolute LCDDATA13.1; + LCDDATA13_SEG32COM0 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $07AE; + LCDDATA14_SEG45COM0 : bit absolute LCDDATA14.5; + LCDDATA14_SEG44COM0 : bit absolute LCDDATA14.4; + LCDDATA14_SEG43COM0 : bit absolute LCDDATA14.3; + LCDDATA14_SEG42COM0 : bit absolute LCDDATA14.2; + LCDDATA14_SEG41COM0 : bit absolute LCDDATA14.1; + LCDDATA14_SEG40COM0 : bit absolute LCDDATA14.0; + LCDDATA15 : byte absolute $07AF; + LCDDATA15_SEG31COM1 : bit absolute LCDDATA15.7; + LCDDATA15_SEG30COM1 : bit absolute LCDDATA15.6; + LCDDATA15_SEG29COM1 : bit absolute LCDDATA15.5; + LCDDATA15_SEG28COM1 : bit absolute LCDDATA15.4; + LCDDATA15_SEG27COM1 : bit absolute LCDDATA15.3; + LCDDATA15_SEG26COM1 : bit absolute LCDDATA15.2; + LCDDATA15_SEG25COM1 : bit absolute LCDDATA15.1; + LCDDATA15_SEG24COM1 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $07B0; + LCDDATA16_SEG39COM1 : bit absolute LCDDATA16.7; + LCDDATA16_SEG38COM1 : bit absolute LCDDATA16.6; + LCDDATA16_SEG37COM1 : bit absolute LCDDATA16.5; + LCDDATA16_SEG36COM1 : bit absolute LCDDATA16.4; + LCDDATA16_SEG35COM1 : bit absolute LCDDATA16.3; + LCDDATA16_SEG34COM1 : bit absolute LCDDATA16.2; + LCDDATA16_SEG33COM1 : bit absolute LCDDATA16.1; + LCDDATA16_SEG32COM1 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $07B1; + LCDDATA17_SEG45COM1 : bit absolute LCDDATA17.5; + LCDDATA17_SEG44COM1 : bit absolute LCDDATA17.4; + LCDDATA17_SEG43COM1 : bit absolute LCDDATA17.3; + LCDDATA17_SEG42COM1 : bit absolute LCDDATA17.2; + LCDDATA17_SEG41COM1 : bit absolute LCDDATA17.1; + LCDDATA17_SEG40COM1 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $07B2; + LCDDATA18_SEG31COM2 : bit absolute LCDDATA18.7; + LCDDATA18_SEG30COM2 : bit absolute LCDDATA18.6; + LCDDATA18_SEG29COM2 : bit absolute LCDDATA18.5; + LCDDATA18_SEG28COM2 : bit absolute LCDDATA18.4; + LCDDATA18_SEG27COM2 : bit absolute LCDDATA18.3; + LCDDATA18_SEG26COM2 : bit absolute LCDDATA18.2; + LCDDATA18_SEG25COM2 : bit absolute LCDDATA18.1; + LCDDATA18_SEG24COM2 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $07B3; + LCDDATA19_SEG39COM2 : bit absolute LCDDATA19.7; + LCDDATA19_SEG38COM2 : bit absolute LCDDATA19.6; + LCDDATA19_SEG37COM2 : bit absolute LCDDATA19.5; + LCDDATA19_SEG36COM2 : bit absolute LCDDATA19.4; + LCDDATA19_SEG35COM2 : bit absolute LCDDATA19.3; + LCDDATA19_SEG34COM2 : bit absolute LCDDATA19.2; + LCDDATA19_SEG33COM2 : bit absolute LCDDATA19.1; + LCDDATA19_SEG32COM2 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $07B4; + LCDDATA20_SEG45COM2 : bit absolute LCDDATA20.5; + LCDDATA20_SEG44COM2 : bit absolute LCDDATA20.4; + LCDDATA20_SEG43COM2 : bit absolute LCDDATA20.3; + LCDDATA20_SEG42COM2 : bit absolute LCDDATA20.2; + LCDDATA20_SEG41COM2 : bit absolute LCDDATA20.1; + LCDDATA20_SEG40COM2 : bit absolute LCDDATA20.0; + LCDDATA21 : byte absolute $07B5; + LCDDATA21_SEG31COM3 : bit absolute LCDDATA21.7; + LCDDATA21_SEG30COM3 : bit absolute LCDDATA21.6; + LCDDATA21_SEG29COM3 : bit absolute LCDDATA21.5; + LCDDATA21_SEG28COM3 : bit absolute LCDDATA21.4; + LCDDATA21_SEG27COM3 : bit absolute LCDDATA21.3; + LCDDATA21_SEG26COM3 : bit absolute LCDDATA21.2; + LCDDATA21_SEG25COM3 : bit absolute LCDDATA21.1; + LCDDATA21_SEG24COM3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $07B6; + LCDDATA22_SEG39COM3 : bit absolute LCDDATA22.7; + LCDDATA22_SEG38COM3 : bit absolute LCDDATA22.6; + LCDDATA22_SEG37COM3 : bit absolute LCDDATA22.5; + LCDDATA22_SEG36COM3 : bit absolute LCDDATA22.4; + LCDDATA22_SEG35COM3 : bit absolute LCDDATA22.3; + LCDDATA22_SEG34COM3 : bit absolute LCDDATA22.2; + LCDDATA22_SEG33COM3 : bit absolute LCDDATA22.1; + LCDDATA22_SEG32COM3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $07B7; + LCDDATA23_SEG45COM3 : bit absolute LCDDATA23.5; + LCDDATA23_SEG44COM3 : bit absolute LCDDATA23.4; + LCDDATA23_SEG43COM3 : bit absolute LCDDATA23.3; + LCDDATA23_SEG42COM3 : bit absolute LCDDATA23.2; + LCDDATA23_SEG41COM3 : bit absolute LCDDATA23.1; + LCDDATA23_SEG40COM3 : bit absolute LCDDATA23.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09E:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11B:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11F:SFR'} // Bank 2 : APFCON, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '190-196:SFR'} // Bank 3 : ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28D:SFR'} // Bank 5 : PORTF, PORTG + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30D:SFR'} // Bank 6 : TRISF, TRISG + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-32F:GPR'} + {$SET_STATE_RAM '38C-38D:SFR'} // Bank 7 : LATF, LATG + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '40C-40D:SFR'} // Bank 8 : ANSELF, ANSELG + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '48D-48D:SFR'} // Bank 9 : WPUG + {$SET_STATE_RAM '491-497:SFR'} // Bank 9 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-79D:SFR'} // Bank 15 : LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5 + {$SET_STATE_RAM '7A0-7B7:SFR'} // Bank 15 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:33'} // PIR4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:1F'} // CPSCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:33'} // PIE4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:07'} // CMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:F7'} // CM3CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:F3'} // CM3CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:3F'} // PORTG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:3F'} // TRISG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:1F'} // LATG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:1E'} // ANSELG bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '48D:20'} // WPUG bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // LCDSE5 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7AE:3F'} // LCDDATA14 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B1:3F'} // LCDDATA17 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B4:3F'} // LCDDATA20 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B7:3F'} // LCDDATA23 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE1/P2C/VLCD2 + // Pin 2 : RE0/P2D/VLCD1 + // Pin 3 : RG0/CCP3/P3A/SEG42 + // Pin 4 : RG1/AN15/CPS15/TX2/CK2/C3OUT/SEG43 + // Pin 5 : RG2/AN14/CPS14/RX2/DT2/C3IN+/SEG44 + // Pin 6 : RG3/AN13/CPS13/C3IN0-/CCP4/P3D/SEG45 + // Pin 7 : RG5/MCLR/Vpp + // Pin 8 : RG4/AN12/CPS12/C3IN1-/CCP5/P1D/SEG26 + // Pin 9 : Vss + // Pin 10 : Vdd + // Pin 11 : RF7/AN5/CPS5/C3IN3-/C2IN3-/C1IN3-/SS1/SEG25 + // Pin 12 : RF6/AN11/CPS11/C1IN+/SEG24 + // Pin 13 : RF5/AN10/CPS10/C2IN1-/C1IN1-/DACOUT/SEG23 + // Pin 14 : RF4/AN9/CPS9/C2IN+/SEG22 + // Pin 15 : RF3/AN8/CPS8/C3IN2-/C2IN2-/C1IN2-/SEG21 + // Pin 16 : RF2/AN7/CPS7/C1OUT/SRQ/SEG20 + // Pin 17 : RF1/AN6/CPS6/C2OUT/SRNQ/SEG19 + // Pin 18 : RF0/AN16/CPS16/C2IN0-/C1IN0-/SEG41/Vcap + // Pin 19 : AVdd + // Pin 20 : AVss + // Pin 21 : RA3/AN3/Vref+/CPS3/SEG35 + // Pin 22 : RA2/AN2/Vref-/CPS2/SEG34 + // Pin 23 : RA1/AN1/CPS1/SEG18 + // Pin 24 : RA0/AN0/CPS0/SEG33 + // Pin 25 : Vss + // Pin 26 : Vdd + // Pin 27 : RA5/AN4/CPS4/SEG15 + // Pin 28 : RA4/T0CKI/SEG14 + // Pin 29 : RC1/T1OSI/P2A/CCP2/SEG32 + // Pin 30 : RC0/T1OSO/T1CKI/SEG40 + // Pin 31 : RC6/TX1/CK1/SEG27 + // Pin 32 : RC7/RX1/DT1/SEG28 + // Pin 33 : RC2/CCP1/P1A/SEG13 + // Pin 34 : RC3/SCK1/SCL1/SEG17 + // Pin 35 : RC4/SDI1/SDA1/SEG16 + // Pin 36 : RC5/SDO1/SEG12 + // Pin 37 : RB7/ICSPDAT/ICDDAT/SEG39 + // Pin 38 : Vdd + // Pin 39 : RA7/OSC1/CLKIN/SEG37 + // Pin 40 : RA6/OSC2/CLKOUT/SEG36 + // Pin 41 : Vss + // Pin 42 : RB6/ICSPCLK/ICDCLK/SEG38 + // Pin 43 : RB5/T1G/SEG29 + // Pin 44 : RB4/SEG11 + // Pin 45 : RB3/SEG10 + // Pin 46 : RB2/SEG9 + // Pin 47 : RB1/SEG8 + // Pin 48 : RB0/INT/SRI/FLT0/SEG30 + // Pin 49 : RD7/SS2/SEG7 + // Pin 50 : RD6/SCK2/SCL2/P1B/SEG6 + // Pin 51 : RD5/SDI2/SDA2/P1C/SEG5 + // Pin 52 : RD4/SDO2/P3B/SEG4 + // Pin 53 : RD3/P3C/SEG3 + // Pin 54 : RD2/P2B/SEG2 + // Pin 55 : RD1/P2C/SEG1 + // Pin 56 : Vss + // Pin 57 : Vdd + // Pin 58 : RD0/P2D/SEG0 + // Pin 59 : RE7/CCP2/P2A/SEG31 + // Pin 60 : RE6/P1B/COM3 + // Pin 61 : RE5/P1C/COM2 + // Pin 62 : RE4/P3B/COM1 + // Pin 63 : RE3/P3C/COM0 + // Pin 64 : RE2/P2B/VLCD3 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,2-64,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '28C:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN '28D:0-3,1-4,2-5,3-6,4-8,5-7'} // PORTG + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 1FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to FFFh write protected, 1000h to 1FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 1FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // VCAP pin functionality is disabled + {$define _VCAPEN_ON = $3FEF} // VCAP functionality is enabled on VCAP pin + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/devices17/PIC16F1947.pas b/devices17/PIC16F1947.pas new file mode 100644 index 00000000..73d20dbc --- /dev/null +++ b/devices17/PIC16F1947.pas @@ -0,0 +1,1441 @@ +unit PIC16F1947; + +// Define hardware +{$SET PIC_MODEL = 'PIC16F1947'} +{$SET PIC_MAXFREQ = 32000000} +{$SET PIC_NPINS = 64} +{$SET PIC_NUMBANKS = 32} +{$SET PIC_NUMPAGES = 8} +{$SET PIC_MAXFLASH = 16384} + +interface +var + INDF0 : byte absolute $0000; + INDF1 : byte absolute $0001; + PCL : byte absolute $0002; + STATUS : byte absolute $0003; + STATUS_nTO : bit absolute STATUS.4; + STATUS_nPD : bit absolute STATUS.3; + STATUS_Z : bit absolute STATUS.2; + STATUS_DC : bit absolute STATUS.1; + STATUS_C : bit absolute STATUS.0; + FSR0L : byte absolute $0004; + FSR0H : byte absolute $0005; + FSR1L : byte absolute $0006; + FSR1H : byte absolute $0007; + BSR : byte absolute $0008; + BSR_BSR4 : bit absolute BSR.4; + BSR_BSR3 : bit absolute BSR.3; + BSR_BSR2 : bit absolute BSR.2; + BSR_BSR1 : bit absolute BSR.1; + BSR_BSR0 : bit absolute BSR.0; + WREG : byte absolute $0009; + PCLATH : byte absolute $000A; + PCLATH_PCLATH6 : bit absolute PCLATH.6; + PCLATH_PCLATH5 : bit absolute PCLATH.5; + PCLATH_PCLATH4 : bit absolute PCLATH.4; + PCLATH_PCLATH3 : bit absolute PCLATH.3; + PCLATH_PCLATH2 : bit absolute PCLATH.2; + PCLATH_PCLATH1 : bit absolute PCLATH.1; + PCLATH_PCLATH0 : bit absolute PCLATH.0; + INTCON : byte absolute $000B; + INTCON_GIE : bit absolute INTCON.7; + INTCON_PEIE : bit absolute INTCON.6; + INTCON_TMR0IE : bit absolute INTCON.5; + INTCON_INTE : bit absolute INTCON.4; + INTCON_IOCIE : bit absolute INTCON.3; + INTCON_TMR0IF : bit absolute INTCON.2; + INTCON_INTF : bit absolute INTCON.1; + INTCON_IOCIF : bit absolute INTCON.0; + PORTA : byte absolute $000C; + PORTA_RA7 : bit absolute PORTA.7; + PORTA_RA6 : bit absolute PORTA.6; + PORTA_RA5 : bit absolute PORTA.5; + PORTA_RA4 : bit absolute PORTA.4; + PORTA_RA3 : bit absolute PORTA.3; + PORTA_RA2 : bit absolute PORTA.2; + PORTA_RA1 : bit absolute PORTA.1; + PORTA_RA0 : bit absolute PORTA.0; + PORTB : byte absolute $000D; + PORTB_RB7 : bit absolute PORTB.7; + PORTB_RB6 : bit absolute PORTB.6; + PORTB_RB5 : bit absolute PORTB.5; + PORTB_RB4 : bit absolute PORTB.4; + PORTB_RB3 : bit absolute PORTB.3; + PORTB_RB2 : bit absolute PORTB.2; + PORTB_RB1 : bit absolute PORTB.1; + PORTB_RB0 : bit absolute PORTB.0; + PORTC : byte absolute $000E; + PORTC_RC7 : bit absolute PORTC.7; + PORTC_RC6 : bit absolute PORTC.6; + PORTC_RC5 : bit absolute PORTC.5; + PORTC_RC4 : bit absolute PORTC.4; + PORTC_RC3 : bit absolute PORTC.3; + PORTC_RC2 : bit absolute PORTC.2; + PORTC_RC1 : bit absolute PORTC.1; + PORTC_RC0 : bit absolute PORTC.0; + PORTD : byte absolute $000F; + PORTD_RD7 : bit absolute PORTD.7; + PORTD_RD6 : bit absolute PORTD.6; + PORTD_RD5 : bit absolute PORTD.5; + PORTD_RD4 : bit absolute PORTD.4; + PORTD_RD3 : bit absolute PORTD.3; + PORTD_RD2 : bit absolute PORTD.2; + PORTD_RD1 : bit absolute PORTD.1; + PORTD_RD0 : bit absolute PORTD.0; + PORTE : byte absolute $0010; + PORTE_RE7 : bit absolute PORTE.7; + PORTE_RE6 : bit absolute PORTE.6; + PORTE_RE5 : bit absolute PORTE.5; + PORTE_RE4 : bit absolute PORTE.4; + PORTE_RE3 : bit absolute PORTE.3; + PORTE_RE2 : bit absolute PORTE.2; + PORTE_RE1 : bit absolute PORTE.1; + PORTE_RE0 : bit absolute PORTE.0; + PIR1 : byte absolute $0011; + PIR1_TMR1GIF : bit absolute PIR1.7; + PIR1_ADIF : bit absolute PIR1.6; + PIR1_RC1IF : bit absolute PIR1.5; + PIR1_TX1IF : bit absolute PIR1.4; + PIR1_SSP1IF : bit absolute PIR1.3; + PIR1_CCP1IF : bit absolute PIR1.2; + PIR1_TMR2IF : bit absolute PIR1.1; + PIR1_TMR1IF : bit absolute PIR1.0; + PIR2 : byte absolute $0012; + PIR2_OSFIF : bit absolute PIR2.7; + PIR2_C2IF : bit absolute PIR2.6; + PIR2_C1IF : bit absolute PIR2.5; + PIR2_EEIF : bit absolute PIR2.4; + PIR2_BCLIF : bit absolute PIR2.3; + PIR2_LCDIF : bit absolute PIR2.2; + PIR2_C3IF : bit absolute PIR2.1; + PIR2_CCP2IF : bit absolute PIR2.0; + PIR3 : byte absolute $0013; + PIR3_CCP5IF : bit absolute PIR3.6; + PIR3_CCP4IF : bit absolute PIR3.5; + PIR3_CCP3IF : bit absolute PIR3.4; + PIR3_TMR6IF : bit absolute PIR3.3; + PIR3_TMR4IF : bit absolute PIR3.1; + PIR4 : byte absolute $0014; + PIR4_RC2IF : bit absolute PIR4.5; + PIR4_TX2IF : bit absolute PIR4.4; + PIR4_BCL2IF : bit absolute PIR4.1; + PIR4_SSP2IF : bit absolute PIR4.0; + TMR0 : byte absolute $0015; + TMR1L : byte absolute $0016; + TMR1H : byte absolute $0017; + T1CON : byte absolute $0018; + T1CON_TMR1CS1 : bit absolute T1CON.7; + T1CON_TMR1CS0 : bit absolute T1CON.6; + T1CON_T1CKPS1 : bit absolute T1CON.5; + T1CON_T1CKPS0 : bit absolute T1CON.4; + T1CON_T1OSCEN : bit absolute T1CON.3; + T1CON_nT1SYNC : bit absolute T1CON.2; + T1CON_TMR1ON : bit absolute T1CON.0; + T1GCON : byte absolute $0019; + T1GCON_TMR1GE : bit absolute T1GCON.7; + T1GCON_T1GPOL : bit absolute T1GCON.6; + T1GCON_T1GTM : bit absolute T1GCON.5; + T1GCON_T1GSPM : bit absolute T1GCON.4; + T1GCON_T1GGO_nDONE : bit absolute T1GCON.3; + T1GCON_T1GVAL : bit absolute T1GCON.2; + T1GCON_T1GSS1 : bit absolute T1GCON.1; + T1GCON_T1GSS0 : bit absolute T1GCON.0; + TMR2 : byte absolute $001A; + PR2 : byte absolute $001B; + T2CON : byte absolute $001C; + T2CON_T2OUTPS3 : bit absolute T2CON.6; + T2CON_T2OUTPS2 : bit absolute T2CON.5; + T2CON_T2OUTPS1 : bit absolute T2CON.4; + T2CON_T2OUTPS0 : bit absolute T2CON.3; + T2CON_TMR2ON : bit absolute T2CON.2; + T2CON_T2CKPS1 : bit absolute T2CON.1; + T2CON_T2CKPS0 : bit absolute T2CON.0; + CPSCON0 : byte absolute $001E; + CPSCON0_CPSON : bit absolute CPSCON0.7; + CPSCON0_CPSRM : bit absolute CPSCON0.6; + CPSCON0_CPSRNG1 : bit absolute CPSCON0.3; + CPSCON0_CPSRNG0 : bit absolute CPSCON0.2; + CPSCON0_CPSOUT : bit absolute CPSCON0.1; + CPSCON0_T0XCS : bit absolute CPSCON0.0; + CPSCON1 : byte absolute $001F; + CPSCON1_CPSCH4 : bit absolute CPSCON1.4; + CPSCON1_CPSCH3 : bit absolute CPSCON1.3; + CPSCON1_CPSCH2 : bit absolute CPSCON1.2; + CPSCON1_CPSCH1 : bit absolute CPSCON1.1; + CPSCON1_CPSCH0 : bit absolute CPSCON1.0; + TRISA : byte absolute $008C; + TRISA_TRISA7 : bit absolute TRISA.7; + TRISA_TRISA6 : bit absolute TRISA.6; + TRISA_TRISA5 : bit absolute TRISA.5; + TRISA_TRISA4 : bit absolute TRISA.4; + TRISA_TRISA3 : bit absolute TRISA.3; + TRISA_TRISA2 : bit absolute TRISA.2; + TRISA_TRISA1 : bit absolute TRISA.1; + TRISA_TRISA0 : bit absolute TRISA.0; + TRISB : byte absolute $008D; + TRISB_TRISB7 : bit absolute TRISB.7; + TRISB_TRISB6 : bit absolute TRISB.6; + TRISB_TRISB5 : bit absolute TRISB.5; + TRISB_TRISB4 : bit absolute TRISB.4; + TRISB_TRISB3 : bit absolute TRISB.3; + TRISB_TRISB2 : bit absolute TRISB.2; + TRISB_TRISB1 : bit absolute TRISB.1; + TRISB_TRISB0 : bit absolute TRISB.0; + TRISC : byte absolute $008E; + TRISC_TRISC7 : bit absolute TRISC.7; + TRISC_TRISC6 : bit absolute TRISC.6; + TRISC_TRISC5 : bit absolute TRISC.5; + TRISC_TRISC4 : bit absolute TRISC.4; + TRISC_TRISC3 : bit absolute TRISC.3; + TRISC_TRISC2 : bit absolute TRISC.2; + TRISC_TRISC1 : bit absolute TRISC.1; + TRISC_TRISC0 : bit absolute TRISC.0; + TRISD : byte absolute $008F; + TRISD_TRISD7 : bit absolute TRISD.7; + TRISD_TRISD6 : bit absolute TRISD.6; + TRISD_TRISD5 : bit absolute TRISD.5; + TRISD_TRISD4 : bit absolute TRISD.4; + TRISD_TRISD3 : bit absolute TRISD.3; + TRISD_TRISD2 : bit absolute TRISD.2; + TRISD_TRISD1 : bit absolute TRISD.1; + TRISD_TRISD0 : bit absolute TRISD.0; + TRISE : byte absolute $0090; + TRISE_TRISE7 : bit absolute TRISE.7; + TRISE_TRISE6 : bit absolute TRISE.6; + TRISE_TRISE5 : bit absolute TRISE.5; + TRISE_TRISE4 : bit absolute TRISE.4; + TRISE_TRISE3 : bit absolute TRISE.3; + TRISE_TRISE2 : bit absolute TRISE.2; + TRISE_TRISE1 : bit absolute TRISE.1; + TRISE_TRISE0 : bit absolute TRISE.0; + PIE1 : byte absolute $0091; + PIE1_TMR1GIE : bit absolute PIE1.7; + PIE1_ADIE : bit absolute PIE1.6; + PIE1_RC1IE : bit absolute PIE1.5; + PIE1_TX1IE : bit absolute PIE1.4; + PIE1_SSP1IE : bit absolute PIE1.3; + PIE1_CCP1IE : bit absolute PIE1.2; + PIE1_TMR2IE : bit absolute PIE1.1; + PIE1_TMR1IE : bit absolute PIE1.0; + PIE2 : byte absolute $0092; + PIE2_OSFIE : bit absolute PIE2.7; + PIE2_C2IE : bit absolute PIE2.6; + PIE2_C1IE : bit absolute PIE2.5; + PIE2_EEIE : bit absolute PIE2.4; + PIE2_BCLIE : bit absolute PIE2.3; + PIE2_LCDIE : bit absolute PIE2.2; + PIE2_C3IE : bit absolute PIE2.1; + PIE2_CCP2IE : bit absolute PIE2.0; + PIE3 : byte absolute $0093; + PIE3_CCP5IE : bit absolute PIE3.6; + PIE3_CCP4IE : bit absolute PIE3.5; + PIE3_CCP3IE : bit absolute PIE3.4; + PIE3_TMR6IE : bit absolute PIE3.3; + PIE3_TMR4IE : bit absolute PIE3.1; + PIE4 : byte absolute $0094; + PIE4_RC2IE : bit absolute PIE4.5; + PIE4_TX2IE : bit absolute PIE4.4; + PIE4_BCL2IE : bit absolute PIE4.1; + PIE4_SSP2IE : bit absolute PIE4.0; + OPTION_REG : byte absolute $0095; + OPTION_REG_nWPUEN : bit absolute OPTION_REG.7; + OPTION_REG_INTEDG : bit absolute OPTION_REG.6; + OPTION_REG_T0CS : bit absolute OPTION_REG.5; + OPTION_REG_T0SE : bit absolute OPTION_REG.4; + OPTION_REG_PSA : bit absolute OPTION_REG.3; + OPTION_REG_PS2 : bit absolute OPTION_REG.2; + OPTION_REG_PS1 : bit absolute OPTION_REG.1; + OPTION_REG_PS0 : bit absolute OPTION_REG.0; + PCON : byte absolute $0096; + PCON_STKOVF : bit absolute PCON.7; + PCON_STKUNF : bit absolute PCON.6; + PCON_nRMCLR : bit absolute PCON.3; + PCON_nRI : bit absolute PCON.2; + PCON_nPOR : bit absolute PCON.1; + PCON_nBOR : bit absolute PCON.0; + WDTCON : byte absolute $0097; + WDTCON_WDTPS4 : bit absolute WDTCON.5; + WDTCON_WDTPS3 : bit absolute WDTCON.4; + WDTCON_WDTPS2 : bit absolute WDTCON.3; + WDTCON_WDTPS1 : bit absolute WDTCON.2; + WDTCON_WDTPS0 : bit absolute WDTCON.1; + WDTCON_SWDTEN : bit absolute WDTCON.0; + OSCTUNE : byte absolute $0098; + OSCTUNE_TUN5 : bit absolute OSCTUNE.5; + OSCTUNE_TUN4 : bit absolute OSCTUNE.4; + OSCTUNE_TUN3 : bit absolute OSCTUNE.3; + OSCTUNE_TUN2 : bit absolute OSCTUNE.2; + OSCTUNE_TUN1 : bit absolute OSCTUNE.1; + OSCTUNE_TUN0 : bit absolute OSCTUNE.0; + OSCCON : byte absolute $0099; + OSCCON_SPLLEN : bit absolute OSCCON.7; + OSCCON_IRCF3 : bit absolute OSCCON.6; + OSCCON_IRCF2 : bit absolute OSCCON.5; + OSCCON_IRCF1 : bit absolute OSCCON.4; + OSCCON_IRCF0 : bit absolute OSCCON.3; + OSCCON_SCS1 : bit absolute OSCCON.1; + OSCCON_SCS0 : bit absolute OSCCON.0; + OSCSTAT : byte absolute $009A; + OSCSTAT_T1OSCR : bit absolute OSCSTAT.7; + OSCSTAT_PLLR : bit absolute OSCSTAT.6; + OSCSTAT_OSTS : bit absolute OSCSTAT.5; + OSCSTAT_HFIOFR : bit absolute OSCSTAT.4; + OSCSTAT_HFIOFL : bit absolute OSCSTAT.3; + OSCSTAT_MFIOFR : bit absolute OSCSTAT.2; + OSCSTAT_LFIOFR : bit absolute OSCSTAT.1; + OSCSTAT_HFIOFS : bit absolute OSCSTAT.0; + ADRESL : byte absolute $009B; + ADRESH : byte absolute $009C; + ADCON0 : byte absolute $009D; + ADCON0_CHS4 : bit absolute ADCON0.6; + ADCON0_CHS3 : bit absolute ADCON0.5; + ADCON0_CHS2 : bit absolute ADCON0.4; + ADCON0_CHS1 : bit absolute ADCON0.3; + ADCON0_CHS0 : bit absolute ADCON0.2; + ADCON0_GO_nDONE : bit absolute ADCON0.1; + ADCON0_ADON : bit absolute ADCON0.0; + ADCON1 : byte absolute $009E; + ADCON1_ADFM : bit absolute ADCON1.7; + ADCON1_ADCS2 : bit absolute ADCON1.6; + ADCON1_ADCS1 : bit absolute ADCON1.5; + ADCON1_ADCS0 : bit absolute ADCON1.4; + ADCON1_ADNREF : bit absolute ADCON1.2; + ADCON1_ADPREF1 : bit absolute ADCON1.1; + ADCON1_ADPREF0 : bit absolute ADCON1.0; + LATA : byte absolute $010C; + LATA_LATA7 : bit absolute LATA.7; + LATA_LATA6 : bit absolute LATA.6; + LATA_LATA5 : bit absolute LATA.5; + LATA_LATA4 : bit absolute LATA.4; + LATA_LATA3 : bit absolute LATA.3; + LATA_LATA2 : bit absolute LATA.2; + LATA_LATA1 : bit absolute LATA.1; + LATA_LATA0 : bit absolute LATA.0; + LATB : byte absolute $010D; + LATB_LATB7 : bit absolute LATB.7; + LATB_LATB6 : bit absolute LATB.6; + LATB_LATB5 : bit absolute LATB.5; + LATB_LATB4 : bit absolute LATB.4; + LATB_LATB3 : bit absolute LATB.3; + LATB_LATB2 : bit absolute LATB.2; + LATB_LATB1 : bit absolute LATB.1; + LATB_LATB0 : bit absolute LATB.0; + LATC : byte absolute $010E; + LATC_LATC7 : bit absolute LATC.7; + LATC_LATC6 : bit absolute LATC.6; + LATC_LATC5 : bit absolute LATC.5; + LATC_LATC4 : bit absolute LATC.4; + LATC_LATC3 : bit absolute LATC.3; + LATC_LATC2 : bit absolute LATC.2; + LATC_LATC1 : bit absolute LATC.1; + LATC_LATC0 : bit absolute LATC.0; + LATD : byte absolute $010F; + LATD_LATD7 : bit absolute LATD.7; + LATD_LATD6 : bit absolute LATD.6; + LATD_LATD5 : bit absolute LATD.5; + LATD_LATD4 : bit absolute LATD.4; + LATD_LATD3 : bit absolute LATD.3; + LATD_LATD2 : bit absolute LATD.2; + LATD_LATD1 : bit absolute LATD.1; + LATD_LATD0 : bit absolute LATD.0; + LATE : byte absolute $0110; + LATE_LATE7 : bit absolute LATE.7; + LATE_LATE6 : bit absolute LATE.6; + LATE_LATE5 : bit absolute LATE.5; + LATE_LATE4 : bit absolute LATE.4; + LATE_LATE3 : bit absolute LATE.3; + LATE_LATE2 : bit absolute LATE.2; + LATE_LATE1 : bit absolute LATE.1; + LATE_LATE0 : bit absolute LATE.0; + CM1CON0 : byte absolute $0111; + CM1CON0_C1ON : bit absolute CM1CON0.7; + CM1CON0_C1OUT : bit absolute CM1CON0.6; + CM1CON0_C1OE : bit absolute CM1CON0.5; + CM1CON0_C1POL : bit absolute CM1CON0.4; + CM1CON0_C1SP : bit absolute CM1CON0.2; + CM1CON0_C1HYS : bit absolute CM1CON0.1; + CM1CON0_C1SYNC : bit absolute CM1CON0.0; + CM1CON1 : byte absolute $0112; + CM1CON1_C1INTP : bit absolute CM1CON1.7; + CM1CON1_C1INTN : bit absolute CM1CON1.6; + CM1CON1_C1PCH1 : bit absolute CM1CON1.5; + CM1CON1_C1PCH0 : bit absolute CM1CON1.4; + CM1CON1_C1NCH1 : bit absolute CM1CON1.1; + CM1CON1_C1NCH0 : bit absolute CM1CON1.0; + CM2CON0 : byte absolute $0113; + CM2CON0_C2ON : bit absolute CM2CON0.7; + CM2CON0_C2OUT : bit absolute CM2CON0.6; + CM2CON0_C2OE : bit absolute CM2CON0.5; + CM2CON0_C2POL : bit absolute CM2CON0.4; + CM2CON0_C2SP : bit absolute CM2CON0.2; + CM2CON0_C2HYS : bit absolute CM2CON0.1; + CM2CON0_C2SYNC : bit absolute CM2CON0.0; + CM2CON1 : byte absolute $0114; + CM2CON1_C2INTP : bit absolute CM2CON1.7; + CM2CON1_C2INTN : bit absolute CM2CON1.6; + CM2CON1_C2PCH1 : bit absolute CM2CON1.5; + CM2CON1_C2PCH0 : bit absolute CM2CON1.4; + CM2CON1_C2NCH1 : bit absolute CM2CON1.1; + CM2CON1_C2NCH0 : bit absolute CM2CON1.0; + CMOUT : byte absolute $0115; + CMOUT_MC3OUT : bit absolute CMOUT.2; + CMOUT_MC2OUT : bit absolute CMOUT.1; + CMOUT_MC1OUT : bit absolute CMOUT.0; + BORCON : byte absolute $0116; + BORCON_SBOREN : bit absolute BORCON.7; + BORCON_BORRDY : bit absolute BORCON.0; + FVRCON : byte absolute $0117; + FVRCON_FVREN : bit absolute FVRCON.7; + FVRCON_FVRRDY : bit absolute FVRCON.6; + FVRCON_TSEN : bit absolute FVRCON.5; + FVRCON_TSRNG : bit absolute FVRCON.4; + FVRCON_CDAFVR1 : bit absolute FVRCON.3; + FVRCON_CDAFVR0 : bit absolute FVRCON.2; + FVRCON_ADFVR1 : bit absolute FVRCON.1; + FVRCON_ADFVR0 : bit absolute FVRCON.0; + DACCON0 : byte absolute $0118; + DACCON0_DACEN : bit absolute DACCON0.7; + DACCON0_DACLPS : bit absolute DACCON0.6; + DACCON0_DACOE : bit absolute DACCON0.5; + DACCON0_DACPSS1 : bit absolute DACCON0.3; + DACCON0_DACPSS0 : bit absolute DACCON0.2; + DACCON0_DACNSS : bit absolute DACCON0.0; + DACCON1 : byte absolute $0119; + DACCON1_DACR4 : bit absolute DACCON1.4; + DACCON1_DACR3 : bit absolute DACCON1.3; + DACCON1_DACR2 : bit absolute DACCON1.2; + DACCON1_DACR1 : bit absolute DACCON1.1; + DACCON1_DACR0 : bit absolute DACCON1.0; + SRCON0 : byte absolute $011A; + SRCON0_SRLEN : bit absolute SRCON0.7; + SRCON0_SRCLK2 : bit absolute SRCON0.6; + SRCON0_SRCLK1 : bit absolute SRCON0.5; + SRCON0_SRCLK0 : bit absolute SRCON0.4; + SRCON0_SRQEN : bit absolute SRCON0.3; + SRCON0_SRNQEN : bit absolute SRCON0.2; + SRCON0_SRPS : bit absolute SRCON0.1; + SRCON0_SRPR : bit absolute SRCON0.0; + SRCON1 : byte absolute $011B; + SRCON1_SRSPE : bit absolute SRCON1.7; + SRCON1_SRSCKE : bit absolute SRCON1.6; + SRCON1_SRSC2E : bit absolute SRCON1.5; + SRCON1_SRSC1E : bit absolute SRCON1.4; + SRCON1_SRRPE : bit absolute SRCON1.3; + SRCON1_SRRCKE : bit absolute SRCON1.2; + SRCON1_SRRC2E : bit absolute SRCON1.1; + SRCON1_SRRC1E : bit absolute SRCON1.0; + APFCON : byte absolute $011D; + APFCON_P3CSEL : bit absolute APFCON.7; + APFCON_P3BSEL : bit absolute APFCON.6; + APFCON_P2DSEL : bit absolute APFCON.5; + APFCON_P2CSEL : bit absolute APFCON.4; + APFCON_P2BSEL : bit absolute APFCON.3; + APFCON_CCP2SEL : bit absolute APFCON.2; + APFCON_P1CSEL : bit absolute APFCON.1; + APFCON_P1BSEL : bit absolute APFCON.0; + CM3CON0 : byte absolute $011E; + CM3CON0_C3ON : bit absolute CM3CON0.7; + CM3CON0_C3OUT : bit absolute CM3CON0.6; + CM3CON0_C3OE : bit absolute CM3CON0.5; + CM3CON0_C3POL : bit absolute CM3CON0.4; + CM3CON0_C3SP : bit absolute CM3CON0.2; + CM3CON0_C3HYS : bit absolute CM3CON0.1; + CM3CON0_C3SYNC : bit absolute CM3CON0.0; + CM3CON1 : byte absolute $011F; + CM3CON1_C3INTP : bit absolute CM3CON1.7; + CM3CON1_C3INTN : bit absolute CM3CON1.6; + CM3CON1_C3PCH1 : bit absolute CM3CON1.5; + CM3CON1_C3PCH0 : bit absolute CM3CON1.4; + CM3CON1_C3NCH1 : bit absolute CM3CON1.1; + CM3CON1_C3NCH0 : bit absolute CM3CON1.0; + ANSELA : byte absolute $018C; + ANSELA_ANSA5 : bit absolute ANSELA.5; + ANSELA_ANSA3 : bit absolute ANSELA.3; + ANSELA_ANSA2 : bit absolute ANSELA.2; + ANSELA_ANSA1 : bit absolute ANSELA.1; + ANSELA_ANSA0 : bit absolute ANSELA.0; + ANSELE : byte absolute $0190; + ANSELE_ANSE2 : bit absolute ANSELE.2; + ANSELE_ANSE1 : bit absolute ANSELE.1; + ANSELE_ANSE0 : bit absolute ANSELE.0; + EEADRL : byte absolute $0191; + EEADRH : byte absolute $0192; + EEADRH_EEADRH6 : bit absolute EEADRH.6; + EEADRH_EEADRH5 : bit absolute EEADRH.5; + EEADRH_EEADRH4 : bit absolute EEADRH.4; + EEADRH_EEADRH3 : bit absolute EEADRH.3; + EEADRH_EEADRH2 : bit absolute EEADRH.2; + EEADRH_EEADRH1 : bit absolute EEADRH.1; + EEADRH_EEADRH0 : bit absolute EEADRH.0; + EEDATL : byte absolute $0193; + EEDATH : byte absolute $0194; + EEDATH_EEDATH5 : bit absolute EEDATH.5; + EEDATH_EEDATH4 : bit absolute EEDATH.4; + EEDATH_EEDATH3 : bit absolute EEDATH.3; + EEDATH_EEDATH2 : bit absolute EEDATH.2; + EEDATH_EEDATH1 : bit absolute EEDATH.1; + EEDATH_EEDATH0 : bit absolute EEDATH.0; + EECON1 : byte absolute $0195; + EECON1_EEPGD : bit absolute EECON1.7; + EECON1_CFGS : bit absolute EECON1.6; + EECON1_LWLO : bit absolute EECON1.5; + EECON1_FREE : bit absolute EECON1.4; + EECON1_WRERR : bit absolute EECON1.3; + EECON1_WREN : bit absolute EECON1.2; + EECON1_WR : bit absolute EECON1.1; + EECON1_RD : bit absolute EECON1.0; + EECON2 : byte absolute $0196; + RC1REG : byte absolute $0199; + TX1REG : byte absolute $019A; + SP1BRGL : byte absolute $019B; + SP1BRGH : byte absolute $019C; + RC1STA : byte absolute $019D; + RC1STA_SPEN : bit absolute RC1STA.7; + RC1STA_RX9 : bit absolute RC1STA.6; + RC1STA_SREN : bit absolute RC1STA.5; + RC1STA_CREN : bit absolute RC1STA.4; + RC1STA_ADDEN : bit absolute RC1STA.3; + RC1STA_FERR : bit absolute RC1STA.2; + RC1STA_OERR : bit absolute RC1STA.1; + RC1STA_RX9D : bit absolute RC1STA.0; + TX1STA : byte absolute $019E; + TX1STA_CSRC : bit absolute TX1STA.7; + TX1STA_TX9 : bit absolute TX1STA.6; + TX1STA_TXEN : bit absolute TX1STA.5; + TX1STA_SYNC : bit absolute TX1STA.4; + TX1STA_SENDB : bit absolute TX1STA.3; + TX1STA_BRGH : bit absolute TX1STA.2; + TX1STA_TRMT : bit absolute TX1STA.1; + TX1STA_TX9D : bit absolute TX1STA.0; + BAUD1CON : byte absolute $019F; + BAUD1CON_ABDOVF : bit absolute BAUD1CON.7; + BAUD1CON_RCIDL : bit absolute BAUD1CON.6; + BAUD1CON_SCKP : bit absolute BAUD1CON.4; + BAUD1CON_BRG16 : bit absolute BAUD1CON.3; + BAUD1CON_WUE : bit absolute BAUD1CON.1; + BAUD1CON_ABDEN : bit absolute BAUD1CON.0; + WPUB : byte absolute $020D; + WPUB_WPUB7 : bit absolute WPUB.7; + WPUB_WPUB6 : bit absolute WPUB.6; + WPUB_WPUB5 : bit absolute WPUB.5; + WPUB_WPUB4 : bit absolute WPUB.4; + WPUB_WPUB3 : bit absolute WPUB.3; + WPUB_WPUB2 : bit absolute WPUB.2; + WPUB_WPUB1 : bit absolute WPUB.1; + WPUB_WPUB0 : bit absolute WPUB.0; + SSP1BUF : byte absolute $0211; + SSP1ADD : byte absolute $0212; + SSP1MSK : byte absolute $0213; + SSP1STAT : byte absolute $0214; + SSP1STAT_SMP : bit absolute SSP1STAT.7; + SSP1STAT_CKE : bit absolute SSP1STAT.6; + SSP1STAT_D_nA : bit absolute SSP1STAT.5; + SSP1STAT_P : bit absolute SSP1STAT.4; + SSP1STAT_S : bit absolute SSP1STAT.3; + SSP1STAT_R_nW : bit absolute SSP1STAT.2; + SSP1STAT_UA : bit absolute SSP1STAT.1; + SSP1STAT_BF : bit absolute SSP1STAT.0; + SSP1CON1 : byte absolute $0215; + SSP1CON1_WCOL : bit absolute SSP1CON1.7; + SSP1CON1_SSPOV : bit absolute SSP1CON1.6; + SSP1CON1_SSPEN : bit absolute SSP1CON1.5; + SSP1CON1_CKP : bit absolute SSP1CON1.4; + SSP1CON1_SSPM3 : bit absolute SSP1CON1.3; + SSP1CON1_SSPM2 : bit absolute SSP1CON1.2; + SSP1CON1_SSPM1 : bit absolute SSP1CON1.1; + SSP1CON1_SSPM0 : bit absolute SSP1CON1.0; + SSP1CON2 : byte absolute $0216; + SSP1CON2_GCEN : bit absolute SSP1CON2.7; + SSP1CON2_ACKSTAT : bit absolute SSP1CON2.6; + SSP1CON2_ACKDT : bit absolute SSP1CON2.5; + SSP1CON2_ACKEN : bit absolute SSP1CON2.4; + SSP1CON2_RCEN : bit absolute SSP1CON2.3; + SSP1CON2_PEN : bit absolute SSP1CON2.2; + SSP1CON2_RSEN : bit absolute SSP1CON2.1; + SSP1CON2_SEN : bit absolute SSP1CON2.0; + SSP1CON3 : byte absolute $0217; + SSP1CON3_ACKTIM : bit absolute SSP1CON3.7; + SSP1CON3_PCIE : bit absolute SSP1CON3.6; + SSP1CON3_SCIE : bit absolute SSP1CON3.5; + SSP1CON3_BOEN : bit absolute SSP1CON3.4; + SSP1CON3_SDAHT : bit absolute SSP1CON3.3; + SSP1CON3_SBCDE : bit absolute SSP1CON3.2; + SSP1CON3_AHEN : bit absolute SSP1CON3.1; + SSP1CON3_DHEN : bit absolute SSP1CON3.0; + SSP2BUF : byte absolute $0219; + SSP2ADD : byte absolute $021A; + SSP2MSK : byte absolute $021B; + SSP2STAT : byte absolute $021C; + SSP2CON1 : byte absolute $021D; + SSP2CON2 : byte absolute $021E; + SSP2CON3 : byte absolute $021F; + PORTF : byte absolute $028C; + PORTF_RF7 : bit absolute PORTF.7; + PORTF_RF6 : bit absolute PORTF.6; + PORTF_RF5 : bit absolute PORTF.5; + PORTF_RF4 : bit absolute PORTF.4; + PORTF_RF3 : bit absolute PORTF.3; + PORTF_RF2 : bit absolute PORTF.2; + PORTF_RF1 : bit absolute PORTF.1; + PORTF_RF0 : bit absolute PORTF.0; + PORTG : byte absolute $028D; + PORTG_RG5 : bit absolute PORTG.5; + PORTG_RG4 : bit absolute PORTG.4; + PORTG_RG3 : bit absolute PORTG.3; + PORTG_RG2 : bit absolute PORTG.2; + PORTG_RG1 : bit absolute PORTG.1; + PORTG_RG0 : bit absolute PORTG.0; + CCPR1L : byte absolute $0291; + CCPR1H : byte absolute $0292; + CCP1CON : byte absolute $0293; + CCP1CON_P1M1 : bit absolute CCP1CON.7; + CCP1CON_P1M0 : bit absolute CCP1CON.6; + CCP1CON_DC1B1 : bit absolute CCP1CON.5; + CCP1CON_DC1B0 : bit absolute CCP1CON.4; + CCP1CON_CCP1M3 : bit absolute CCP1CON.3; + CCP1CON_CCP1M2 : bit absolute CCP1CON.2; + CCP1CON_CCP1M1 : bit absolute CCP1CON.1; + CCP1CON_CCP1M0 : bit absolute CCP1CON.0; + PWM1CON : byte absolute $0294; + PWM1CON_P1RSEN : bit absolute PWM1CON.7; + PWM1CON_P1DC6 : bit absolute PWM1CON.6; + PWM1CON_P1DC5 : bit absolute PWM1CON.5; + PWM1CON_P1DC4 : bit absolute PWM1CON.4; + PWM1CON_P1DC3 : bit absolute PWM1CON.3; + PWM1CON_P1DC2 : bit absolute PWM1CON.2; + PWM1CON_P1DC1 : bit absolute PWM1CON.1; + PWM1CON_P1DC0 : bit absolute PWM1CON.0; + CCP1AS : byte absolute $0295; + CCP1AS_CCP1ASE : bit absolute CCP1AS.7; + CCP1AS_CCP1AS2 : bit absolute CCP1AS.6; + CCP1AS_CCP1AS1 : bit absolute CCP1AS.5; + CCP1AS_CCP1AS0 : bit absolute CCP1AS.4; + CCP1AS_PSS1AC1 : bit absolute CCP1AS.3; + CCP1AS_PSS1AC0 : bit absolute CCP1AS.2; + CCP1AS_PSS1BD1 : bit absolute CCP1AS.1; + CCP1AS_PSS1BD0 : bit absolute CCP1AS.0; + PSTR1CON : byte absolute $0296; + PSTR1CON_STR1SYNC : bit absolute PSTR1CON.4; + PSTR1CON_STR1D : bit absolute PSTR1CON.3; + PSTR1CON_STR1C : bit absolute PSTR1CON.2; + PSTR1CON_STR1B : bit absolute PSTR1CON.1; + PSTR1CON_STR1A : bit absolute PSTR1CON.0; + CCPR2L : byte absolute $0298; + CCPR2H : byte absolute $0299; + CCP2CON : byte absolute $029A; + CCP2CON_P2M1 : bit absolute CCP2CON.7; + CCP2CON_P2M0 : bit absolute CCP2CON.6; + CCP2CON_DC2B1 : bit absolute CCP2CON.5; + CCP2CON_DC2B0 : bit absolute CCP2CON.4; + CCP2CON_CCP2M3 : bit absolute CCP2CON.3; + CCP2CON_CCP2M2 : bit absolute CCP2CON.2; + CCP2CON_CCP2M1 : bit absolute CCP2CON.1; + CCP2CON_CCP2M0 : bit absolute CCP2CON.0; + PWM2CON : byte absolute $029B; + PWM2CON_P2RSEN : bit absolute PWM2CON.7; + PWM2CON_P2DC6 : bit absolute PWM2CON.6; + PWM2CON_P2DC5 : bit absolute PWM2CON.5; + PWM2CON_P2DC4 : bit absolute PWM2CON.4; + PWM2CON_P2DC3 : bit absolute PWM2CON.3; + PWM2CON_P2DC2 : bit absolute PWM2CON.2; + PWM2CON_P2DC1 : bit absolute PWM2CON.1; + PWM2CON_P2DC0 : bit absolute PWM2CON.0; + CCP2AS : byte absolute $029C; + CCP2AS_CCP2ASE : bit absolute CCP2AS.7; + CCP2AS_CCP2AS2 : bit absolute CCP2AS.6; + CCP2AS_CCP2AS1 : bit absolute CCP2AS.5; + CCP2AS_CCP2AS0 : bit absolute CCP2AS.4; + CCP2AS_PSS2AC1 : bit absolute CCP2AS.3; + CCP2AS_PSS2AC0 : bit absolute CCP2AS.2; + CCP2AS_PSS2BD1 : bit absolute CCP2AS.1; + CCP2AS_PSS2BD0 : bit absolute CCP2AS.0; + PSTR2CON : byte absolute $029D; + PSTR2CON_STR2SYNC : bit absolute PSTR2CON.4; + PSTR2CON_STR2D : bit absolute PSTR2CON.3; + PSTR2CON_STR2C : bit absolute PSTR2CON.2; + PSTR2CON_STR2B : bit absolute PSTR2CON.1; + PSTR2CON_STR2A : bit absolute PSTR2CON.0; + CCPTMRS0 : byte absolute $029E; + CCPTMRS0_C4TSEL1 : bit absolute CCPTMRS0.7; + CCPTMRS0_C4TSEL0 : bit absolute CCPTMRS0.6; + CCPTMRS0_C3TSEL1 : bit absolute CCPTMRS0.5; + CCPTMRS0_C3TSEL0 : bit absolute CCPTMRS0.4; + CCPTMRS0_C2TSEL1 : bit absolute CCPTMRS0.3; + CCPTMRS0_C2TSEL0 : bit absolute CCPTMRS0.2; + CCPTMRS0_C1TSEL1 : bit absolute CCPTMRS0.1; + CCPTMRS0_C1TSEL0 : bit absolute CCPTMRS0.0; + CCPTMRS1 : byte absolute $029F; + CCPTMRS1_C5TSEL1 : bit absolute CCPTMRS1.1; + CCPTMRS1_C5TSEL0 : bit absolute CCPTMRS1.0; + TRISF : byte absolute $030C; + TRISF_TRISF7 : bit absolute TRISF.7; + TRISF_TRISF6 : bit absolute TRISF.6; + TRISF_TRISF5 : bit absolute TRISF.5; + TRISF_TRISF4 : bit absolute TRISF.4; + TRISF_TRISF3 : bit absolute TRISF.3; + TRISF_TRISF2 : bit absolute TRISF.2; + TRISF_TRISF1 : bit absolute TRISF.1; + TRISF_TRISF0 : bit absolute TRISF.0; + TRISG : byte absolute $030D; + TRISG_TRISG5 : bit absolute TRISG.5; + TRISG_TRISG4 : bit absolute TRISG.4; + TRISG_TRISG3 : bit absolute TRISG.3; + TRISG_TRISG2 : bit absolute TRISG.2; + TRISG_TRISG1 : bit absolute TRISG.1; + TRISG_TRISG0 : bit absolute TRISG.0; + CCPR3L : byte absolute $0311; + CCPR3H : byte absolute $0312; + CCP3CON : byte absolute $0313; + CCP3CON_P3M1 : bit absolute CCP3CON.7; + CCP3CON_P3M0 : bit absolute CCP3CON.6; + CCP3CON_DC3B1 : bit absolute CCP3CON.5; + CCP3CON_DC3B0 : bit absolute CCP3CON.4; + CCP3CON_CCP3M3 : bit absolute CCP3CON.3; + CCP3CON_CCP3M2 : bit absolute CCP3CON.2; + CCP3CON_CCP3M1 : bit absolute CCP3CON.1; + CCP3CON_CCP3M0 : bit absolute CCP3CON.0; + PWM3CON : byte absolute $0314; + PWM3CON_P3RSEN : bit absolute PWM3CON.7; + PWM3CON_P3DC6 : bit absolute PWM3CON.6; + PWM3CON_P3DC5 : bit absolute PWM3CON.5; + PWM3CON_P3DC4 : bit absolute PWM3CON.4; + PWM3CON_P3DC3 : bit absolute PWM3CON.3; + PWM3CON_P3DC2 : bit absolute PWM3CON.2; + PWM3CON_P3DC1 : bit absolute PWM3CON.1; + PWM3CON_P3DC0 : bit absolute PWM3CON.0; + CCP3AS : byte absolute $0315; + CCP3AS_CCP3ASE : bit absolute CCP3AS.7; + CCP3AS_CCP3AS2 : bit absolute CCP3AS.6; + CCP3AS_CCP3AS1 : bit absolute CCP3AS.5; + CCP3AS_CCP3AS0 : bit absolute CCP3AS.4; + CCP3AS_PSS3AC1 : bit absolute CCP3AS.3; + CCP3AS_PSS3AC0 : bit absolute CCP3AS.2; + CCP3AS_PSS3BD1 : bit absolute CCP3AS.1; + CCP3AS_PSS3BD0 : bit absolute CCP3AS.0; + PSTR3CON : byte absolute $0316; + PSTR3CON_STR3SYNC : bit absolute PSTR3CON.4; + PSTR3CON_STR3D : bit absolute PSTR3CON.3; + PSTR3CON_STR3C : bit absolute PSTR3CON.2; + PSTR3CON_STR3B : bit absolute PSTR3CON.1; + PSTR3CON_STR3A : bit absolute PSTR3CON.0; + CCPR4L : byte absolute $0318; + CCPR4H : byte absolute $0319; + CCP4CON : byte absolute $031A; + CCP4CON_DC4B1 : bit absolute CCP4CON.5; + CCP4CON_DC4B0 : bit absolute CCP4CON.4; + CCP4CON_CCP4M3 : bit absolute CCP4CON.3; + CCP4CON_CCP4M2 : bit absolute CCP4CON.2; + CCP4CON_CCP4M1 : bit absolute CCP4CON.1; + CCP4CON_CCP4M0 : bit absolute CCP4CON.0; + CCPR5L : byte absolute $031C; + CCPR5H : byte absolute $031D; + CCP5CON : byte absolute $031E; + CCP5CON_DC5B1 : bit absolute CCP5CON.5; + CCP5CON_DC5B0 : bit absolute CCP5CON.4; + CCP5CON_CCP5M3 : bit absolute CCP5CON.3; + CCP5CON_CCP5M2 : bit absolute CCP5CON.2; + CCP5CON_CCP5M1 : bit absolute CCP5CON.1; + CCP5CON_CCP5M0 : bit absolute CCP5CON.0; + LATF : byte absolute $038C; + LATF_LATF7 : bit absolute LATF.7; + LATF_LATF6 : bit absolute LATF.6; + LATF_LATF5 : bit absolute LATF.5; + LATF_LATF4 : bit absolute LATF.4; + LATF_LATF3 : bit absolute LATF.3; + LATF_LATF2 : bit absolute LATF.2; + LATF_LATF1 : bit absolute LATF.1; + LATF_LATF0 : bit absolute LATF.0; + LATG : byte absolute $038D; + LATG_LATG5 : bit absolute LATG.5; + LATG_LATG4 : bit absolute LATG.4; + LATG_LATG3 : bit absolute LATG.3; + LATG_LATG2 : bit absolute LATG.2; + LATG_LATG1 : bit absolute LATG.1; + LATG_LATG0 : bit absolute LATG.0; + IOCBP : byte absolute $0394; + IOCBP_IOCBP7 : bit absolute IOCBP.7; + IOCBP_IOCBP6 : bit absolute IOCBP.6; + IOCBP_IOCBP5 : bit absolute IOCBP.5; + IOCBP_IOCBP4 : bit absolute IOCBP.4; + IOCBP_IOCBP3 : bit absolute IOCBP.3; + IOCBP_IOCBP2 : bit absolute IOCBP.2; + IOCBP_IOCBP1 : bit absolute IOCBP.1; + IOCBP_IOCBP0 : bit absolute IOCBP.0; + IOCBN : byte absolute $0395; + IOCBN_IOCBN7 : bit absolute IOCBN.7; + IOCBN_IOCBN6 : bit absolute IOCBN.6; + IOCBN_IOCBN5 : bit absolute IOCBN.5; + IOCBN_IOCBN4 : bit absolute IOCBN.4; + IOCBN_IOCBN3 : bit absolute IOCBN.3; + IOCBN_IOCBN2 : bit absolute IOCBN.2; + IOCBN_IOCBN1 : bit absolute IOCBN.1; + IOCBN_IOCBN0 : bit absolute IOCBN.0; + IOCBF : byte absolute $0396; + IOCBF_IOCBF7 : bit absolute IOCBF.7; + IOCBF_IOCBF6 : bit absolute IOCBF.6; + IOCBF_IOCBF5 : bit absolute IOCBF.5; + IOCBF_IOCBF4 : bit absolute IOCBF.4; + IOCBF_IOCBF3 : bit absolute IOCBF.3; + IOCBF_IOCBF2 : bit absolute IOCBF.2; + IOCBF_IOCBF1 : bit absolute IOCBF.1; + IOCBF_IOCBF0 : bit absolute IOCBF.0; + ANSELF : byte absolute $040C; + ANSELF_ANSF7 : bit absolute ANSELF.7; + ANSELF_ANSF6 : bit absolute ANSELF.6; + ANSELF_ANSF5 : bit absolute ANSELF.5; + ANSELF_ANSF4 : bit absolute ANSELF.4; + ANSELF_ANSF3 : bit absolute ANSELF.3; + ANSELF_ANSF2 : bit absolute ANSELF.2; + ANSELF_ANSF1 : bit absolute ANSELF.1; + ANSELF_ANSF0 : bit absolute ANSELF.0; + ANSELG : byte absolute $040D; + ANSELG_ANSG4 : bit absolute ANSELG.4; + ANSELG_ANSG3 : bit absolute ANSELG.3; + ANSELG_ANSG2 : bit absolute ANSELG.2; + ANSELG_ANSG1 : bit absolute ANSELG.1; + TMR4 : byte absolute $0415; + PR4 : byte absolute $0416; + T4CON : byte absolute $0417; + T4CON_T4OUTPS3 : bit absolute T4CON.6; + T4CON_T4OUTPS2 : bit absolute T4CON.5; + T4CON_T4OUTPS1 : bit absolute T4CON.4; + T4CON_T4OUTPS0 : bit absolute T4CON.3; + T4CON_TMR4ON : bit absolute T4CON.2; + T4CON_T4CKPS1 : bit absolute T4CON.1; + T4CON_T4CKPS0 : bit absolute T4CON.0; + TMR6 : byte absolute $041C; + PR6 : byte absolute $041D; + T6CON : byte absolute $041E; + T6CON_T6OUTPS3 : bit absolute T6CON.6; + T6CON_T6OUTPS2 : bit absolute T6CON.5; + T6CON_T6OUTPS1 : bit absolute T6CON.4; + T6CON_T6OUTPS0 : bit absolute T6CON.3; + T6CON_TMR6ON : bit absolute T6CON.2; + T6CON_T6CKPS1 : bit absolute T6CON.1; + T6CON_T6CKPS0 : bit absolute T6CON.0; + WPUG : byte absolute $048D; + WPUG_WPUG5 : bit absolute WPUG.5; + RC2REG : byte absolute $0491; + TX2REG : byte absolute $0492; + SP2BRGL : byte absolute $0493; + SP2BRGH : byte absolute $0494; + RC2STA : byte absolute $0495; + TX2STA : byte absolute $0496; + BAUD2CON : byte absolute $0497; + LCDCON : byte absolute $0791; + LCDCON_LCDEN : bit absolute LCDCON.7; + LCDCON_SLPEN : bit absolute LCDCON.6; + LCDCON_WERR : bit absolute LCDCON.5; + LCDCON_CS1 : bit absolute LCDCON.3; + LCDCON_CS0 : bit absolute LCDCON.2; + LCDCON_LMUX1 : bit absolute LCDCON.1; + LCDCON_LMUX0 : bit absolute LCDCON.0; + LCDPS : byte absolute $0792; + LCDPS_WFT : bit absolute LCDPS.7; + LCDPS_BIASMD : bit absolute LCDPS.6; + LCDPS_LCDA : bit absolute LCDPS.5; + LCDPS_WA : bit absolute LCDPS.4; + LCDPS_LP3 : bit absolute LCDPS.3; + LCDPS_LP2 : bit absolute LCDPS.2; + LCDPS_LP1 : bit absolute LCDPS.1; + LCDPS_LP0 : bit absolute LCDPS.0; + LCDREF : byte absolute $0793; + LCDREF_LCDIRE : bit absolute LCDREF.7; + LCDREF_LCDIRS : bit absolute LCDREF.6; + LCDREF_LCDIRI : bit absolute LCDREF.5; + LCDREF_VLCD3PE : bit absolute LCDREF.3; + LCDREF_VLCD2PE : bit absolute LCDREF.2; + LCDREF_VLCD1PE : bit absolute LCDREF.1; + LCDCST : byte absolute $0794; + LCDCST_LCDCST2 : bit absolute LCDCST.2; + LCDCST_LCDCST1 : bit absolute LCDCST.1; + LCDCST_LCDCST0 : bit absolute LCDCST.0; + LCDRL : byte absolute $0795; + LCDRL_LRLAP1 : bit absolute LCDRL.7; + LCDRL_LRLAP0 : bit absolute LCDRL.6; + LCDRL_LRLBP1 : bit absolute LCDRL.5; + LCDRL_LRLBP0 : bit absolute LCDRL.4; + LCDRL_LRLAT2 : bit absolute LCDRL.2; + LCDRL_LRLAT1 : bit absolute LCDRL.1; + LCDRL_LRLAT0 : bit absolute LCDRL.0; + LCDSE0 : byte absolute $0798; + LCDSE0_SE7 : bit absolute LCDSE0.7; + LCDSE0_SE6 : bit absolute LCDSE0.6; + LCDSE0_SE5 : bit absolute LCDSE0.5; + LCDSE0_SE4 : bit absolute LCDSE0.4; + LCDSE0_SE3 : bit absolute LCDSE0.3; + LCDSE0_SE2 : bit absolute LCDSE0.2; + LCDSE0_SE1 : bit absolute LCDSE0.1; + LCDSE0_SE0 : bit absolute LCDSE0.0; + LCDSE1 : byte absolute $0799; + LCDSE1_SE15 : bit absolute LCDSE1.7; + LCDSE1_SE14 : bit absolute LCDSE1.6; + LCDSE1_SE13 : bit absolute LCDSE1.5; + LCDSE1_SE12 : bit absolute LCDSE1.4; + LCDSE1_SE11 : bit absolute LCDSE1.3; + LCDSE1_SE10 : bit absolute LCDSE1.2; + LCDSE1_SE9 : bit absolute LCDSE1.1; + LCDSE1_SE8 : bit absolute LCDSE1.0; + LCDSE2 : byte absolute $079A; + LCDSE2_SE23 : bit absolute LCDSE2.7; + LCDSE2_SE22 : bit absolute LCDSE2.6; + LCDSE2_SE21 : bit absolute LCDSE2.5; + LCDSE2_SE20 : bit absolute LCDSE2.4; + LCDSE2_SE19 : bit absolute LCDSE2.3; + LCDSE2_SE18 : bit absolute LCDSE2.2; + LCDSE2_SE17 : bit absolute LCDSE2.1; + LCDSE2_SE16 : bit absolute LCDSE2.0; + LCDSE3 : byte absolute $079B; + LCDSE3_SE31 : bit absolute LCDSE3.7; + LCDSE3_SE30 : bit absolute LCDSE3.6; + LCDSE3_SE29 : bit absolute LCDSE3.5; + LCDSE3_SE28 : bit absolute LCDSE3.4; + LCDSE3_SE27 : bit absolute LCDSE3.3; + LCDSE3_SE26 : bit absolute LCDSE3.2; + LCDSE3_SE25 : bit absolute LCDSE3.1; + LCDSE3_SE24 : bit absolute LCDSE3.0; + LCDSE4 : byte absolute $079C; + LCDSE4_SE39 : bit absolute LCDSE4.7; + LCDSE4_SE38 : bit absolute LCDSE4.6; + LCDSE4_SE37 : bit absolute LCDSE4.5; + LCDSE4_SE36 : bit absolute LCDSE4.4; + LCDSE4_SE35 : bit absolute LCDSE4.3; + LCDSE4_SE34 : bit absolute LCDSE4.2; + LCDSE4_SE33 : bit absolute LCDSE4.1; + LCDSE4_SE32 : bit absolute LCDSE4.0; + LCDSE5 : byte absolute $079D; + LCDSE5_SE45 : bit absolute LCDSE5.5; + LCDSE5_SE44 : bit absolute LCDSE5.4; + LCDSE5_SE43 : bit absolute LCDSE5.3; + LCDSE5_SE42 : bit absolute LCDSE5.2; + LCDSE5_SE41 : bit absolute LCDSE5.1; + LCDSE5_SE40 : bit absolute LCDSE5.0; + LCDDATA0 : byte absolute $07A0; + LCDDATA0_SEG7COM0 : bit absolute LCDDATA0.7; + LCDDATA0_SEG6COM0 : bit absolute LCDDATA0.6; + LCDDATA0_SEG5COM0 : bit absolute LCDDATA0.5; + LCDDATA0_SEG4COM0 : bit absolute LCDDATA0.4; + LCDDATA0_SEG3COM0 : bit absolute LCDDATA0.3; + LCDDATA0_SEG2COM0 : bit absolute LCDDATA0.2; + LCDDATA0_SEG1COM0 : bit absolute LCDDATA0.1; + LCDDATA0_SEG0COM0 : bit absolute LCDDATA0.0; + LCDDATA1 : byte absolute $07A1; + LCDDATA1_SEG15COM0 : bit absolute LCDDATA1.7; + LCDDATA1_SEG14COM0 : bit absolute LCDDATA1.6; + LCDDATA1_SEG13COM0 : bit absolute LCDDATA1.5; + LCDDATA1_SEG12COM0 : bit absolute LCDDATA1.4; + LCDDATA1_SEG11COM0 : bit absolute LCDDATA1.3; + LCDDATA1_SEG10COM0 : bit absolute LCDDATA1.2; + LCDDATA1_SEG9COM0 : bit absolute LCDDATA1.1; + LCDDATA1_SEG8COM0 : bit absolute LCDDATA1.0; + LCDDATA2 : byte absolute $07A2; + LCDDATA2_SEG23COM0 : bit absolute LCDDATA2.7; + LCDDATA2_SEG22COM0 : bit absolute LCDDATA2.6; + LCDDATA2_SEG21COM0 : bit absolute LCDDATA2.5; + LCDDATA2_SEG20COM0 : bit absolute LCDDATA2.4; + LCDDATA2_SEG19COM0 : bit absolute LCDDATA2.3; + LCDDATA2_SEG18COM0 : bit absolute LCDDATA2.2; + LCDDATA2_SEG17COM0 : bit absolute LCDDATA2.1; + LCDDATA2_SEG16COM0 : bit absolute LCDDATA2.0; + LCDDATA3 : byte absolute $07A3; + LCDDATA3_SEG7COM1 : bit absolute LCDDATA3.7; + LCDDATA3_SEG6COM1 : bit absolute LCDDATA3.6; + LCDDATA3_SEG5COM1 : bit absolute LCDDATA3.5; + LCDDATA3_SEG4COM1 : bit absolute LCDDATA3.4; + LCDDATA3_SEG3COM1 : bit absolute LCDDATA3.3; + LCDDATA3_SEG2COM1 : bit absolute LCDDATA3.2; + LCDDATA3_SEG1COM1 : bit absolute LCDDATA3.1; + LCDDATA3_SEG0COM1 : bit absolute LCDDATA3.0; + LCDDATA4 : byte absolute $07A4; + LCDDATA4_SEG15COM1 : bit absolute LCDDATA4.7; + LCDDATA4_SEG14COM1 : bit absolute LCDDATA4.6; + LCDDATA4_SEG13COM1 : bit absolute LCDDATA4.5; + LCDDATA4_SEG12COM1 : bit absolute LCDDATA4.4; + LCDDATA4_SEG11COM1 : bit absolute LCDDATA4.3; + LCDDATA4_SEG10COM1 : bit absolute LCDDATA4.2; + LCDDATA4_SEG9COM1 : bit absolute LCDDATA4.1; + LCDDATA4_SEG8COM1 : bit absolute LCDDATA4.0; + LCDDATA5 : byte absolute $07A5; + LCDDATA5_SEG23COM1 : bit absolute LCDDATA5.7; + LCDDATA5_SEG22COM1 : bit absolute LCDDATA5.6; + LCDDATA5_SEG21COM1 : bit absolute LCDDATA5.5; + LCDDATA5_SEG20COM1 : bit absolute LCDDATA5.4; + LCDDATA5_SEG19COM1 : bit absolute LCDDATA5.3; + LCDDATA5_SEG18COM1 : bit absolute LCDDATA5.2; + LCDDATA5_SEG17COM1 : bit absolute LCDDATA5.1; + LCDDATA5_SEG16COM1 : bit absolute LCDDATA5.0; + LCDDATA6 : byte absolute $07A6; + LCDDATA6_SEG7COM2 : bit absolute LCDDATA6.7; + LCDDATA6_SEG6COM2 : bit absolute LCDDATA6.6; + LCDDATA6_SEG5COM2 : bit absolute LCDDATA6.5; + LCDDATA6_SEG4COM2 : bit absolute LCDDATA6.4; + LCDDATA6_SEG3COM2 : bit absolute LCDDATA6.3; + LCDDATA6_SEG2COM2 : bit absolute LCDDATA6.2; + LCDDATA6_SEG1COM2 : bit absolute LCDDATA6.1; + LCDDATA6_SEG0COM2 : bit absolute LCDDATA6.0; + LCDDATA7 : byte absolute $07A7; + LCDDATA7_SEG15COM2 : bit absolute LCDDATA7.7; + LCDDATA7_SEG14COM2 : bit absolute LCDDATA7.6; + LCDDATA7_SEG13COM2 : bit absolute LCDDATA7.5; + LCDDATA7_SEG12COM2 : bit absolute LCDDATA7.4; + LCDDATA7_SEG11COM2 : bit absolute LCDDATA7.3; + LCDDATA7_SEG10COM2 : bit absolute LCDDATA7.2; + LCDDATA7_SEG9COM2 : bit absolute LCDDATA7.1; + LCDDATA7_SEG8COM2 : bit absolute LCDDATA7.0; + LCDDATA8 : byte absolute $07A8; + LCDDATA8_SEG23COM2 : bit absolute LCDDATA8.7; + LCDDATA8_SEG22COM2 : bit absolute LCDDATA8.6; + LCDDATA8_SEG21COM2 : bit absolute LCDDATA8.5; + LCDDATA8_SEG20COM2 : bit absolute LCDDATA8.4; + LCDDATA8_SEG19COM2 : bit absolute LCDDATA8.3; + LCDDATA8_SEG18COM2 : bit absolute LCDDATA8.2; + LCDDATA8_SEG17COM2 : bit absolute LCDDATA8.1; + LCDDATA8_SEG16COM2 : bit absolute LCDDATA8.0; + LCDDATA9 : byte absolute $07A9; + LCDDATA9_SEG7COM3 : bit absolute LCDDATA9.7; + LCDDATA9_SEG6COM3 : bit absolute LCDDATA9.6; + LCDDATA9_SEG5COM3 : bit absolute LCDDATA9.5; + LCDDATA9_SEG4COM3 : bit absolute LCDDATA9.4; + LCDDATA9_SEG3COM3 : bit absolute LCDDATA9.3; + LCDDATA9_SEG2COM3 : bit absolute LCDDATA9.2; + LCDDATA9_SEG1COM3 : bit absolute LCDDATA9.1; + LCDDATA9_SEG0COM3 : bit absolute LCDDATA9.0; + LCDDATA10 : byte absolute $07AA; + LCDDATA10_SEG15COM3 : bit absolute LCDDATA10.7; + LCDDATA10_SEG14COM3 : bit absolute LCDDATA10.6; + LCDDATA10_SEG13COM3 : bit absolute LCDDATA10.5; + LCDDATA10_SEG12COM3 : bit absolute LCDDATA10.4; + LCDDATA10_SEG11COM3 : bit absolute LCDDATA10.3; + LCDDATA10_SEG10COM3 : bit absolute LCDDATA10.2; + LCDDATA10_SEG9COM3 : bit absolute LCDDATA10.1; + LCDDATA10_SEG8COM3 : bit absolute LCDDATA10.0; + LCDDATA11 : byte absolute $07AB; + LCDDATA11_SEG23COM3 : bit absolute LCDDATA11.7; + LCDDATA11_SEG22COM3 : bit absolute LCDDATA11.6; + LCDDATA11_SEG21COM3 : bit absolute LCDDATA11.5; + LCDDATA11_SEG20COM3 : bit absolute LCDDATA11.4; + LCDDATA11_SEG19COM3 : bit absolute LCDDATA11.3; + LCDDATA11_SEG18COM3 : bit absolute LCDDATA11.2; + LCDDATA11_SEG17COM3 : bit absolute LCDDATA11.1; + LCDDATA11_SEG16COM3 : bit absolute LCDDATA11.0; + LCDDATA12 : byte absolute $07AC; + LCDDATA12_SEG31COM0 : bit absolute LCDDATA12.7; + LCDDATA12_SEG30COM0 : bit absolute LCDDATA12.6; + LCDDATA12_SEG29COM0 : bit absolute LCDDATA12.5; + LCDDATA12_SEG28COM0 : bit absolute LCDDATA12.4; + LCDDATA12_SEG27COM0 : bit absolute LCDDATA12.3; + LCDDATA12_SEG26COM0 : bit absolute LCDDATA12.2; + LCDDATA12_SEG25COM0 : bit absolute LCDDATA12.1; + LCDDATA12_SEG24COM0 : bit absolute LCDDATA12.0; + LCDDATA13 : byte absolute $07AD; + LCDDATA13_SEG39COM0 : bit absolute LCDDATA13.7; + LCDDATA13_SEG38COM0 : bit absolute LCDDATA13.6; + LCDDATA13_SEG37COM0 : bit absolute LCDDATA13.5; + LCDDATA13_SEG36COM0 : bit absolute LCDDATA13.4; + LCDDATA13_SEG35COM0 : bit absolute LCDDATA13.3; + LCDDATA13_SEG34COM0 : bit absolute LCDDATA13.2; + LCDDATA13_SEG33COM0 : bit absolute LCDDATA13.1; + LCDDATA13_SEG32COM0 : bit absolute LCDDATA13.0; + LCDDATA14 : byte absolute $07AE; + LCDDATA14_SEG45COM0 : bit absolute LCDDATA14.5; + LCDDATA14_SEG44COM0 : bit absolute LCDDATA14.4; + LCDDATA14_SEG43COM0 : bit absolute LCDDATA14.3; + LCDDATA14_SEG42COM0 : bit absolute LCDDATA14.2; + LCDDATA14_SEG41COM0 : bit absolute LCDDATA14.1; + LCDDATA14_SEG40COM0 : bit absolute LCDDATA14.0; + LCDDATA15 : byte absolute $07AF; + LCDDATA15_SEG31COM1 : bit absolute LCDDATA15.7; + LCDDATA15_SEG30COM1 : bit absolute LCDDATA15.6; + LCDDATA15_SEG29COM1 : bit absolute LCDDATA15.5; + LCDDATA15_SEG28COM1 : bit absolute LCDDATA15.4; + LCDDATA15_SEG27COM1 : bit absolute LCDDATA15.3; + LCDDATA15_SEG26COM1 : bit absolute LCDDATA15.2; + LCDDATA15_SEG25COM1 : bit absolute LCDDATA15.1; + LCDDATA15_SEG24COM1 : bit absolute LCDDATA15.0; + LCDDATA16 : byte absolute $07B0; + LCDDATA16_SEG39COM1 : bit absolute LCDDATA16.7; + LCDDATA16_SEG38COM1 : bit absolute LCDDATA16.6; + LCDDATA16_SEG37COM1 : bit absolute LCDDATA16.5; + LCDDATA16_SEG36COM1 : bit absolute LCDDATA16.4; + LCDDATA16_SEG35COM1 : bit absolute LCDDATA16.3; + LCDDATA16_SEG34COM1 : bit absolute LCDDATA16.2; + LCDDATA16_SEG33COM1 : bit absolute LCDDATA16.1; + LCDDATA16_SEG32COM1 : bit absolute LCDDATA16.0; + LCDDATA17 : byte absolute $07B1; + LCDDATA17_SEG45COM1 : bit absolute LCDDATA17.5; + LCDDATA17_SEG44COM1 : bit absolute LCDDATA17.4; + LCDDATA17_SEG43COM1 : bit absolute LCDDATA17.3; + LCDDATA17_SEG42COM1 : bit absolute LCDDATA17.2; + LCDDATA17_SEG41COM1 : bit absolute LCDDATA17.1; + LCDDATA17_SEG40COM1 : bit absolute LCDDATA17.0; + LCDDATA18 : byte absolute $07B2; + LCDDATA18_SEG31COM2 : bit absolute LCDDATA18.7; + LCDDATA18_SEG30COM2 : bit absolute LCDDATA18.6; + LCDDATA18_SEG29COM2 : bit absolute LCDDATA18.5; + LCDDATA18_SEG28COM2 : bit absolute LCDDATA18.4; + LCDDATA18_SEG27COM2 : bit absolute LCDDATA18.3; + LCDDATA18_SEG26COM2 : bit absolute LCDDATA18.2; + LCDDATA18_SEG25COM2 : bit absolute LCDDATA18.1; + LCDDATA18_SEG24COM2 : bit absolute LCDDATA18.0; + LCDDATA19 : byte absolute $07B3; + LCDDATA19_SEG39COM2 : bit absolute LCDDATA19.7; + LCDDATA19_SEG38COM2 : bit absolute LCDDATA19.6; + LCDDATA19_SEG37COM2 : bit absolute LCDDATA19.5; + LCDDATA19_SEG36COM2 : bit absolute LCDDATA19.4; + LCDDATA19_SEG35COM2 : bit absolute LCDDATA19.3; + LCDDATA19_SEG34COM2 : bit absolute LCDDATA19.2; + LCDDATA19_SEG33COM2 : bit absolute LCDDATA19.1; + LCDDATA19_SEG32COM2 : bit absolute LCDDATA19.0; + LCDDATA20 : byte absolute $07B4; + LCDDATA20_SEG45COM2 : bit absolute LCDDATA20.5; + LCDDATA20_SEG44COM2 : bit absolute LCDDATA20.4; + LCDDATA20_SEG43COM2 : bit absolute LCDDATA20.3; + LCDDATA20_SEG42COM2 : bit absolute LCDDATA20.2; + LCDDATA20_SEG41COM2 : bit absolute LCDDATA20.1; + LCDDATA20_SEG40COM2 : bit absolute LCDDATA20.0; + LCDDATA21 : byte absolute $07B5; + LCDDATA21_SEG31COM3 : bit absolute LCDDATA21.7; + LCDDATA21_SEG30COM3 : bit absolute LCDDATA21.6; + LCDDATA21_SEG29COM3 : bit absolute LCDDATA21.5; + LCDDATA21_SEG28COM3 : bit absolute LCDDATA21.4; + LCDDATA21_SEG27COM3 : bit absolute LCDDATA21.3; + LCDDATA21_SEG26COM3 : bit absolute LCDDATA21.2; + LCDDATA21_SEG25COM3 : bit absolute LCDDATA21.1; + LCDDATA21_SEG24COM3 : bit absolute LCDDATA21.0; + LCDDATA22 : byte absolute $07B6; + LCDDATA22_SEG39COM3 : bit absolute LCDDATA22.7; + LCDDATA22_SEG38COM3 : bit absolute LCDDATA22.6; + LCDDATA22_SEG37COM3 : bit absolute LCDDATA22.5; + LCDDATA22_SEG36COM3 : bit absolute LCDDATA22.4; + LCDDATA22_SEG35COM3 : bit absolute LCDDATA22.3; + LCDDATA22_SEG34COM3 : bit absolute LCDDATA22.2; + LCDDATA22_SEG33COM3 : bit absolute LCDDATA22.1; + LCDDATA22_SEG32COM3 : bit absolute LCDDATA22.0; + LCDDATA23 : byte absolute $07B7; + LCDDATA23_SEG45COM3 : bit absolute LCDDATA23.5; + LCDDATA23_SEG44COM3 : bit absolute LCDDATA23.4; + LCDDATA23_SEG43COM3 : bit absolute LCDDATA23.3; + LCDDATA23_SEG42COM3 : bit absolute LCDDATA23.2; + LCDDATA23_SEG41COM3 : bit absolute LCDDATA23.1; + LCDDATA23_SEG40COM3 : bit absolute LCDDATA23.0; + STATUS_SHAD : byte absolute $0FE4; + STATUS_SHAD_Z_SHAD : bit absolute STATUS_SHAD.2; + STATUS_SHAD_DC_SHAD : bit absolute STATUS_SHAD.1; + STATUS_SHAD_C_SHAD : bit absolute STATUS_SHAD.0; + WREG_SHAD : byte absolute $0FE5; + BSR_SHAD : byte absolute $0FE6; + BSR_SHAD_BSR_SHAD4 : bit absolute BSR_SHAD.4; + BSR_SHAD_BSR_SHAD3 : bit absolute BSR_SHAD.3; + BSR_SHAD_BSR_SHAD2 : bit absolute BSR_SHAD.2; + BSR_SHAD_BSR_SHAD1 : bit absolute BSR_SHAD.1; + BSR_SHAD_BSR_SHAD0 : bit absolute BSR_SHAD.0; + PCLATH_SHAD : byte absolute $0FE7; + PCLATH_SHAD_PCLATH_SHAD6 : bit absolute PCLATH_SHAD.6; + PCLATH_SHAD_PCLATH_SHAD5 : bit absolute PCLATH_SHAD.5; + PCLATH_SHAD_PCLATH_SHAD4 : bit absolute PCLATH_SHAD.4; + PCLATH_SHAD_PCLATH_SHAD3 : bit absolute PCLATH_SHAD.3; + PCLATH_SHAD_PCLATH_SHAD2 : bit absolute PCLATH_SHAD.2; + PCLATH_SHAD_PCLATH_SHAD1 : bit absolute PCLATH_SHAD.1; + PCLATH_SHAD_PCLATH_SHAD0 : bit absolute PCLATH_SHAD.0; + FSR0L_SHAD : byte absolute $0FE8; + FSR0H_SHAD : byte absolute $0FE9; + FSR1L_SHAD : byte absolute $0FEA; + FSR1H_SHAD : byte absolute $0FEB; + STKPTR : byte absolute $0FED; + STKPTR_STKPTR4 : bit absolute STKPTR.4; + STKPTR_STKPTR3 : bit absolute STKPTR.3; + STKPTR_STKPTR2 : bit absolute STKPTR.2; + STKPTR_STKPTR1 : bit absolute STKPTR.1; + STKPTR_STKPTR0 : bit absolute STKPTR.0; + TOSL : byte absolute $0FEE; + TOSH : byte absolute $0FEF; + TOSH_TOSH6 : bit absolute TOSH.6; + TOSH_TOSH5 : bit absolute TOSH.5; + TOSH_TOSH4 : bit absolute TOSH.4; + TOSH_TOSH3 : bit absolute TOSH.3; + TOSH_TOSH2 : bit absolute TOSH.2; + TOSH_TOSH1 : bit absolute TOSH.1; + TOSH_TOSH0 : bit absolute TOSH.0; + + + // -- Define RAM state values -- + + {$CLEAR_STATE_RAM} + + {$SET_STATE_RAM '000-00B:SFR:ALLMAPPED'} // Banks 0-31 : INDF0, INDF1, PCL, STATUS, FSR0L, FSR0H, FSR1L, FSR1H, BSR, WREG, PCLATH, INTCON + {$SET_STATE_RAM '00C-01C:SFR'} // Bank 0 : PORTA, PORTB, PORTC, PORTD, PORTE, PIR1, PIR2, PIR3, PIR4, TMR0, TMR1L, TMR1H, T1CON, T1GCON, TMR2, PR2, T2CON + {$SET_STATE_RAM '01E-01F:SFR'} // Bank 0 : CPSCON0, CPSCON1 + {$SET_STATE_RAM '020-06F:GPR'} + {$SET_STATE_RAM '070-07F:GPR:ALLMAPPED'} + {$SET_STATE_RAM '08C-09E:SFR'} // Bank 1 : TRISA, TRISB, TRISC, TRISD, TRISE, PIE1, PIE2, PIE3, PIE4, OPTION_REG, PCON, WDTCON, OSCTUNE, OSCCON, OSCSTAT, ADRESL, ADRESH, ADCON0, ADCON1 + {$SET_STATE_RAM '0A0-0EF:GPR'} + {$SET_STATE_RAM '10C-11B:SFR'} // Bank 2 : LATA, LATB, LATC, LATD, LATE, CM1CON0, CM1CON1, CM2CON0, CM2CON1, CMOUT, BORCON, FVRCON, DACCON0, DACCON1, SRCON0, SRCON1 + {$SET_STATE_RAM '11D-11F:SFR'} // Bank 2 : APFCON, CM3CON0, CM3CON1 + {$SET_STATE_RAM '120-16F:GPR'} + {$SET_STATE_RAM '18C-18C:SFR'} // Bank 3 : ANSELA + {$SET_STATE_RAM '190-196:SFR'} // Bank 3 : ANSELE, EEADRL, EEADRH, EEDATL, EEDATH, EECON1, EECON2 + {$SET_STATE_RAM '199-19F:SFR'} // Bank 3 : RC1REG, TX1REG, SP1BRGL, SP1BRGH, RC1STA, TX1STA, BAUD1CON + {$SET_STATE_RAM '1A0-1EF:GPR'} + {$SET_STATE_RAM '20D-20D:SFR'} // Bank 4 : WPUB + {$SET_STATE_RAM '211-217:SFR'} // Bank 4 : SSP1BUF, SSP1ADD, SSP1MSK, SSP1STAT, SSP1CON1, SSP1CON2, SSP1CON3 + {$SET_STATE_RAM '219-21F:SFR'} // Bank 4 : SSP2BUF, SSP2ADD, SSP2MSK, SSP2STAT, SSP2CON1, SSP2CON2, SSP2CON3 + {$SET_STATE_RAM '220-26F:GPR'} + {$SET_STATE_RAM '28C-28D:SFR'} // Bank 5 : PORTF, PORTG + {$SET_STATE_RAM '291-296:SFR'} // Bank 5 : CCPR1L, CCPR1H, CCP1CON, PWM1CON, CCP1AS, PSTR1CON + {$SET_STATE_RAM '298-29F:SFR'} // Bank 5 : CCPR2L, CCPR2H, CCP2CON, PWM2CON, CCP2AS, PSTR2CON, CCPTMRS0, CCPTMRS1 + {$SET_STATE_RAM '2A0-2EF:GPR'} + {$SET_STATE_RAM '30C-30D:SFR'} // Bank 6 : TRISF, TRISG + {$SET_STATE_RAM '311-316:SFR'} // Bank 6 : CCPR3L, CCPR3H, CCP3CON, PWM3CON, CCP3AS, PSTR3CON + {$SET_STATE_RAM '318-31A:SFR'} // Bank 6 : CCPR4L, CCPR4H, CCP4CON + {$SET_STATE_RAM '31C-31E:SFR'} // Bank 6 : CCPR5L, CCPR5H, CCP5CON + {$SET_STATE_RAM '320-36F:GPR'} + {$SET_STATE_RAM '38C-38D:SFR'} // Bank 7 : LATF, LATG + {$SET_STATE_RAM '394-396:SFR'} // Bank 7 : IOCBP, IOCBN, IOCBF + {$SET_STATE_RAM '3A0-3EF:GPR'} + {$SET_STATE_RAM '40C-40D:SFR'} // Bank 8 : ANSELF, ANSELG + {$SET_STATE_RAM '415-417:SFR'} // Bank 8 : TMR4, PR4, T4CON + {$SET_STATE_RAM '41C-41E:SFR'} // Bank 8 : TMR6, PR6, T6CON + {$SET_STATE_RAM '420-46F:GPR'} + {$SET_STATE_RAM '48D-48D:SFR'} // Bank 9 : WPUG + {$SET_STATE_RAM '491-497:SFR'} // Bank 9 : RC2REG, TX2REG, SP2BRGL, SP2BRGH, RC2STA, TX2STA, BAUD2CON + {$SET_STATE_RAM '4A0-4EF:GPR'} + {$SET_STATE_RAM '520-56F:GPR'} + {$SET_STATE_RAM '5A0-5EF:GPR'} + {$SET_STATE_RAM '620-64F:GPR'} + {$SET_STATE_RAM '791-795:SFR'} // Bank 15 : LCDCON, LCDPS, LCDREF, LCDCST, LCDRL + {$SET_STATE_RAM '798-79D:SFR'} // Bank 15 : LCDSE0, LCDSE1, LCDSE2, LCDSE3, LCDSE4, LCDSE5 + {$SET_STATE_RAM '7A0-7B7:SFR'} // Bank 15 : LCDDATA0, LCDDATA1, LCDDATA2, LCDDATA3, LCDDATA4, LCDDATA5, LCDDATA6, LCDDATA7, LCDDATA8, LCDDATA9, LCDDATA10, LCDDATA11, LCDDATA12, LCDDATA13, LCDDATA14, LCDDATA15, LCDDATA16, LCDDATA17, LCDDATA18, LCDDATA19, LCDDATA20, LCDDATA21, LCDDATA22, LCDDATA23 + {$SET_STATE_RAM 'FE4-FEB:SFR'} // Bank 31 : STATUS_SHAD, WREG_SHAD, BSR_SHAD, PCLATH_SHAD, FSR0L_SHAD, FSR0H_SHAD, FSR1L_SHAD, FSR1H_SHAD + {$SET_STATE_RAM 'FED-FEF:SFR'} // Bank 31 : STKPTR, TOSL, TOSH + + + // -- Define mapped RAM -- + + + + + // -- Un-implemented fields -- + + {$SET_UNIMP_BITS '003:1F'} // STATUS bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '008:1F'} // BSR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '00A:7F'} // PCLATH bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '013:7A'} // PIR3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '014:33'} // PIR4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '018:FD'} // T1CON bit 1 un-implemented (read as 0) + {$SET_UNIMP_BITS '01C:7F'} // T2CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '01E:8F'} // CPSCON0 bits 6,5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '01F:1F'} // CPSCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '093:7A'} // PIE3 bits 7,2,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '094:33'} // PIE4 bits 7,6,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '096:CF'} // PCON bits 5,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '097:3F'} // WDTCON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '098:3F'} // OSCTUNE bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '099:FB'} // OSCCON bit 2 un-implemented (read as 0) + {$SET_UNIMP_BITS '09D:7F'} // ADCON0 bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '09E:F7'} // ADCON1 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '111:F7'} // CM1CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '112:F3'} // CM1CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '113:F7'} // CM2CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '114:F3'} // CM2CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '115:07'} // CMOUT bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '116:81'} // BORCON bits 6,5,4,3,2,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '118:ED'} // DACCON0 bits 4,1 un-implemented (read as 0) + {$SET_UNIMP_BITS '119:1F'} // DACCON1 bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '11E:F7'} // CM3CON0 bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '11F:F3'} // CM3CON1 bits 3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '18C:2F'} // ANSELA bits 7,6,4 un-implemented (read as 0) + {$SET_UNIMP_BITS '190:07'} // ANSELE bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '194:3F'} // EEDATH bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '19F:DB'} // BAUD1CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '28D:3F'} // PORTG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '296:1F'} // PSTR1CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29D:1F'} // PSTR2CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '29F:03'} // CCPTMRS1 bits 7,6,5,4,3,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '30D:3F'} // TRISG bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '316:1F'} // PSTR3CON bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '31A:3F'} // CCP4CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '31E:3F'} // CCP5CON bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '38D:1F'} // LATG bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS '40D:1E'} // ANSELG bits 7,6,5,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '417:7F'} // T4CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '41E:7F'} // T6CON bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS '48D:20'} // WPUG bits 7,6,4,3,2,1,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '497:DB'} // BAUD2CON bits 5,2 un-implemented (read as 0) + {$SET_UNIMP_BITS '791:EF'} // LCDCON bit 4 un-implemented (read as 0) + {$SET_UNIMP_BITS '793:EE'} // LCDREF bits 4,0 un-implemented (read as 0) + {$SET_UNIMP_BITS '794:07'} // LCDCST bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS '795:F7'} // LCDRL bit 3 un-implemented (read as 0) + {$SET_UNIMP_BITS '79D:3F'} // LCDSE5 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7AE:3F'} // LCDDATA14 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B1:3F'} // LCDDATA17 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B4:3F'} // LCDDATA20 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS '7B7:3F'} // LCDDATA23 bits 7,6 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE4:07'} // STATUS_SHAD bits 7,6,5,4,3 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE6:1F'} // BSR_SHAD bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FE7:7F'} // PCLATH_SHAD bit 7 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FED:1F'} // STKPTR bits 7,6,5 un-implemented (read as 0) + {$SET_UNIMP_BITS 'FEF:7F'} // TOSH bit 7 un-implemented (read as 0) + + {$SET_UNIMP_BITS1 '192:80'} // EEADRH bit 7 un-implemented (read as 1) + + + // -- PIN mapping -- + + // Pin 1 : RE1/P2C/VLCD2 + // Pin 2 : RE0/P2D/VLCD1 + // Pin 3 : RG0/CCP3/P3A/SEG42 + // Pin 4 : RG1/AN15/CPS15/TX2/CK2/C3OUT/SEG43 + // Pin 5 : RG2/AN14/CPS14/RX2/DT2/C3IN+/SEG44 + // Pin 6 : RG3/AN13/CPS13/C3IN0-/CCP4/P3D/SEG45 + // Pin 7 : RG5/MCLR/Vpp + // Pin 8 : RG4/AN12/CPS12/C3IN1-/CCP5/P1D/SEG26 + // Pin 9 : Vss + // Pin 10 : Vdd + // Pin 11 : RF7/AN5/CPS5/C3IN3-/C2IN3-/C1IN3-/SS1/SEG25 + // Pin 12 : RF6/AN11/CPS11/C1IN+/SEG24 + // Pin 13 : RF5/AN10/CPS10/C2IN1-/C1IN1-/DACOUT/SEG23 + // Pin 14 : RF4/AN9/CPS9/C2IN+/SEG22 + // Pin 15 : RF3/AN8/CPS8/C3IN2-/C2IN2-/C1IN2-/SEG21 + // Pin 16 : RF2/AN7/CPS7/C1OUT/SRQ/SEG20 + // Pin 17 : RF1/AN6/CPS6/C2OUT/SRNQ/SEG19 + // Pin 18 : RF0/AN16/CPS16/C2IN0-/C1IN0-/SEG41/Vcap + // Pin 19 : AVdd + // Pin 20 : AVss + // Pin 21 : RA3/AN3/Vref+/CPS3/SEG35 + // Pin 22 : RA2/AN2/Vref-/CPS2/SEG34 + // Pin 23 : RA1/AN1/CPS1/SEG18 + // Pin 24 : RA0/AN0/CPS0/SEG33 + // Pin 25 : Vss + // Pin 26 : Vdd + // Pin 27 : RA5/AN4/CPS4/SEG15 + // Pin 28 : RA4/T0CKI/SEG14 + // Pin 29 : RC1/T1OSI/P2A/CCP2/SEG32 + // Pin 30 : RC0/T1OSO/T1CKI/SEG40 + // Pin 31 : RC6/TX1/CK1/SEG27 + // Pin 32 : RC7/RX1/DT1/SEG28 + // Pin 33 : RC2/CCP1/P1A/SEG13 + // Pin 34 : RC3/SCK1/SCL1/SEG17 + // Pin 35 : RC4/SDI1/SDA1/SEG16 + // Pin 36 : RC5/SDO1/SEG12 + // Pin 37 : RB7/ICSPDAT/ICDDAT/SEG39 + // Pin 38 : Vdd + // Pin 39 : RA7/OSC1/CLKIN/SEG37 + // Pin 40 : RA6/OSC2/CLKOUT/SEG36 + // Pin 41 : Vss + // Pin 42 : RB6/ICSPCLK/ICDCLK/SEG38 + // Pin 43 : RB5/T1G/SEG29 + // Pin 44 : RB4/SEG11 + // Pin 45 : RB3/SEG10 + // Pin 46 : RB2/SEG9 + // Pin 47 : RB1/SEG8 + // Pin 48 : RB0/INT/SRI/FLT0/SEG30 + // Pin 49 : RD7/SS2/SEG7 + // Pin 50 : RD6/SCK2/SCL2/P1B/SEG6 + // Pin 51 : RD5/SDI2/SDA2/P1C/SEG5 + // Pin 52 : RD4/SDO2/P3B/SEG4 + // Pin 53 : RD3/P3C/SEG3 + // Pin 54 : RD2/P2B/SEG2 + // Pin 55 : RD1/P2C/SEG1 + // Pin 56 : Vss + // Pin 57 : Vdd + // Pin 58 : RD0/P2D/SEG0 + // Pin 59 : RE7/CCP2/P2A/SEG31 + // Pin 60 : RE6/P1B/COM3 + // Pin 61 : RE5/P1C/COM2 + // Pin 62 : RE4/P3B/COM1 + // Pin 63 : RE3/P3C/COM0 + // Pin 64 : RE2/P2B/VLCD3 + + + // -- RAM to PIN mapping -- + + {$MAP_RAM_TO_PIN '00C:0-24,1-23,2-22,3-21,4-28,5-27,6-40,7-39'} // PORTA + {$MAP_RAM_TO_PIN '00D:0-48,1-47,2-46,3-45,4-44,5-43,6-42,7-37'} // PORTB + {$MAP_RAM_TO_PIN '00E:0-30,1-29,2-33,3-34,4-35,5-36,6-31,7-32'} // PORTC + {$MAP_RAM_TO_PIN '00F:0-58,1-55,2-54,3-53,4-52,5-51,6-50,7-49'} // PORTD + {$MAP_RAM_TO_PIN '010:0-2,1-1,2-64,3-63,4-62,5-61,6-60,7-59'} // PORTE + {$MAP_RAM_TO_PIN '28C:0-18,1-17,2-16,3-15,4-14,5-13,6-12,7-11'} // PORTF + {$MAP_RAM_TO_PIN '28D:0-3,1-4,2-5,3-6,4-8,5-7'} // PORTG + + + // -- Bits Configuration -- + + // FOSC : Oscillator Selection + {$define _FOSC_ECH = $3FFF} // ECH, External Clock, High Power Mode (4-32 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECM = $3FFE} // ECM, External Clock, Medium Power Mode (0.5-4 MHz): device clock supplied to CLKIN pin + {$define _FOSC_ECL = $3FFD} // ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pin + {$define _FOSC_INTOSC = $3FFC} // INTOSC oscillator: I/O function on CLKIN pin + {$define _FOSC_EXTRC = $3FFB} // EXTRC oscillator: External RC circuit connected to CLKIN pin + {$define _FOSC_HS = $3FFA} // HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_XT = $3FF9} // XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins + {$define _FOSC_LP = $3FF8} // LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins + + // WDTE : Watchdog Timer Enable + {$define _WDTE_ON = $3FFF} // WDT enabled + {$define _WDTE_NSLEEP = $3FF7} // WDT enabled while running and disabled in Sleep + {$define _WDTE_SWDTEN = $3FEF} // WDT controlled by the SWDTEN bit in the WDTCON register + {$define _WDTE_OFF = $3FE7} // WDT disabled + + // PWRTE : Power-up Timer Enable + {$define _PWRTE_OFF = $3FFF} // PWRT disabled + {$define _PWRTE_ON = $3FDF} // PWRT enabled + + // MCLRE : MCLR Pin Function Select + {$define _MCLRE_ON = $3FFF} // MCLR/VPP pin function is MCLR + {$define _MCLRE_OFF = $3FBF} // MCLR/VPP pin function is digital input + + // CP : Flash Program Memory Code Protection + {$define _CP_OFF = $3FFF} // Program memory code protection is disabled + {$define _CP_ON = $3F7F} // Program memory code protection is enabled + + // CPD : Data Memory Code Protection + {$define _CPD_OFF = $3FFF} // Data memory code protection is disabled + {$define _CPD_ON = $3EFF} // Data memory code protection is enabled + + // BOREN : Brown-out Reset Enable + {$define _BOREN_ON = $3FFF} // Brown-out Reset enabled + {$define _BOREN_NSLEEP = $3DFF} // Brown-out Reset enabled while running and disabled in Sleep + {$define _BOREN_SBODEN = $3BFF} // Brown-out Reset controlled by the SBOREN bit in the BORCON register + {$define _BOREN_OFF = $39FF} // Brown-out Reset disabled + + // CLKOUTEN : Clock Out Enable + {$define _CLKOUTEN_OFF = $3FFF} // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin + {$define _CLKOUTEN_ON = $37FF} // CLKOUT function is enabled on the CLKOUT pin + + // IESO : Internal/External Switchover + {$define _IESO_ON = $3FFF} // Internal/External Switchover mode is enabled + {$define _IESO_OFF = $2FFF} // Internal/External Switchover mode is disabled + + // FCMEN : Fail-Safe Clock Monitor Enable + {$define _FCMEN_ON = $3FFF} // Fail-Safe Clock Monitor is enabled + {$define _FCMEN_OFF = $1FFF} // Fail-Safe Clock Monitor is disabled + + // WRT : Flash Memory Self-Write Protection + {$define _WRT_OFF = $3FFF} // Write protection off + {$define _WRT_BOOT = $3FFE} // 000h to 1FFh write protected, 200h to 3FFFh may be modified by EECON control + {$define _WRT_HALF = $3FFD} // 000h to 1FFFh write protected, 2000h to 3FFFh may be modified by EECON control + {$define _WRT_ALL = $3FFC} // 000h to 3FFFh write protected, no addresses may be modified by EECON control + + // VCAPEN : Voltage Regulator Capacitor Enable + {$define _VCAPEN_OFF = $3FFF} // VCAP pin functionality is disabled + {$define _VCAPEN_ON = $3FEF} // VCAP functionality is enabled on VCAP pin + + // PLLEN : PLL Enable + {$define _PLLEN_ON = $3FFF} // 4x PLL enabled + {$define _PLLEN_OFF = $3EFF} // 4x PLL disabled + + // STVREN : Stack Overflow/Underflow Reset Enable + {$define _STVREN_ON = $3FFF} // Stack Overflow or Underflow will cause a Reset + {$define _STVREN_OFF = $3DFF} // Stack Overflow or Underflow will not cause a Reset + + // BORV : Brown-out Reset Voltage Selection + {$define _BORV_LO = $3FFF} // Brown-out Reset Voltage (Vbor), low trip point selected. + {$define _BORV_HI = $3BFF} // Brown-out Reset Voltage (Vbor), high trip point selected. + + // LVP : Low-Voltage Programming Enable + {$define _LVP_ON = $3FFF} // Low-voltage programming enabled + {$define _LVP_OFF = $1FFF} // High-voltage on MCLR/VPP must be used for programming + +implementation +end. diff --git a/language/parchar.bat b/language/parchar.bat deleted file mode 100644 index 197676f8..00000000 --- a/language/parchar.bat +++ /dev/null @@ -1,2 +0,0 @@ -REM ---- Ejecutar como admin ------ -patch -p0 < language.patch \ No newline at end of file diff --git a/language/patch.exe b/language/patch.exe deleted file mode 100644 index 45b07c0e..00000000 Binary files a/language/patch.exe and /dev/null differ diff --git a/language/tra_CfgExtTool.pas b/language/tra_CfgExtTool.pas index 40df7afc..2353b5ed 100644 --- a/language/tra_CfgExtTool.pas +++ b/language/tra_CfgExtTool.pas @@ -1,38 +1,42 @@ -var - ER_FAIL_EXEC_, PRE_TOOL_NAME: string; - procedure TfraCfgExtTool.SetLanguage; begin //Editor settings - label4.Caption := trans('Tools:' , 'Herramientas:' ,'Llamk''anakuna:', - '' , 'Інструменти:','Инструменты:'); label1.Caption := trans('Name:' , 'Nombre:' ,'Suti:', - '' , 'Імʼя','Имя'); + '' , 'Імʼя','Имя', 'Nom:'); label2.Caption := trans('Program Path:' , 'Ruta del programa:' ,'Programapa ñannin:', - '' , 'Шлях до програми:','Путь к программе:'); + '' , 'Шлях до програми:','Путь к программе:', 'Répertoire de l''application:'); label3.Caption := trans('Command line:' , 'Línea de comando:' ,'', - '' , 'Командний рядок:','Коммандная строка:'); + '' , 'Командний рядок:','Коммандная строка:', 'Ligne de commande:'); label5.Caption := trans('To reference the output *.hex file, use $(hexFile)', 'Para referirse al archivo de salida, usar $(hexFile)', '', - '' , 'Для посилання на вихідний *.hex файл, використовуй $(hexFile)','Для ссылки на выходной *.hex файл, используй $(hexFile)'); + '' , 'Для посилання на вихідний *.hex файл, використовуй $(hexFile)','Для ссылки на выходной *.hex файл, используй $(hexFile)', '$(hexFile) : insüre le fichier .hex'); label6.Caption := trans('To reference the source file, use ${mainFile}', 'Para referirse al archivo fuente, usar $(mainFile)', '', - '' , 'Для посилання на файл сирця, use ${mainFile}','Для ссылки на файл исходника, используй ${mainFile}'); + '' , 'Для посилання на файл сирця, use ${mainFile}','Для ссылки на файл исходника, используй ${mainFile}', '$(mainFile) : insère le fichier source'); + label4.Caption := trans('16x16 icon:' , 'Ícono de 16x16:' ,'', + '' , '', '', ''); + label7.Caption := trans('32x32 icon:' , 'Ícono de 32x32:' ,'', + '' , '', '', ''); + chkWaitExit.Caption := trans('&Wait on exit' , '&Esperar a terminar' ,'Tukurinanta &Suyariy', - '' , '', ''); + '' , '', '', '&Attendre la fin de l''exécution'); chkShowTBar.Caption := trans('&Show in Toolbar' , '&Mostrar en la barra de Herram.' ,'', - '' , 'Показувати в тулбарі','Показывать в тулбаре'); + '' , 'Показувати в тулбарі','Показывать в тулбаре', '&Montrer dans la barre d''outils'); butTest.Caption := trans('&Test' , '&Probar' ,'', - '' , 'Тест','Тест'); + '' , 'Тест','Тест', '&Tester'); butAdd.Caption := trans('&Add' , '&Agregar' ,'', - '' , 'Додати','Добавить'); + '' , 'Додати','Добавить', '&Ajouter'); butRemove.Caption := trans('&Remove' , '&Eliminar' ,'', - '' , 'Видалити','Удалить'); + '' , 'Видалити','Удалить', '&Supprimer'); - ER_FAIL_EXEC_ := trans('Fail executing: %s', 'Falla ejecutando: %s', '', - '' , 'Невдале виконання: %s','Сбой выболнения: %s'); - PRE_TOOL_NAME := trans('Tool' , 'Herramienta', '', - '' , 'Інструмент','Инструмент'); + ER_FAIL_EXEC_ := trans('Fail executing: %s', 'Falla ejecutando: %s', '', + '' , 'Невдале виконання: %s','Сбой выболнения: %s', 'Erreur d''exécution: %s'); + PRE_TOOL_NAME := trans('Tool' , 'Herramienta', '', + '' , 'Інструмент','Инструмент', 'Outil'); + ER_ICO_FIL_UNEXIS_ := trans('Icon file doesn''t exist: %s', 'No existe el archivo de ícono: %s', '', + '' , '', '', ''); + ER_BOTH_ICO_SPEC := trans('Both icon files must be specified.', 'Se debe especificar ambos íconos.', '', + '' , '', '', ''); end; diff --git a/language/tra_CfgSynEdit.pas b/language/tra_CfgSynEdit.pas index d5eca783..d8097f4c 100644 --- a/language/tra_CfgSynEdit.pas +++ b/language/tra_CfgSynEdit.pas @@ -1,33 +1,33 @@ //Editor Colors settings -Label8.Caption := trans('Back color:' , 'Color de fondo:' ,'', - 'Hintergrundfarbe:', 'Колір фону','Цвет фона'); -Label9.Caption := trans('Font Color:' , 'Color texto:' ,'', - 'Schriftfarbe:' ,'Колір шрифту','Цвет шрифта'); +Label8.Caption := trans('Back color:' , 'Color de fondo:' ,'', + 'Hintergrundfarbe:', 'Колір фону','Цвет фона', 'Fond'); +Label9.Caption := trans('Font Color:' , 'Color texto:' ,'', + 'Schriftfarbe:' ,'Колір шрифту','Цвет шрифта', 'Texte'); chkAutoindent.Caption:= trans('Autoindent' , 'Auto-indentado' ,'', - 'Autom. Einrückung', '',''); -chkHighCurLin.Caption := trans('Hightlight current line', 'Marcar línea actual' ,'', - 'Markiere aktuelle Zeile' , 'Підсвітка поточного рядка','Подсветка текущей строки'); + 'Autom. Einrückung', '','', 'Indentation automatique'); +chkHighCurLin.Caption := trans('Highlight current line', 'Marcar línea actual' ,'', + 'Markiere aktuelle Zeile' , 'Підсвітка поточного рядка','Подсветка текущей строки', 'Surbrillance ligne active'); chkHighCurWord.Caption:= trans('Highlight current word ', 'Resaltar palabra bajo cursor','', - 'Aktuelles Wort markieren', 'Підсвітка поточного слова','Подсветка текущего слова'); + 'Aktuelles Wort markieren', 'Підсвітка поточного слова','Подсветка текущего слова', 'Surbrillance mot actif'); label10.Caption := trans('Back color:' , 'Color de fondo:' ,'', - 'Hintergrundfarbe:' , 'Колір фону','Цвет фона'); + 'Hintergrundfarbe:' , 'Колір фону', 'Цвет фона', 'Fond'); label11.Caption := trans('Text color:' , 'Color de texto:' ,'', - 'Farbe Text:' , 'Колір текста','Цвет текста'); + 'Farbe Text:' , 'Колір текста', 'Цвет текста', 'Texte'); label12.Caption := trans('Frame color:' , 'Color de borde:' ,'', - '' , 'Колір рамки','Цвет рамки'); + '' , 'Колір рамки', 'Цвет рамки', 'Cadre'); chkFullWord.Caption := trans('Full Word' , 'Palabra completa' ,'', - '' , 'Повне слово','Полное слово'); + '' , 'Повне слово', 'Полное слово', 'Mot complet'); chkVerPanVer.Caption := trans('Gutter ' , 'Panel Vertical' ,'', - 'Rinne' , '',''); + 'Rinne' , '','', 'Marge'); chkVerNumLin.Caption := trans('Show line number' , 'Ver Núm.de línea' ,'', - 'Zeilennummer anzeigen' , 'Показувати номер рядка','Показывать номер строки'); + 'Zeilennummer anzeigen' , 'Показувати номер рядка','Показывать номер строки', 'Numéros de ligne'); label2.Caption := trans('Back color:' , 'Color Fondo:' ,'', - 'Hintergrundfarbe:' , 'Колір фону','Цвет фона'); + 'Hintergrundfarbe:' , 'Колір фону','Цвет фона', 'Fond'); chkVerMarPle.Caption := trans('Show folding marks' , 'Ver Marc.de plegado' ,'', - 'Klappbare Marken zeigen', 'Показувати згортаючі мітки','Показывать сворачивающие метки'); + 'Klappbare Marken zeigen', 'Показувати згортаючі мітки','Показывать сворачивающие метки', 'Balises de' + #13#10 + 'regroupement'); label3.Caption := trans('Text color:' , 'Color de texto:' ,'', - 'Farbe Text:' , 'Колір текста','Цвет текста'); + 'Farbe Text:' , 'Колір текста','Цвет текста', 'Texte'); diff --git a/language/tra_CompBase.pas b/language/tra_CompBase.pas new file mode 100644 index 00000000..c3a20f58 --- /dev/null +++ b/language/tra_CompBase.pas @@ -0,0 +1,38 @@ +//Parser unit +ER_IDEN_EXPECT := trans('Identifier expected.' , 'Identificador esperado.' ,'', + 'Bezeichner erwartet.' , 'Очікується ідентифікатор.','Ожидается идентификатор.', 'Identifiant attendu.'); +ER_NOT_IMPLEM_ := trans('Not implemented: "%s"' , 'No implementado: "%s"' ,'', + 'Nicht implementiert: "%s"' , 'Не впроваджено: "%s"','Не реализовано: "%s"', 'Non implémenté : "%s"'); +ER_DUPLIC_IDEN := trans('Duplicated identifier: "%s"' , 'Identificador duplicado: "%s"' ,'', + 'Doppelter Platzhalter: "%s"' , 'Дубльований ідентифікатор: "%s"','Дублированный идентификатор: "%s"', 'Identifiant à double : "%s"'); +ER_UNDEF_TYPE_ := trans('Undefined type "%s"' , 'Tipo "%s" no definido.' ,'', + 'Undefinierter Typ "%s"' , 'Невизначений тип "%s"','Неопределённый тип "%s"', 'Type indéfini "%s"'); +ER_SEMIC_EXPEC := trans('";" expected.' , 'Se esperaba ";"', '', + '', '', '', ''); +ER_STR_EXPECTED := trans('"%s" expected.' , 'Se esperaba "%s"' , '', + '', '', '', ''); +ER_TYP_PARM_ER_ := trans('Type parameters error on %s', 'Error en tipo de parámetros de %s', '', + '', '', '', ''); +ER_UNKNOWN_IDE_ := trans('Unknown identifier: %s' , 'Identificador desconocido: %s' , '', + '', '', '', ''); +ER_IN_EXPRESSI := trans('Error in expression. ")" expected.', 'Error en expresión. Se esperaba ")"', '', + '', '', '', ''); +ER_OPERAN_EXPEC := trans('Operand expected.' , 'Se esperaba operando.' , '', + '', '', '', ''); +ER_ILLEG_OPERA_ := trans('Illegal Operation: %s' , 'Operación no válida: %s' , '', + '', '', '', ''); +ER_UND_OPER_TY_ := trans('Undefined operator: %s for type: %s', 'No está definido el operador: %s para tipo: %s', '', + '', '', '', ''); +ER_CAN_AP_OPER_ := trans('Cannot apply the operator "%s" to type "%s"', 'No se puede aplicar el operador "%s" al tipo "%s"', '', + '', '', '', ''); +ER_IN_CHARACTER := trans('Error in character.' , 'Error en caracter.' , '', + '', '', '', ''); +ER_INV_COD_CHAR := trans('Invalid code for char.' , 'Código inválido para caracter' , '', + '', '', '', ''); +ER_IDE_TYP_EXP := trans('Identifier of type expected.', 'Se esperaba identificador de tipo.','', + 'Typenbezeichner erwartet.' , 'Очікується ідентифікатор типу.','Ожидается идентификатор типа.', 'Identifiant de type attendu.'); +ER_ONLY_ONE_REG:= trans('Only one REGISTER parameter is allowed.', 'Solo se permite un parámetro REGISTER.', '', + 'Nur ein REGISTER Parameter erlaubt.' ,'Дозволено тільки один параметр REGISTER.','Только один параметр REGISTER разрешён.', 'Un seul paramètre REGISTRE est autorisé.'); +ER_RA_HAV_USED := trans('Register A has been used.' , 'Ya se ha usado el rgistro A.','', + '' , '','', ''); + diff --git a/language/tra_CompMain.pas b/language/tra_CompMain.pas new file mode 100644 index 00000000..d0cdeb65 --- /dev/null +++ b/language/tra_CompMain.pas @@ -0,0 +1,57 @@ +ER_INV_MEMADDR := trans('Invalid memory address.' , 'Dirección de memoria inválida.','', + 'Ungültige Speicheradresse.' , 'Недійсна адреса памʼяті.','Недопустимый адрес памяти.', 'Adresse mémoire invalide.'); +ER_EXP_VAR_IDE := trans('Identifier of variable expected.', 'Se esperaba identificador de variable.','', + 'Variablenbezeichner erwartet.' , 'Очікується фдентифікатор змінної.','Ожидается идентификатор переменной.', 'Identifiant de variable attendu.'); +ER_NUM_ADD_EXP := trans('Numeric address expected.' , 'Se esperaba dirección numérica.','', + 'Numerische Adresse erwartet.', 'Очікується числова адреса.' ,'Ожидается числовой адрес.', 'Adresse numérique attendue.'); +ER_CON_EXP_EXP := trans('Constant expression expected.', 'Se esperaba una expresión constante','', + 'Konstanter Ausdruck erwartet.', '', '', 'Expression constante attendue.'); +ER_EQU_EXPECTD := trans('"=" expected.' , 'Se esperaba "="' ,'', + '"=" erwartet.' , '"=" очікується.' ,'"=" ожидается.' , '"=" attendue.'); +ER_IDEN_EXPECT := trans('Identifier expected.' , 'Identificador esperado.' ,'', + 'Bezeichner erwartet.' , 'Очікується ідентифікатор.','Ожидается идентификатор.', 'Identifiant attendu.'); +ER_NOT_IMPLEM_ := trans('Not implemented: "%s"' , 'No implementado: "%s"' ,'', + 'Nicht implementiert: "%s"' , 'Не впроваджено: "%s"','Не реализовано: "%s"', 'Non implémenté : "%s"'); +ER_SEM_COM_EXP := trans('":" or "," expected.' , 'Se esperaba ":" o ",".' ,'', + '":"oder"," erwartet.' , '":" або "," очікується.','":" или "," ожидается.', '":" ou "," attendus.'); +ER_INV_ARR_SIZ := trans('Invalid array size.', 'Tamaño de arreglo inválido', '', + '' , 'Помилка в розмірі масиву.','Ошибка размера массива.', 'Taille de tableau invalide.'); +ER_ARR_SIZ_BIG := trans('Array size to big.' , 'Tamaño de arreglo muy grande', '', + '' ,'Розмір масиву завеликий.','Размер массива слишком велик.', 'Tableau trop grand.'); +ER_IDE_TYP_EXP := trans('Identifier of type expected.', 'Se esperaba identificador de tipo.','', + 'Typenbezeichner erwartet.' , 'Очікується ідентифікатор типу.','Ожидается идентификатор типа.', 'Identifiant de type attendu.'); +ER_IDE_CON_EXP := trans('Identifier of constant expected.', 'Se esperaba identificador de constante','', + 'Konstantenbezeichner erwartet.' , 'Очікується ідентифікатор константи.','Ожидается идентификатор константы.', 'Identifiant de constante attendu'); +ER_EQU_COM_EXP := trans('"=" or "," expected.' , 'Se esperaba "=" o ","' ,'', + '"=" oder "," erwartet.' , '"=" або "," очікується.','"=" или "," ожидается.', '"=" ou "," attendus.'); +ER_DUPLIC_IDEN := trans('Duplicated identifier: "%s"' , 'Identificador duplicado: "%s"' ,'', + 'Doppelter Platzhalter: "%s"' , 'Дубльований ідентифікатор: "%s"','Дублированный идентификатор: "%s"', 'Identifiant à double : "%s"'); +ER_NOTYPDEF_NU := trans('No type defined to allocate this number.', 'No hay tipo para almacenar este número.', '', + '','Не визначено тип, щоб виділити цей номер.','Нет определенного типа, чтобы выделить это число.', 'Aucun type défini pour allouer ce nombre'); +ER_EOF_END_EXP := trans('Unexpected end of file. "end" expected.', 'Inesperado fin de archivo. Se esperaba "end".','', + 'Unerwartetes Dateiende. "end" erwartet.','Неочікуваний кінець файла. "end" очікується.','Неожиданный конец файла. "end" ожидается.', '"end" attendu à la fin du fichier.'); +ER_ELS_UNEXPEC := trans('"else" unexpected.' , '"else" inesperado', '', + '"else" nicht erwartet.','"else" несподівано.','"else" неожиданно.', '"else" inattendu.'); +ER_END_EXPECTE := trans('"end" expected.', 'Se esperaba "end".','', + '"End" erwartet.','"end" очікується.','"end" ожидается.', '"end" attendu.'); +ER_NOT_AFT_END := trans('Syntax error. Nothing should be after "END."' , 'Error de sintaxis. Nada debe aparecer después de "END."','', + 'Syntax-Fehler. Es sollte nichts nach "END." kommen.', 'Синтаксична помилка. Нічого не повинно бути після "END."','Ошибка синтаксиса. Ничего не должно быть после "END."', 'Erreur de syntaxe. Rien ne devrait suivre "END."'); +ER_ONLY_ONE_REG:= trans('Only one REGISTER parameter is allowed.', 'Solo se permite un parámetro REGISTER.', '', + 'Nur ein REGISTER Parameter erlaubt.' ,'Дозволено тільки один параметр REGISTER.','Только один параметр REGISTER разрешён.', 'Un seul paramètre REGISTRE est autorisé.'); +ER_BOOL_EXPECT := trans('Boolean expression expected.' , 'Se esperaba expresión booleana.','', + 'Bool''scher Ausdruck erwartet.','Очікується булевий вираз.','Ожидается булевое выражение.', 'Expression booléenne attendue'); +ER_INST_NEV_EXE:= trans('Instruction will never execute.' , 'Esta instrucción no se ejecutará', '', + 'Bereich wird niemals ausgeführt.','Інструкція ніколи не виконуватиметься.','Инструкция никогда не будет выполнена.', 'L''instruction ne sera jamais exécutée.'); +ER_UNKN_STRUCT := trans('Unknown structure.' , 'Estructura desconocida.','', + 'Unbekannte Struktur.' ,'Невідома структура.','Неизвестная структура.', 'Structure inconnue.'); +ER_ERR_IN_NUMB := trans('Error in number.' , 'Error en número' ,'', + 'Fehler bei Nummer.' ,'Помилка в числі.','Ошибка в числе.', 'Nombre invalide.'); +ER_UNDEF_TYPE_ := trans('Undefined type "%s"' , 'Tipo "%s" no definido.' ,'', + 'Undefinierter Typ "%s"' , 'Невизначений тип "%s"','Неопределённый тип "%s"', 'Type indéfini "%s"'); +ER_DUPLIC_FUNC_:= trans('Duplicated function: %s' ,'Función duplicada: %s', '', + '', '', '', ''); +ER_FIL_NOFOUND := trans('File not found: %s' , 'Archivo no encontrado: %s', '', + 'Datei nicht gefunden: "%s"', 'Файл не знайдено: %s','Файл не найден: %s', 'Fichier non trouvé: %s'); +ER_PROG_NAM_EX := trans('Program name expected.' , 'Se esperaba nombre de programa.','', + 'Name des Programms erwartet.','Очікується імʼя програми.','Ожидается имя программы.', 'Nom de programme attendu.'); + diff --git a/language/tra_Compiler.pas b/language/tra_Compiler.pas new file mode 100644 index 00000000..be7dd448 --- /dev/null +++ b/language/tra_Compiler.pas @@ -0,0 +1,54 @@ + +//Update messages +ER_NOT_IMPLEM_ := trans('Not implemented: "%s"' , 'No implementado: "%s"' ,'', + 'Nicht implementiert: "%s"' ,'Не впроваджено: "%s"','Не реализовано: "%s"', 'Non implémenté : "%s"'); +ER_IDEN_EXPECT := trans('Identifier expected.' , 'Identificador esperado.' ,'', + 'Bezeichner erwartet.' , 'Очікується ідентифікатор.','Ожидается идентификатор.', 'Identifiant attendu.'); +ER_DUPLIC_IDEN := trans('Duplicated identifier: "%s"', 'Identificador duplicado: "%s"' ,'', + 'Doppelter Platzhalter: "%s"','Дубльований ідентифікатор: "%s"','Дублированный идентификатор: "%s"', 'Identifiant à double : "%s"'); +ER_INVAL_FLOAT := trans('Unvalid float number.' , 'Número decimal no válido.' ,'', + 'Ungültige Gleitkommazahl.' ,'Невірне число з плаваючою комою.','Недопустимое число с плавающей запятой.', 'Nombre à virgule flottante invalide.'); +ER_NOTYPDEFNUM := trans('No type defined to accommodate this number.', 'No hay tipo definido para albergar a este número.','', + 'Kein Typ definiert.' ,'Для типу цього числа не визначено жодного типу','Не определён тип для размещения этого числа', 'Aucun type défini pour ce nombre.'); +ER_INV_MEMADDR := trans('Invalid memory address.' , 'Dirección de memoria inválida.','', + 'Ungültige Speicheradresse.' , 'Недійсна адреса памʼяті.','Недопустимый адрес памяти.', 'Adresse mémoire invalide.'); +ER_BIT_VAR_REF := trans('A bit variable reference expected.' , 'Se esreraba referencia a una variable bit.','', + 'Es wird eine Bitvariablen-referenz erwartet.', 'Очікується біт-змінна.','Ожидается бит-переменная.', 'Référence de bit attendue.'); +ER_EXP_VAR_IDE := trans('Identifier of variable expected.', 'Se esperaba identificador de variable.','', + 'Variablenbezeichner erwartet.' , 'Очікується фдентифікатор змінної.','Ожидается идентификатор переменной.', 'Identifiant de variable attendu.'); +ER_UNKNOWN_ID_ := trans('Unknown identifier: %s' , 'Identificador desconocido: %s' ,'', + 'Unbekannter Bezeichner: %s' , 'Невідомий ідентифікатор: %s','Неизвестный идентификатор: %s', 'Identifiant inconnu : %s'); +ER_IDE_CON_EXP := trans('Identifier of constant expected.', 'Se esperaba identificador de constante','', + 'Konstantenbezeichner erwartet.' , 'Очікується ідентифікатор константи.','Ожидается идентификатор константы.', 'Identifiant de constante attendu'); +ER_NUM_ADD_EXP := trans('Numeric address expected.' , 'Se esperaba dirección numérica.','', + 'Numerische Adresse erwartet.', 'Очікується числова адреса.','Ожидается числовой адрес.', 'Adresse numérique attendue.'); +ER_IDE_TYP_EXP := trans('Identifier of type expected.', 'Se esperaba identificador de tipo.','', + 'Typenbezeichner erwartet.' , 'Очікується ідентифікатор типу.','Ожидается идентификатор типа.', 'Identifiant de type attendu.'); +ER_SEM_COM_EXP := trans('":" or "," expected.' , 'Se esperaba ":" o ",".' ,'', + '":"oder"," erwartet.' , '":" або "," очікується.','":" или "," ожидается.', '":" ou "," attendus.'); +ER_EQU_COM_EXP := trans('"=" or "," expected.' , 'Se esperaba "=" o ","','', + '"=" oder "," erwartet.' , '"=" або "," очікується.','"=" или "," ожидается.', '"=" ou "," attendus.'); +ER_COMPIL_PROC := trans('There is a compilation in progress.' , 'Ya se está compilando un programa actualmente.','', + 'Es ist (noch) ein Kompiliervorgang aktiv.', 'Триває компіляція.','Происходит компиляция.', 'Une compilation et en cours.'); +ER_CON_EXP_EXP := trans('Constant expression expected.', 'Se esperaba una expresión constante','', + 'Konstanter Ausdruck erwartet.', '', '', 'Expression constante attendue.'); +ER_FIL_NOFOUND := trans('File not found: %s' , 'Archivo no encontrado: %s', '', + 'Datei nicht gefunden: "%s"', 'Файл не знайдено: %s','Файл не найден: %s', 'Fichier non trouvé: %s'); + +WA_UNUSED_CON_ := trans('Unused constant: %s', 'Constante sin usar: %s', '', + 'Unbenutzte Konstante: %s','Невикористана константа: %s','Неиспользованная константа: %s', 'Constante non utilisée : %s'); +WA_UNUSED_VAR_ := trans('Unused variable: %s', 'Variable sin usar: %s', '', + 'Unbenutzte Variable:%s','Невикористана змінна: %s','Неиспользованная переменная: %s', 'Variable non utilisée : %s'); +WA_UNUSED_PRO_ := trans('Unused procedure: %s', 'Procedimiento sin usar: %s', '', + 'Unbenutztes Prozedur:%s','Невикористана процедура: %s','Неиспользованная процедура: %s', 'Procédure non utilisée : %s'); + +MSG_RAM_USED := trans('RAM Used = ' , 'RAM usada =', '', + 'RAM verwendet = ','RAM використано = ','RAM использовано = ', 'RAM utilisée ='); +MSG_FLS_USED := trans('Flash Used = ' , 'Flash usada=', '', + 'Flash verwendet =','Flash використано = ','Flash использовано = ', 'FLASH utilisée ='); +ER_ARR_SIZ_BIG := trans('Array size to big.' , 'Tamaño de arreglo muy grande', '', + '' ,'Розмір масиву завеликий.','Размер массива слишком велик.', 'Tableau trop grand.'); +ER_INV_ARR_SIZ := trans('Invalid array size.', 'Tamaño de arreglo inválido', '', + '' , 'Помилка в розмірі масиву.','Ошибка размера массива.', 'Taille de tableau invalide.'); + + diff --git a/language/tra_FormConfig.pas b/language/tra_FormConfig.pas index bf95ccc0..8d26afdf 100644 --- a/language/tra_FormConfig.pas +++ b/language/tra_FormConfig.pas @@ -11,157 +11,157 @@ procedure TConfig.SetLanguage; fraCfgSyntax.SetLanguage; Caption := Trans('Settings' , 'Configuración' , '', - 'Einstellungen','Налаштування','Настройки'); + 'Einstellungen','Налаштування','Настройки', 'Paramètres'); BitAceptar.Caption := Trans('&OK' , 'Aceptar' , '', - '&Ok','',''); + '&Ok','','', '&Ok'); BitAplicar.Caption := Trans('&Apply' , 'Aplicar' , '', - '&Übernehmen','Застосувати','Применить'); + '&Übernehmen','Застосувати','Применить', '&Appliquer'); BitCancel.Caption := Trans('&Cancel' , 'Cancelar' , '', - '&Abbrechen','Відміна','Отмена'); + '&Abbrechen','Відміна','Отмена', 'A&nnuler'); //////////////////////////////////////////////////////////////////////////// ////////////////////////// Environment Settings ////////////////////////// //////////////////////////////////////////////////////////////////////////// TIT_CFG_ENVIRON := Trans('Environment', 'Entorno', '', - 'Umgebung','Оточення','Окружение'); + 'Umgebung','Оточення','Окружение', 'Environnement'); Label2.Caption := Trans('Language' , 'Lenguaje' , '', - 'Sprache','Мова','Язык'); -RadioGroup1.Caption := Trans('Toolbar' , 'Barra de herramientas' , '', - 'Werkzeugleiste','Панель інструментів','Панель инструментов'); + 'Sprache','Мова','Язык', 'Langue'); +RadioGroup1.Caption := Trans('Toolbar' , 'Barra de herramientas' , 'Barre d''outils', + 'Werkzeugleiste','Панель інструментів','Панель инструментов', ''); RadioGroup1.Items[0]:= Trans('Small Icons' , 'Íconos pequeños' , '', - 'Kleine Bilder','Маленькі піктограми','Маленькие иконки'); + 'Kleine Bilder','Маленькі піктограми','Маленькие иконки', 'Petites Icônes'); RadioGroup1.Items[1]:= Trans('Big Icons' , 'Íconos grandes' , '', - 'Große Bilder','Великі піктограми','Большие иконки'); + 'Große Bilder','Великі піктограми','Большие иконки', 'Grandes Icônes'); label1.Caption := Trans('Units Path:' , 'Ruta de unidades' , '', - 'Unitpfad:','',''); + 'Unitpfad:','','', 'Répertoire des unités:'); label3.Caption := Trans('&Set Theme' , '&Fijar Tema', '', - '','Обрати тему','Выбрать тему'); + '','Обрати тему','Выбрать тему', '&Charger un thème'); LABEL_THEM_NONE := Trans('None', 'Ninguno', '', - '','Нічого','Ничего'); + '','Нічого','Ничего', 'Aucun'); label4.Caption := Trans('&Create Theme' , '&Crear Tema', '', - '','Створити тему','Создать тему'); + '','Створити тему','Создать тему', '&Créer un thème'); butSaveCurThem.Caption := Trans('&Save current config.', 'Guardar config. actual', '', - '','Зберегти налаштування','Сохранить настройки');; + '','Зберегти налаштування','Сохранить настройки', '&Enregister thème actuel');; chkLoadLast.Caption := Trans('Load last file edited' , 'Cargar último archivo editado', '', - 'Letzte editierte Datei laden','Завантажити останній файл','Загрузить последний файл'); + 'Letzte editierte Datei laden','Завантажити останній файл','Загрузить последний файл', 'Charger le dernier' + #13#10 + 'fichier édité'); lblPanelCol.Caption := Trans('Panels Color:' , 'Color de los paneles:', '', - 'Paneelenfarbe:','Колір панелей:','Цвет панелей:'); + 'Paneelenfarbe:','Колір панелей:','Цвет панелей:', 'Couleur des panneaux:'); lblSplitCol.Caption := Trans('Splitters color:' , 'Color de los separadores:', '', - 'Trenner-Farbe:','Колір розподілувача:','Цвет разделителя:'); + 'Trenner-Farbe:','Колір розподілувача:','Цвет разделителя:', 'Couleur des séparateurs:'); //////////////////////////////////////////////////////////////////////////// ////////////////////////// Code Explorer ////////////////////////// //////////////////////////////////////////////////////////////////////////// TIT_CFG_CODEXP := Trans('Code Explorer', 'Explorador de Código', '', - '','Оглядач коду','Инспектор кода'); + '','Оглядач коду','Инспектор кода', 'Explorateur de Code'); lblCodExplCol1.Caption:= Trans('Back color:' , 'Color de Fondo:', '', - 'Hintergrundfarbe:','Колір фону:','Цвет фона:'); + 'Hintergrundfarbe:','Колір фону:','Цвет фона:', 'Couleur de fond'); lblCodExplCol2.Caption:= Trans('Text Color:' , 'Color de Texto:', '', - 'Textfarbe:','Колір тексту:','Цвет текста:'); + 'Textfarbe:','Колір тексту:','Цвет текста:', 'Couleur du texte'); grpFilType.Caption := Trans('File types shown:' , 'Tipos de archivos mostrados:', '', - '','',''); + '','','', 'Types de fichiers affichés:'); //////////////////////////////////////////////////////////////////////////// ////////////////////////// Message Panel ////////////////////////// //////////////////////////////////////////////////////////////////////////// TIT_CFG_MESPAN := Trans('Message Panel', 'Panel de Mensajes', '', - '','Панель повідомлень','Панель сообщений'); + '','Панель повідомлень','Панель сообщений', 'Panneau de Messages'); lblMessPan1.Caption := Trans('Back color' , 'Color de Fondo', '', - 'Hintergrundfarbe','Колір фону','Цвет фона'); + 'Hintergrundfarbe','Колір фону','Цвет фона', 'Couleur de fond'); lblMessPan2.Caption := Trans('Text color:' , 'Color de Texto', '', - 'Textfarbe:','Колір тексту:','Цвет текста:'); + 'Textfarbe:','Колір тексту:','Цвет текста:', 'Couleur du texte:'); lblMessPan3.Caption := Trans('Error color:' , 'Color de Error', '', - 'Fehlerfarbe:','Колір помилки:','Цвет ошибки:'); + 'Fehlerfarbe:','Колір помилки:','Цвет ошибки:', 'Couleur des erreurs:'); lblMessPan4.Caption := Trans('Selection color:', 'Color de Selección', '', - 'Auswahlfarbe:','Колір обраного:','Цвет выделения:'); + 'Auswahlfarbe:','Колір обраного:','Цвет выделения:', 'Couleur de sélection:'); //////////////////////////////////////////////////////////////////////////// ////////////////////////// Editor settings /////////////////////////////// //////////////////////////////////////////////////////////////////////////// TIT_CFG_EDITOR := Trans('Editor' , 'Editor' , '', - 'Editor','Редактор','Редактор'); + 'Editor','Редактор','Редактор', 'Editeur'); Label6.Caption := trans('&Font:' , '&Letra:' ,'', - 'Schri&ftart:','Шрифт:','Шрифт:'); + 'Schri&ftart:','Шрифт:','Шрифт:', 'Police'); Label7.Caption := trans('&Size:' , '&Tamaño:' ,'', - '&Größe:','Розмір:','Размер:'); + '&Größe:','Розмір:','Размер:', 'Taille'); chkViewVScroll.Caption:= trans('&Vertical Scrollbar' , 'Barra de desplaz &Vert.' ,'', - '& Vertikale Bildlaufleiste','Вертикальній скролбар','Вертикальный скролбар'); + '& Vertikale Bildlaufleiste','Вертикальній скролбар','Вертикальный скролбар', 'Barre de défilement' + #13#10 + 'verticale'); chkViewHScroll.Caption:= trans('&Horizontal Scrollbar' , 'Barra de desplaz &Horiz.' ,'', - '&Horizontale Bildlaufleiste','Горизонтальний скролбар','Горизонтальный скролбар'); + '&Horizontale Bildlaufleiste','Горизонтальний скролбар','Горизонтальный скролбар', 'Barre de défilement' + #13#10 + 'horizontale'); grpTabEdiState.Caption :=Trans('Tab Editor State' , 'Estado de pestañas del editor', '', - 'Registerkarte Editor Zustand','','');; + 'Registerkarte Editor Zustand','','', 'Affichage des onglets');; grpTabEdiState.Items[0]:=Trans('&Show always' , 'Mostrar &Siempre' , '', - '','Показувати завжди','Показывать всегда'); + '','Показувати завжди','Показывать всегда', '&Toujours afficher'); grpTabEdiState.Items[1]:=Trans('Hide for &One file', '&Ocultar si hay un archivo', '', - 'Ausblenden für &eine Datei','Сховати для одного файлу','Скрыть для одного файла'); + 'Ausblenden für &eine Datei','Сховати для одного файлу','Скрыть для одного файла', '&Si plusieurs fichiers'); grpTabEdiState.Items[2]:=Trans('&Hide always' , 'Ocultar &Siempre' , '', - '&Immer ausblenden','Ховати завжди','Прятать всегда'); + '&Immer ausblenden','Ховати завжди','Прятать всегда', '&Toujours cacher'); chkAutSynChk.Caption := Trans('Automatic Syntax checking', 'Verificac. Automática de sintaxis', '', - 'Automatische Syntaxprüfung','Автомтична перевірка синтаксису','Автоматическая проверка синтаксиса'); + 'Automatische Syntaxprüfung','Автомтична перевірка синтаксису','Автоматическая проверка синтаксиса', 'Correction de syntaxe automatique'); //////////////////////////////////////////////////////////////////////////// //////////////////////////// Editor Colors Settings //////////////////////// //////////////////////////////////////////////////////////////////////////// -TIT_CFG_EDICOL := Trans('Colors' , 'Colores' , '', - '','Кольори','Цвета'); +TIT_CFG_EDICOL := Trans('Colors' , 'Colores' , '', + '','Кольори','Цвета', 'Couleurs'); //////////////////////////////////////////////////////////////////////////// //////////////////////////// Editor-Syntax Settings //////////////////////// //////////////////////////////////////////////////////////////////////////// -TIT_CFG_SYNTAX := Trans('Syntax' , 'Sintaxis' , '', - 'Syntax','Синтакс','Синтакс'); +TIT_CFG_SYNTAX := Trans('Syntax' , 'Sintaxis' , '', + 'Syntax','Синтакс','Синтакс', 'Syntaxe'); //////////////////////////////////////////////////////////////////////////// //////////////////////////// Assembler settings //////////////////////////// //////////////////////////////////////////////////////////////////////////// -TIT_CFG_ASSEMB := Trans('Assembler' , 'Ensamblador' , '', - 'Assembler','Асемблер','Ассемблер'); +TIT_CFG_ASSEMB := Trans('Assembler' , 'Ensamblador' , '', + 'Assembler','Асемблер','Ассемблер', 'Assembleur'); chkIncHeadMpu.Caption:= Trans('Include MPU &Header' , 'Incluir &Encabezado de MPU','', - 'MPU &Kopfzeilen einbinden','Включити MPU заголовок','Включить MPU заголовок'); + 'MPU &Kopfzeilen einbinden','Включити MPU заголовок','Включить MPU заголовок', 'Inclure les directives de processeur'); chkIncDecVar.Caption := Trans('Include &Variables declaration', 'Incluir Declaración de variables', '', - 'Variablendeklaration einfügen','Включити декларування змінних','Включить объявление переменных'); + 'Variablendeklaration einfügen','Включити декларування змінних','Включить объявление переменных', 'Inclure les déclarations de &variables'); RadioGroup2.Caption := Trans('Style' , 'Estilo' , '', - 'Stil','Стиль','Стиль'); -chkExcUnused.Caption := Trans('Exclude unused' , 'Excluir no usadas' , '', - 'Unbenutzte ausschließen','Виключити невикористовуване','Исключить неиспользуемое'); -chkIncAddress.Caption:= Trans('Include &Memory Address','Incluir &Dirección de memoria','', - 'Speicheradressen einbinden','Включити Memory Address','Включить Memory Address'); -chkIncComment.Caption:= Trans('Include &Comments' , 'Incluir &Comentarios' , '', - 'Kommentare hinzufügen','Включити коментарі','Включить комментарии'); -chkIncComment2.Caption:=Trans('Include &Detailed comments', 'Incluir Comentarios &detallados' , '', - '&Detaillierte Kommentare hinzufügen','Включити детальні коментарі','Включить детальные комментарии'); -chkIncVarName.Caption:= Trans('Include &Variable Names','Incluir Nombre de &Variables','', - '&Variablennamen einbinden','Включити імена змінних','Включить имена переменных'); + 'Stil','Стиль','Стиль', 'Style'); +chkExcUnused.Caption := Trans('Exclude unused' , 'Excluir no usadas' , '', + 'Unbenutzte ausschließen','Виключити невикористовуване','Исключить неиспользуемое', 'Exclure les portions inutilisées'); +chkIncAddress.Caption := Trans('Include &Memory Address','Incluir &Dirección de memoria','', + 'Speicheradressen einbinden','Включити Memory Address','Включить Memory Address', 'Inclure les adresses' + #13#10 + '&mémoire'); +chkIncComment.Caption := Trans('Include &Comments' , 'Incluir &Comentarios' , '', + 'Kommentare hinzufügen','Включити коментарі','Включить комментарии', 'Inclure les' + #13#10 + '&commentaires'); +chkIncComment2.Caption:= Trans('Include &Detailed comments', 'Incluir Comentarios &detallados' , '', + '&Detaillierte Kommentare hinzufügen','Включити детальні коментарі','Включить детальные комментарии', 'Inclure les commentaires' + #13#10 + '&détaillés'); +chkIncVarName.Caption := Trans('Include &Variable Names','Incluir Nombre de &Variables','', + '&Variablennamen einbinden','Включити імена змінних','Включить имена переменных', 'Inclure les &noms de' + #13#10 + 'variables'); //////////////////////////////////////////////////////////////////////////// //////////////////////////// Output Settings /////////////////////////////// //////////////////////////////////////////////////////////////////////////// -TIT_CFG_COMPIL := Trans('Compiler' , 'Compilador' , '', - 'Compiler','Компілятор','Компилятор'); -chkShowErrMsg.Caption:= Trans('&Show Error Messages' , '&Mostrar mensajes de error', '', - '&Zeige Fehlermeldungen','Показувати сповіщення про помилки','Показывать сообщения об ошибках'); -grpOptimLev.Caption := Trans('Optimization Level:' , 'Nivel de optimización:' , '', - 'Optimierungsstufe:','Рівень оптимізації:','Уровень оптимизации:'); -grpOptimLev.Items[0] := Trans('Fool' , 'Tonto' , '', - 'Dumm','Дурень','Дурак'); -grpOptimLev.Items[1] := Trans('Smart' , 'Inteligente' , '', - 'Schlau','Розумний','Умный'); +TIT_CFG_COMPIL := Trans('Compiler' , 'Compilador' , '', + 'Compiler','Компілятор','Компилятор', 'Compilateur'); +chkShowErrMsg.Caption := Trans('&Show Error Messages' , '&Mostrar mensajes de error', '', + '&Zeige Fehlermeldungen','Показувати сповіщення про помилки','Показывать сообщения об ошибках', '&Afficher les messages d''erreur'); +grpOptimLev.Caption := Trans('Optimization Level:' , 'Nivel de optimización:' , '', + 'Optimierungsstufe:','Рівень оптимізації:','Уровень оптимизации:', 'Niveau d''optimisation:'); +grpOptimLev.Items[0] := Trans('Fool' , 'Tonto' , '', + 'Dumm','Дурень','Дурак', 'Basique'); +grpOptimLev.Items[1] := Trans('Smart' , 'Inteligente' , '', + 'Schlau','Розумний','Умный', 'Avancé'); chkOptBnkAftIF.Caption := Trans('After IF structure' , 'Después de instrucciones IF.', '', - 'Nach IF-Struktur','Після структури IF','После структуры IF'); + 'Nach IF-Struktur','Після структури IF','После структуры IF', 'Après le bloc IF'); chkOptBnkBefPro.Caption:= Trans('Before Procedures' , 'Antes de procedimientos.', '', - 'Vor Prozeduren','Перед процедурами','Перед процедурами'); + 'Vor Prozeduren','Перед процедурами','Перед процедурами', 'Avant les procédures'); chkOptBnkAftPro.Caption:= Trans('After Procedures' , 'Después de procedimientos.', '', - 'Nach den Prozeduren','Після адреси','После адреса'); -chkReuProcVar.Caption := Trans('Reuse Procedures Variables', 'Reutilizar variables de proced.', '', - '','Повторно використовувати змінні процедур','Повторно использовать переменные процедур'); + 'Nach den Prozeduren','Після адреси','После адреса', 'Après les procédures'); +chkReuProcVar.Caption := Trans('Reuse Procedures Variables', 'Reutilizar variables de proced.', '', + '','Повторно використовувати змінні процедур','Повторно использовать переменные процедур', 'Ré-utiliser les variables de procédure'); //////////////////////////////////////////////////////////////////////////// //////////////////////////// External Tool //////////////////////////// //////////////////////////////////////////////////////////////////////////// TIT_CFG_EXTOOL := Trans('External Tool' , 'Herramienta Externa' , '', - '','Завнішній інструмент','Внешний инструмент'); + '','Завнішній інструмент','Внешний инструмент', 'Outils Externes'); FillTree; end; diff --git a/language/tra_FormPrincipal.pas b/language/tra_FormPrincipal.pas index cc7a354c..145b9506 100644 --- a/language/tra_FormPrincipal.pas +++ b/language/tra_FormPrincipal.pas @@ -1,84 +1,238 @@ //Main menu - mnFile.Caption := Trans('&File' , '&Archivo' , '&Khipu' , '&Datei' ,'Файл' ,'Файл'); - mnEdit.Caption := Trans('&Edit' , '&Edición' , '&Allichay' , '&Bearbeiten' ,'Зміни' ,'Редактировать'); - mnFind.Caption := Trans('&Search' , '&Buscar' , '&Maskhay' , '&Suchen','Пошук','Поиск'); - mnView.Caption := Trans('&View' , '&Ver' , '&Qhaway' , '&Ansicht','Вигляд','Вид'); - mnTools.Caption := Trans('&Tools' , '&Herramientas' , '&Llamk''anakuna' , '&Werkzeuge','Інструменти','Инструменты'); + mnFile.Caption := Trans('&File' , '&Archivo' , '&Khipu' , + '&Datei' ,'Файл' ,'Файл', + '&Fichier'); + mnEdit.Caption := Trans('&Edit' , '&Edición' , '&Allichay' , + '&Bearbeiten' ,'Зміни' ,'Редактировать', + '&Editer'); + mnFind.Caption := Trans('&Search' , '&Buscar' , '&Maskhay' , + '&Suchen' , 'Пошук', 'Поиск', + '&Chercher'); + mnView.Caption := Trans('&View' , '&Ver' , '&Qhaway' , + '&Ansicht' , 'Вигляд' ,'Вид', + '&Affichage'); + mnTools.Caption := Trans('&Tools' , '&Herramientas' , '&Llamk''anakuna' , + '&Werkzeuge','Інструменти','Инструменты', + '&Outils'); //File Actions - acArcNewProj.Caption := Trans('New &Project', 'Nuevo &Proyecto' , '' ,'Neues &Projekt','Новий проект','Новый проект'); - acArcNewFile.Caption := Trans('New &File' , 'Nuevo &Archivo' , 'Musuq &Khipu' ,'&Neu','Новий файл','Новый проект'); - acArcNewFile.Hint := Trans('New File' , 'Nuevo Archivo' , 'Musuq Khipu' , 'Neue Datei','Новий файл','Новый файл'); - acArcNewProj.Caption := Trans('New &Project' , 'Nuevo &Proyecto' , 'Musuq &Proyecto' ,'Neues &Projekt','Новий проект','Новый файл'); - acArcNewProj.Hint := Trans('New &Project' , 'Nuevo Proyecto' , 'Musuq Proyecto' ,'Neues &Projekt','Новий проект','Новый проект'); - acArcOpen.Caption := Trans('&Open...' , '&Abrir...' , 'K&ichay' ,'&Öffnen...','Відкрити...','Открыть...'); - acArcOpen.Hint := Trans('Open file' , 'Abrir archivo' , 'Khiputa kichay' , 'Datei Öffnen','Відкрити файл','Открыть файл'); - acArcSave.Caption := Trans('&Save' , '&Guardar' , '&Waqaychay' , '&Speichern','Зберегти','Сохранить'); - acArcSave.Hint := Trans('Save file' , 'Guardar archivo' , 'Khiputa waqaychay' , 'Datei speichern','Зберегти файл','Сохранить файл'); - acArcSaveAs.Caption := Trans('Sa&ve As...' , 'G&uardar Como...' , 'Kay hinata &waqaychay', 'Speichern &unter ...','Зберегти як...','Сохранить как...'); - acArcSaveAs.Hint := Trans('Save file as...','Guardar como...' , 'Kay hinata waqaychay','Datei mit unter neuem Namen speichern ...','Зберегти файл як...','Сохранить файл как...'); - acArcCloseFile.Caption:=Trans('&Close File' , '&Cerrar archivo' , 'Khiputa wi&sqay' , 'Datei s&chließen','Закрити файл','Закрыть файл'); - acArcCloseProj.Caption:=Trans('Close Project' , 'Cerrar Proyecto' , 'Proyectota wisqay' , 'Projekt schließen','Закрити проект','Закрыть проект'); - mnSamples.Caption := Trans('Samples' , 'Ejemplos' , 'Qhawarinakuna' , 'Beispiele','Приклади','Примеры'); - acArcQuit.Caption := Trans('&Quit' , '&Salir' , 'Ll&uqsiy' , '&Beenden','Вийти','Выход'); - acArcQuit.Hint := Trans('Close the program','Cerrar el programa','Programata wi&sqay', 'Programm beenden','Закрити програму','Закрыть программу'); + acArcNewFile.Caption := Trans('New &File' , 'Nuevo &Archivo' , 'Musuq &Khipu' , + '&Neu','Новий файл','Новый проект', + 'Nouveau &Fichier'); + acArcNewFile.Hint := Trans('New File' , 'Nuevo Archivo' , 'Musuq Khipu' , + 'Neue Datei','Новий файл','Новый файл', + 'Nouveau Fichier'); + acArcNewProj.Caption := Trans('New &Project' , 'Nuevo &Proyecto' , 'Musuq &Proyecto' , + 'Neues &Projekt','Новий проект','Новый файл', + 'Nouveau &Projet'); + acArcNewProj.Hint := Trans('New &Project' , 'Nuevo Proyecto' , 'Musuq Proyecto' , + 'Neues &Projekt','Новий проект','Новый проект', + 'Nouveau &Projet'); + acArcOpen.Caption := Trans('&Open...' , '&Abrir...' , 'K&ichay' , + '&Öffnen...','Відкрити...','Открыть...', + '&Ouvrir...'); + acArcOpen.Hint := Trans('Open file' , 'Abrir archivo' , 'Khiputa kichay' , + 'Datei Öffnen','Відкрити файл','Открыть файл', + 'Ouvrir un fichier'); + acArcSave.Caption := Trans('&Save' , '&Guardar' , '&Waqaychay' , + '&Speichern','Зберегти','Сохранить', + '&Enregistrer'); + acArcSave.Hint := Trans('Save file' , 'Guardar archivo' , 'Khiputa waqaychay' , + 'Datei speichern','Зберегти файл','Сохранить файл', + 'Enregistrer fichier'); + acArcSaveAs.Caption := Trans('Sa&ve As...' , 'G&uardar Como...' , 'Kay hinata &waqaychay', + 'Speichern &unter ...','Зберегти як...','Сохранить как...', + 'Enregistrer &sous...'); + acArcSaveAs.Hint := Trans('Save file as...','Guardar como...' , 'Kay hinata waqaychay', + 'Datei mit unter neuem Namen speichern ...','Зберегти файл як...','Сохранить файл как...', + 'Enregistrer fichier sous...'); + acArcCloseFile.Caption:=Trans('&Close File' , '&Cerrar archivo' , 'Khiputa wi&sqay' , + 'Datei s&chließen','Закрити файл','Закрыть файл', + '&Fermer Fichier'); + acArcCloseProj.Caption:=Trans('Close Project' , 'Cerrar Proyecto' , 'Proyectota wisqay' , + 'Projekt schließen','Закрити проект','Закрыть проект', + 'Fermer Projet'); + mnSamples.Caption := Trans('Samples' , 'Ejemplos' , 'Qhawarinakuna' , + 'Beispiele','Приклади','Примеры', + 'Exemples'); + acArcQuit.Caption := Trans('&Quit' , '&Salir' , 'Ll&uqsiy' , + '&Beenden','Вийти','Выход', + '&Quitter'); + acArcQuit.Hint := Trans('Close the program','Cerrar el programa','Programata wi&sqay', + 'Programm beenden','Закрити програму','Закрыть программу', + 'Quitter l''application'); //Edit Actions - acEdUndo.Caption := Trans('&Undo' , '&Deshacer' , '&Paskay', '&Zurück','Відміна','Отмена'); - acEdUndo.Hint := Trans('Undo' , 'Deshacer' , 'Paskay', 'Änderung zurücknehmen','Відміна','Отмена'); - acEdRedo.Caption := Trans('&Redo' , '&Rehacer' , '&Ruwapay', '&Wiederholen','Повторити','Повторить'); - acEdRedo.Hint := Trans('Redo' , 'Reahacer' , 'Ruwapay', 'Änderung wiederholen','Повторити','Повторить'); - acEdCut.Caption := Trans('C&ut' , 'Cor&tar' , 'Ku&chuy', 'A&usschneiden','Вирізати','Вырезать'); - acEdCut.Hint := Trans('Cut' , 'Cortar' , 'Kuchuy', 'Ausschneiden','Вирізати','Вырезать'); - acEdCopy.Caption := Trans('&Copy' , '&Copiar' , 'Kiki&nchay', '&Kopieren','Копіювати','Копировать'); - acEdCopy.Hint := Trans('Copy' , 'Copiar' , 'Kikinchay', 'Kopieren','Копіювати','Копировать'); - acEdPaste.Caption := Trans('&Paste' , '&Pegar' , 'k''ask&ay', '&Einfügen','Вставити','Вставить'); - acEdPaste.Hint := Trans('Paste' , 'Pegar' , 'K''askay', 'Einfügen','Вставити','Вставить'); - acEdSelecAll.Caption := Trans('Select &All' , 'Seleccionar &Todo' , 'Llapan&ta Akllay', 'Alles &Auswählen','Вибрати все','Выбрать всё'); - acEdSelecAll.Hint := Trans('Select all' , 'Seleccionar todo' , 'Llapanta Akllay', 'Alles auswählen','Вибрати все','Выбрать всё'); + acEdUndo.Caption := Trans('&Undo' , '&Deshacer' , '&Paskay', + '&Zurück','Відміна','Отмена', + '&Annuler'); + acEdUndo.Hint := Trans('Undo' , 'Deshacer' , 'Paskay', + 'Änderung zurücknehmen','Відміна','Отмена', + 'Annuler'); + acEdRedo.Caption := Trans('&Redo' , '&Rehacer' , '&Ruwapay', + '&Wiederholen','Повторити','Повторить', + '&Refaire'); + acEdRedo.Hint := Trans('Redo' , 'Reahacer' , 'Ruwapay', + 'Änderung wiederholen','Повторити','Повторить', + 'Refaire'); + acEdCut.Caption := Trans('C&ut' , 'Cor&tar' , 'Ku&chuy', + 'A&usschneiden','Вирізати','Вырезать', + 'Co&uper'); + acEdCut.Hint := Trans('Cut' , 'Cortar' , 'Kuchuy', + 'Ausschneiden','Вирізати','Вырезать', + 'Couper'); + acEdCopy.Caption := Trans('&Copy' , '&Copiar' , 'Kiki&nchay', + '&Kopieren','Копіювати','Копировать', + 'Copier'); + acEdCopy.Hint := Trans('Copy' , 'Copiar' , 'Kikinchay', + 'Kopieren','Копіювати','Копировать', + 'Copier'); + acEdPaste.Caption := Trans('&Paste' , '&Pegar' , 'k''ask&ay', + '&Einfügen','Вставити','Вставить', + 'Co&ller'); + acEdPaste.Hint := Trans('Paste' , 'Pegar' , 'K''askay', + 'Einfügen','Вставити','Вставить', + 'Coller'); + acEdSelecAll.Caption := Trans('Select &All' , 'Seleccionar &Todo' , 'Llapan&ta Akllay', + 'Alles &Auswählen','Вибрати все','Выбрать всё', + 'Tout &Sélectionner'); + acEdSelecAll.Hint := Trans('Select all' , 'Seleccionar todo' , 'Llapanta Akllay', + 'Alles auswählen','Вибрати все','Выбрать всё', + 'Tout sélectionner'); //Search Actions - acSearFind.Caption := Trans('Find...' , 'Buscar...' , 'Maskhay', 'Suchen...','Знайти...','Найти...'); - acSearFind.Hint := Trans('Find text' , 'Buscar texto' , 'Qillqata maskhay', 'Text suchen','Знайти текст','Найти текст'); - acSearFindNxt.Caption := Trans('Find &Next' , 'Buscar &Siguiente' , '&Hamuqta Maskhay', 'Weitersuche&n','Знайти наступний','Найти следующий'); - acSearFindNxt.Hint := Trans('Find Next' , 'Buscar Siguiente' , 'Hamuqta Maskhay', 'Nächste Stelle suchen','Знайти наступний','Найти следующий'); - acSearFindPrv.Caption := Trans('Find &Previous','Buscar &Anterior' , '', '','Знайти попередній','Найти предыдущий'); - acSearFindPrv.Hint := Trans('Find &Previous','Buscar &Anterior' , '', '','Знайти попередній','Найти предыдущий'); - acSearReplac.Caption := Trans('&Replace...' , '&Reemplazar...' , '&Yankiy', '&Ersetzen...','Замінити...','Замена...'); - acSearReplac.Hint := Trans('Replace text' , 'Reemplazar texto' , 'Qillqata yankiy', 'Text ersetzen','Замінити текст','Заменить текст'); + acSearFind.Caption := Trans('Find...' , 'Buscar...' , 'Maskhay', + 'Suchen...' , 'Знайти...' , 'Найти...', + 'Chercher...'); + acSearFind.Hint := Trans('Find text' , 'Buscar texto' , 'Qillqata maskhay', + 'Text suchen' , 'Знайти текст' , 'Найти текст', + 'Chercher texte'); + acSearFindNxt.Caption := Trans('Find &Next' , 'Buscar &Siguiente' , '&Hamuqta Maskhay', + 'Weitersuche&n','Знайти наступний','Найти следующий', + 'Chercher &Suivant'); + acSearFindNxt.Hint := Trans('Find Next' , 'Buscar Siguiente' , 'Hamuqta Maskhay', + 'Nächste Stelle suchen','Знайти наступний','Найти следующий', + 'Chercher Suivant'); + acSearFindPrv.Caption := Trans('Find &Previous','Buscar &Anterior' , '', + '','Знайти попередній','Найти предыдущий', + 'Chercher &Précédent'); + acSearFindPrv.Hint := Trans('Find &Previous','Buscar &Anterior' , '', + '','Знайти попередній','Найти предыдущий', + 'Chercher Précédent'); + acSearReplac.Caption := Trans('&Replace...' , '&Reemplazar...' , '&Yankiy', + '&Ersetzen...','Замінити...','Замена...', + '&Remplacer...'); + acSearReplac.Hint := Trans('Replace text' , 'Reemplazar texto' , 'Qillqata yankiy', + 'Text ersetzen','Замінити текст','Заменить текст', + 'Remplacer texte'); -//View actions - acViewMsgPan.Caption := Trans('&Messages Panel' , 'Panel de &Mensajes' , '&Willanakuna qhawachiq','&Nachrichten Panel','Панель повідомлень','Панель сообщений'); - acViewMsgPan.Hint := Trans('Show/hide Messages Panel', 'Mostrar/Ocultar el Panel de Mensajes', 'Willanakuna qhawachiqta Rikuchiy/Pakachiy', 'Nachrichten Panel zeigen oder verbergen','Показати/Сховати панель повідомлень','Показать/Спрятать панель сообщений'); - acViewStatbar.Caption:= Trans('&Status Bar' , 'Barra de &Estado' , '&Imayna kasqanta Qhawachiq','&Statuszeile','',''); - acViewStatbar.Hint := Trans('Show/hide Status Bar' , 'Mostrar/Ocultar la barra de estado', 'Imayna Kasqanta Rikuchiy/Pakachiy','Statuszeile zeigen oder verbergen','',''); - acViewToolbar.Caption:= Trans('&Tool Bar' , 'Barra de &Herramientas' , '&Llamk''anakuna Qhawachiq','&Werkzeugleiste','Панель інструментів','Панель инструментов'); - acViewToolbar.Hint := Trans('Show/hide Tool Bar' , 'Mostrar/Ocultar la barra de herramientas', 'Llamk''anakuna Qhawachiqta Rikuchiy/Pakachiy', 'Werkzeugleiste zeigen oder verbergen','Показати/Сховати панель інструментів','Показать/Спрятать панель инструментов'); - acViewSynTree.Caption:= Trans('&Code explorer' , '&Explorador de código.' , '&Chimpukunata t''aqwiq', '&Quelltext-Explorer','Оглядач кода','Обозреватель кода'); - acViewAsmPan.Caption := Trans('&Assembler Panel' , '&Panel de ensamblador.' , '', '','Панель асемблера','Панель ассемблера'); + //View actions + acViewMsgPan.Caption := Trans('&Messages Panel' , 'Panel de &Mensajes' , '&Willanakuna qhawachiq', + '&Nachrichten Panel','Панель повідомлень','Панель сообщений', + 'Panneau &Messages'); + acViewMsgPan.Hint := Trans('Show/hide Messages Panel', 'Mostrar/Ocultar el Panel de Mensajes', 'Willanakuna qhawachiqta Rikuchiy/Pakachiy', + 'Nachrichten Panel zeigen oder verbergen','Показати/Сховати панель повідомлень','Показать/Спрятать панель сообщений', + 'Montrer/Cacher le panneau des Messages'); + acViewStatbar.Caption:= Trans('&Status Bar' , 'Barra de &Estado' , '&Imayna kasqanta Qhawachiq', + '&Statuszeile' , '', '', + 'Barre de &statut'); + acViewStatbar.Hint := Trans('Show/hide Status Bar' , 'Mostrar/Ocultar la barra de estado', 'Imayna Kasqanta Rikuchiy/Pakachiy', + 'Statuszeile zeigen oder verbergen','','', + 'Montrer/Cacher la barre de statut'); + acViewToolbar.Caption:= Trans('&Tool Bar' , 'Barra de &Herramientas' , '&Llamk''anakuna Qhawachiq', + '&Werkzeugleiste','Панель інструментів','Панель инструментов', + 'Barre d''&Outils'); + acViewToolbar.Hint := Trans('Show/hide Tool Bar' , 'Mostrar/Ocultar la barra de herramientas', 'Llamk''anakuna Qhawachiqta Rikuchiy/Pakachiy', + 'Werkzeugleiste zeigen oder verbergen','Показати/Сховати панель інструментів','Показать/Спрятать панель инструментов', + 'Montrer/Cacher la barre d''Outils'); + acViewSynTree.Caption:= Trans('&Code explorer' , '&Explorador de código.' , '&Chimpukunata t''aqwiq', + '&Quelltext-Explorer','Оглядач кода','Обозреватель кода', + '&Explorateur de Code'); + acViewAsmPan.Caption := Trans('&Assembler Panel' , '&Panel de ensamblador.' , '', + '','Панель асемблера','Панель ассемблера', + 'Panneau &Assembleur'); //Tool actions - acToolCompil.Caption := Trans('&Compile' , '&Compilar' , '&Compilay', '&Compilieren','Компілювати','Компилировать'); - acToolCompil.Hint := Trans('Compile the source code' , 'Compila el código fuente' , 'Pachanmanta chimpukuna kaqta compilay', 'Compiliere den Quelltext','Компілювати','Компилировать'); - acToolComEjec.Caption:= Trans('Compile and E&xecute' , 'Compilar y Ej&ecutar' , 'Compilay chaymanta &Hinay', 'Compilieren und Au&sführen','Компілювати та виконати','Компилировать и выполнить'); - acToolComEjec.Hint := Trans('Compile and Execute' , 'Compilar y Ejecutar' , 'Compilay chaymanta &Hinay', 'Compilieren und Ausführen','Компілювати та виконати','Компилировать и выполнить'); - acToolPICExpl.Caption:= Trans('PIC E&xplorer' , 'E&xplorador de PIC' , 'PIC nisqakunata T''aqwiq', 'PIC E&xplorer','PIC оглядач','PIC обозреватель'); - acToolPICExpl.Hint := Trans('Open the PIC devices explorer','Abrir el explorador de dispos. PIC', 'Dispos. PIC nisqa t''aqwiqta kichariy','Öffne den PIC Geräte explorer','Відкрити PIC оглядач','Открыть PIC обозреватель'); - acToolASMDebug.Caption := Trans('ASM &Debugger' , '&Depurador de ASM' , '', '','ASM зневаджувач','ASM отладчик'); - acToolASMDebug.Hint := Trans('ASM &Debugger' , '&Depurador de ASM' , '', '','ASM зневаджувач','ASM отладчик'); + acToolCompil.Caption := Trans('&Compile' , '&Compilar' , '&Compilay', + '&Compilieren' , 'Компілювати', 'Компилировать', + '&Compiler'); + acToolCompil.Hint := Trans('Compile the source code' , 'Compila el código fuente' , 'Pachanmanta chimpukuna kaqta compilay', + 'Compiliere den Quelltext','Компілювати','Компилировать', + 'Compiler le code source'); + acToolComEjec.Caption := Trans('Compile and E&xecute' , 'Compilar y Ej&ecutar' , 'Compilay chaymanta &Hinay', + 'Compilieren und Au&sführen','Компілювати та виконати','Компилировать и выполнить', + 'Compiler et &Exécuter'); + acToolComEjec.Hint := Trans('Compile and Execute' , 'Compilar y Ejecutar' , 'Compilay chaymanta &Hinay', + 'Compilieren und Ausführen','Компілювати та виконати','Компилировать и выполнить', + 'Compiler et Exécuter'); + acToolPICExpl.Caption := Trans('PIC E&xplorer' , 'E&xplorador de PIC' , 'PIC nisqakunata T''aqwiq', + 'PIC E&xplorer','PIC оглядач','PIC обозреватель', + 'E&xplorateur de PIC'); + acToolPICExpl.Hint := Trans('Open the PIC devices explorer','Abrir el explorador de dispos. PIC', 'Dispos. PIC nisqa t''aqwiqta kichariy', + 'Öffne den PIC Geräte explorer','Відкрити PIC оглядач','Открыть PIC обозреватель', + 'Ouvrir l''explorateur de modèles PIC'); + acToolListRep.Caption := Trans('&List Report' , '&Reporte de listado' , '', + '','Звіт','Отчет', + '&Rapport de Compilation'); + acToolFindDec.Caption := Trans('Find declaration' , 'Ir a la declaración' , 'Riqsichikusqan k''itiman riy', + 'Finde Deklaration','Знайти декларування','Найти декларирование', + 'Trouver déclaration'); + acToolRamExp.Caption := Trans('&RAM Explorer' , 'Explorador de &RAM' , '', + '','','', + ''); - acToolListRep.Caption:= Trans('&List Report' , '&Reporte de listado' , '', '','Звіт','Отчет'); - acToolConfig.Caption := Trans('&Settings' , '&Configuración' , 'Kamachina', '&Einstellungen','Налагодження','Настройки'); - acToolConfig.Hint := Trans('Settings dialog' , 'Ver configuración' , 'Kamachinata qhaway', 'Einstellungs-Dialog','Діалог налагоджень','Диалог настроек'); - acToolFindDec.Caption:= Trans('Find declaration' , 'Ir a la declaración' , 'Riqsichikusqan k''itiman riy', 'Finde Deklaration','Знайти декларування','Найти декларирование'); + acToolASMDebug.Caption:= Trans('ASM &Debugger' , '&Depurador de ASM' , '', + '','ASM зневаджувач','ASM отладчик', + '&Débogueur PIC'); + acToolASMDebug.Hint := Trans('ASM &Debugger' , '&Depurador de ASM' , '', + '','ASM зневаджувач','ASM отладчик', + 'Démarrer le Débogueur'); + MenuItem51.Caption := Trans('&Select Compiler' , '&Elegir Compilador' , '', + '','','', + ''); + acToolConfig.Caption := Trans('&Settings' , '&Configuración' , 'Kamachina', + '&Einstellungen','Налагодження','Настройки', + '&Paramètres'); + acToolConfig.Hint := Trans('Settings dialog' , 'Ver configuración' , 'Kamachinata qhaway', + 'Einstellungs-Dialog','Діалог налагоджень','Диалог настроек', + 'Paramètres'); //Messages - MSG_MODIF := Trans('(*)Modified' , '(*)Modificado' , '', '','(*)Змінено','(*)Изменено'); - MSG_SAVED := Trans('Saved' , 'Guardado' , '', '','Збережено','Сохранено'); - MSG_NOFILES := Trans('No files.' , 'Sin archivos' , '', '','Немає файлів.','Нет файлов.'); - MSG_NOFOUND_:= Trans('No found "%s"' , 'No se encuentra: "%s"' , '', '','Не знайдено "%s"','Не найдено "%s"'); - MSG_N_REPLAC:= Trans('%d words replaced', 'Se reemplazaron %d ocurrencias.', '', '','%d слів замінено','%d слов заменено'); - MSG_REPTHIS := Trans('Replace this?' , '¿Reemplazar esta ocurrencia?' , '', '','Замінити це?','Заменить это?'); - + MSG_MODIFIED := Trans('(*)Modified' , '(*)Modificado' , '', + '','(*)Змінено','(*)Изменено', + '(*)Modifié'); + MSG_SAVED := Trans('Saved' , 'Guardado' , '', + '','Збережено','Сохранено', + 'Enregistré'); + MSG_NOFILES := Trans('No files.' , 'Sin archivos' , '', + '','Немає файлів.','Нет файлов.', + 'Aucun fichier'); + MSG_NOFOUND_ := Trans('No found "%s"' , 'No se encuentra: "%s"' , '', + '','Не знайдено "%s"','Не найдено "%s"', + '"%s" non trouvé'); + MSG_N_REPLAC := Trans('%d words replaced', 'Se reemplazaron %d ocurrencias.', '', + '','%d слів замінено','%d слов заменено', + '%d mots remplacés'); + MSG_REPTHIS := Trans('Replace this?' , '¿Reemplazar esta ocurrencia?' , '', + '','Замінити це?','Заменить это?', + 'Remplacer ceci?'); + MSG_SYNFIL_NOF := Trans('Syntax file not found: %s' , 'Archivo de sintaxis no encontrado: %s' , '', + '','','', + 'Fichier de syntaxe non trouvé : %s'); + MSG_FILSAVCOMP := Trans('File must be saved before compiling.', 'Archivo debe ser guardado antes de compilar', '', + '', '', '', + 'Le fichier doit être sauvegardé pour compiler.'); + MSG_BASEL_COMP := Trans('Baseline Compiler', 'Compilador Baseline', '', + '', '', '', + ''); + MSG_MIDRAN_COMP := Trans('Mid-range Compiler', 'Compilador Mid-range', '', + '', '', '', + ''); + MSG_ENMIDR_COMP := Trans('Enhanced Mid-range Compiler', 'Compilador Enhanced Mid-range', '', + '', '', '', + ''); + MSG_PROJECT := Trans('Project: ', '', '', + '', '', '', + ''); diff --git a/language/tra_FrameArcExplor.pas b/language/tra_FrameArcExplor.pas new file mode 100644 index 00000000..a22bd396 --- /dev/null +++ b/language/tra_FrameArcExplor.pas @@ -0,0 +1,56 @@ + NEW_FILE_NAME := Trans('newfile.pas' , 'nuevo.pas' , '', + '' , '' , '', + 'nouveau.pas'); + FOLDER_NAME := Trans('folder' , 'carpeta' , '', + '' , '' , '', + 'répertoire'); + TXT_EMPTY := Trans('<empty>' , '<vacía>' , '', + '' , '' , '', + '<vide>'); + TXT_FOLD := Trans('C&ollapse' ,'Con&traer' , '', + '' , '' , '', + '&Réduire'); + TXT_UNFOLD := Trans('E&xpand' ,'E&xpandir' , '', + '' , '' , '', + '&Développer'); + TXT_NOTDELFOL := Trans('Cannot delete folders', 'No se puede eliminar carpetas.', '', + '' , '' , '', + 'Impossible de supprimer les répertoires'); + TXT_DELFILE := Trans('Delete file "%s"?', '¿Eliminar archivo "%s"?', '', + '' , '' , '', + 'Supprimer fichier "%s" ?'); + ///////////////////// Folder menu //////////////// + mnFolOpenInExplor.Caption := Trans('Open on &Windows Explorer', 'Abrir en Explor. de &Windows', '', + '' , '' , '', + 'Ouvrir dans l''Explorateur &Windows'); + mnFolNewFile.Caption := Trans('&New File' , '&Nuevo Archivo', '', + '' , '' , '', + '&Nouveau Fichier'); + mnFolNewFolder.Caption := Trans('New &Folder' , 'Nueva &Carpeta', '', + '' , '' , '', + 'Nouveau &Répertoire'); + mnFolChanName.Caption := Trans('Cha&nge Name' , 'Ca&mbiar Nombre', '', + '' , '' , '', + '&Renommer'); + mnFolDelete.Caption := Trans('&Delete' , 'El&iminar', '', + '' , '' , '', + '&Supprimer'); + mnFolRefresh.Caption := Trans('&Refresh' , '&Refrescar', '', + '' , '' , '', + '&Rafraîchir'); + ///////////////////// File menu //////////////// + mnFilOpen.Caption := Trans('&Open' , '&Abrir', '', + '' , '' , '', + '&Ouvrir'); + mnFilChanName.Caption := Trans('Cha&nge Name' , 'Ca&mbiar Nombre', '', + '' , '' , '', + '&Renommer'); + mnFilCreCopFrom.Caption := Trans('Create Co&py from' , 'Crear &Copia de', '', + '' , '' , '', + ''); + mnFilDelete.Caption := Trans('&Delete' , 'El&iminar', '', + '' , '' , '', + '&Supprimer'); + mnFilRefrescar.Caption := Trans('&Refresh' , '&Refrescar', '', + '' , '' , '', + '&Rafraîchir'); diff --git a/language/tra_FrameEditView.pas b/language/tra_FrameEditView.pas index 313a1a43..299185e0 100644 --- a/language/tra_FrameEditView.pas +++ b/language/tra_FrameEditView.pas @@ -1,21 +1,28 @@ -MSG_NOFILES := trans('No files' , 'No hay archivos','Mana khipukuna kanchu', - 'Keine Dateien','Немає файлів','Нет файлов'); +MSG_NOFILES := trans('No files' , 'No hay archivos', 'Mana khipukuna kanchu', + 'Keine Dateien','Немає файлів', 'Нет файлов', 'Aucun fichier'); MSG_PASFILES := trans('Pascal Files', 'Archivos Pascal','Pascal khipu', - 'Pascal Dateien','Файли Pascal','Файлы Pascal'); + 'Pascal Dateien','Файли Pascal','Файлы Pascal', 'Fichiers Pascal'); MSG_ALLFILES := trans('All files' , 'Todos los archivos','Llapan khipukuna', - 'Alle Dateien','Всі файли','Все файлы'); + 'Alle Dateien','Всі файли','Все файлы', 'Tous les fichiers'); MSG_MODIFSAV := trans('File %s has been modified. Save?', 'El archivo %s ha sido modificado. Guardar cambios?', 'Kay %s sutiyuq khipuqa huknirayakun. Waqaychankichu huknirayasqanta?', 'Die Datei %s wurde verändert. Speichern ?', - 'Файл %s було змінено. Зберегти?', - 'Файл %s изменён. Сохранить?'); + 'Файл %s було змінено. Зберегти?', + 'Файл %s изменён. Сохранить?', 'Le fichier %s a été modifié. Enregistrer?'); MSG_NOSYNFIL := trans('Syntax file not found: %s' , 'Archivo de sintaxis no encontrado: %s','Kay kipup sintaxis nisqantaqa mana tarikunchu %s', - 'Syntax-Datei nicht gefunden: %s','Файл синтаксиса не знайдено: %s','Файл синтаксиса не найден: %s'); -lblBackground.Caption := Trans('<< No files >>', '<< Sin archivos >>', 'Mana khipukunayuq', '<< Keine Dateien >>','<< Немає файлів >>','<< Нет файлов >>'); -mnNewTab.Caption := Trans('New', 'Nuevo','Musuq','Neu','Новий','Новый'); -mnCloseTab.Caption := Trans('Close', 'Cerrar','Wisqay','Schließen','Закрити','Закрыть'); -mnCloseAll.Caption := Trans('Close All', 'Cerrar todos','Llapanta wisqay','Alle Schliessen','Закрити все','Закрыть всё'); -mnCloseOthers.Caption := Trans('Close &others', 'Cerrar &otros','','','Закрити інші','Закрыть все другие'); -if mnRecents<>nil then mnRecents.Caption:= trans('&Recents' ,'&Recientes','','&Letzte','Нещодавні','Недавние'); + 'Syntax-Datei nicht gefunden: %s','Файл синтаксиса не знайдено: %s','Файл синтаксиса не найден: %s', 'Fichier de syntaxe non trouvé : %s'); +lblBackground.Caption := Trans('<< No files >>', '<< Sin archivos >>', 'Mana khipukunayuq', + '<< Keine Dateien >>','<< Немає файлів >>','<< Нет файлов >>', '<< Aucun fichier >>'); +mnNewTab.Caption := Trans('New' , 'Nuevo' , 'Musuq' , + 'Neu','Новий','Новый', 'Nouveau'); +mnCloseTab.Caption := Trans('Close' , 'Cerrar' , 'Wisqay' , + 'Schließen','Закрити','Закрыть', 'Fermer'); +mnCloseAll.Caption := Trans('Close All' , 'Cerrar todos' , 'Llapanta wisqay' , + 'Alle Schliessen','Закрити все','Закрыть всё', 'Fermer Tout'); +mnCloseOthers.Caption := Trans('Close &others' , 'Cerrar &otros' , '' , + '','Закрити інші','Закрыть все другие', 'Fermer &Autres'); +if mnRecents<>nil then + mnRecents.Caption := Trans('&Recents' ,'&Recientes','','&Letzte', + 'Нещодавні','Недавние', '&Récents'); diff --git a/language/tra_FrameMessagesWin.pas b/language/tra_FrameMessagesWin.pas index c5cefbcb..e2a8a93a 100644 --- a/language/tra_FrameMessagesWin.pas +++ b/language/tra_FrameMessagesWin.pas @@ -1,14 +1,26 @@ -MSG_INICOMP := trans('Starting Compilation...', 'Iniciando compilación...','','Compilieren ausführen...','Починаю компіляцію...','Начинаю компиляцию...'); -MSG_WARN := trans('Warning' , 'Advertencia' , '','Warnung','Попередження','Предупреждение'); -MSG_WARNS := trans('Warnings' , 'Advertencias', '','Warnungen','Попередження','Предупреждения'); -MSG_ERROR := trans('Error' , 'Error' , '','Fehler','Помилка','Ошибка'); -MSG_ERRORS := trans('Errors' , 'Errores' , '','Fehler','Помилки','Ошибки'); -MSG_COMPIL := trans('Compiled in: ', 'Compilado en: ', '','Compiliert in: ','Скомпільовано за: ','Скомпилировано за: '); +MSG_INICOMP := trans('Starting Compilation...', 'Iniciando compilación...', '', + 'Compilieren ausführen...','Починаю компіляцію...','Начинаю компиляцию...', 'Lancement de la compilation....'); +MSG_WARN := trans('Warning' , 'Advertencia' , 'Avertissement', + 'Warnung','Попередження','Предупреждение', ''); +MSG_WARNS := trans('Warnings' , 'Advertencias' , '', + 'Warnungen','Попередження','Предупреждения', 'Avertissements'); +MSG_ERROR := trans('Error' , 'Error' , '', + 'Fehler','Помилка','Ошибка', 'Erreur'); +MSG_ERRORS := trans('Errors' , 'Errores' , '', + 'Fehler','Помилки','Ошибки', 'Erreurs'); +MSG_COMPIL := trans('Compiled in: ' , 'Compilado en: ' , '', + 'Compiliert in: ','Скомпільовано за: ','Скомпилировано за: ', 'Compilé en:'); -lblInform.Caption := Trans('Information' , 'Información' , '' ,'Information' , 'Інформація' ,'Информация'); -lblWarns.Caption := Trans('Warnings' , 'Advertencias' , '' ,'Warnungen' , 'Попередження','Предупреждения'); -lblErrors.Caption := Trans('Errors' , 'Errores' , '' ,'Fehler' , 'Помилки' ,'Ошибки'); -PanGrilla.Caption := Trans('<< No messages >>','<< Sin mensajes >>','' ,'<<Keine Meldungen>>','<< Немає повідомлень >>','<< Нет сообщений >>'); -mnClearAll.Caption:= Trans('Clear &All' , 'Limpiar &Todo' , '' , '' , 'Зтерти все' ,''); -mnCopyRow.Caption := Trans('&Copy Row' , '&Copiar fila' , '' , '' , '',''); +lblInform.Caption := Trans('Information' , 'Información' , '' , + 'Information' , 'Інформація' ,'Информация', 'Information'); +lblWarns.Caption := Trans('Warnings' , 'Advertencias' , '' , + 'Warnungen' , 'Попередження','Предупреждения', 'Avertissements'); +lblErrors.Caption := Trans('Errors' , 'Errores' , '' , + 'Fehler' , 'Помилки' ,'Ошибки', 'Erreurs'); +PanGrilla.Caption := Trans('<< No messages >>','<< Sin mensajes >>','' , + '<<Keine Meldungen>>','<< Немає повідомлень >>','<< Нет сообщений >>', '<< Aucun message >>'); +mnClearAll.Caption:= Trans('Clear &All' , 'Limpiar &Todo' , '' , + '' , 'Зтерти все' ,'', 'Effacer &Tout'); +mnCopyRow.Caption := Trans('&Copy Row' , '&Copiar fila' , '' , + '' , '','', '&Copier ligne'); diff --git a/language/tra_FrameSyntaxTree.pas b/language/tra_FrameSyntaxTree.pas index f83cf127..022787aa 100644 --- a/language/tra_FrameSyntaxTree.pas +++ b/language/tra_FrameSyntaxTree.pas @@ -1,9 +1,17 @@ -TIT_MAIN := trans('Program' ,'Programa' , '' , 'Programm' , 'Програма' , 'Программа'); -TIT_UNIT := trans('Units' ,'Unidades' , '' , 'Units' , 'Модулі' , 'Модули'); -TIT_CONS := trans('Constants' ,'Constantes' , '' , 'Konstanten' , 'Константи' , 'Константы'); -TIT_VARS := trans('Variables' ,'Variables' , '' , 'Variablen' , 'Змінні' , 'Переменные'); -TIT_FUNC := trans('Functions' ,'Funciones' , '' , 'Funktionen' , 'Функції' , 'Функции'); -TIT_TYPE := trans('Types' ,'Tipos' , '' , '' , 'Типи' , 'Типы'); -TIT_OTHER:= trans('Others' ,'Otros' , '' , 'Anderes' , 'Інше' , 'Другое'); -Label1.Caption := Trans('Code Explorer', 'Explorador de Código','','Quellenexplorer','Оглядач коду','Инспектор кода'); +TIT_MAIN := trans('Program' ,'Programa' , '' , + 'Programm' , 'Програма' , 'Программа', 'Programme'); +TIT_UNIT := trans('Units' ,'Unidades' , '' , + 'Units' , 'Модулі' , 'Модули', 'Unités'); +TIT_CONS := trans('Constants' ,'Constantes' , '' , + 'Konstanten' , 'Константи' , 'Константы', 'Constantes'); +TIT_VARS := trans('Variables' ,'Variables' , '' , + 'Variablen' , 'Змінні' , 'Переменные', 'Variables'); +TIT_FUNC := trans('Functions' ,'Funciones' , '' , + 'Funktionen' , 'Функції' , 'Функции', 'Fonctions'); +TIT_TYPE := trans('Types' ,'Tipos' , '' , + '' , 'Типи' , 'Типы', 'Types'); +TIT_OTHER:= trans('Others' ,'Otros' , '' , + 'Anderes' , 'Інше' , 'Другое', 'Autres'); +Label1.Caption := Trans('Code Explorer', 'Explorador de Código','', + 'Quellenexplorer','Оглядач коду','Инспектор кода', 'Explorateur de Code'); diff --git a/language/tra_GenCod.pas b/language/tra_GenCod.pas new file mode 100644 index 00000000..c477b496 --- /dev/null +++ b/language/tra_GenCod.pas @@ -0,0 +1,17 @@ +MSG_NOT_IMPLEM := Trans('Not implemented.', 'No implementado' , '', + '' , '', '', + 'Non implémenté.'); +MSG_INVAL_PARTYP:= Trans('Invalid parameter type: %s','Tipo de parámetro inválido: %s', '', + '' , '', '', + 'Type de paramètre invalide: %s'); +MSG_UNSUPPORTED := Trans('Unsupported','No soportado', '', + '' , '', '', + 'Non supporté'); +MSG_CANNOT_COMPL:= Trans('Cannot Compile: "%s"','No se puede compilar: %s', '', + '' , '', '', + 'Non compilable: "%s"'); +ER_INV_MEMADDR := trans('Invalid memory address.' , 'Dirección de memoria inválida.','', + 'Ungültige Speicheradresse.' , 'Недійсна адреса памʼяті.','Недопустимый адрес памяти.', 'Adresse mémoire invalide.'); +ER_INV_MAD_DEV := trans('Invalid memory address for this device.', 'No existe esta dirección de memoria en este dispositivo.','Adresse mémoire invalide pour ce modèle PIC.', + 'Ungültige Speicheradresse für dieses Gerät.','Недійсна адреса памʼяті для цього пристрою.','Недопустимый адрес памяти для этого устройства.', ''); + diff --git a/language/tra_GenCodBas.pas b/language/tra_GenCodBas.pas new file mode 100644 index 00000000..ab404721 --- /dev/null +++ b/language/tra_GenCodBas.pas @@ -0,0 +1,28 @@ +TXT_SAVE_W := Trans(';save W' , ';guardar W' , '', + '' , '', '', + ';sauvegarder W'); +TXT_SAVE_Z := Trans(';save Z' , ';guardar Z' , '', + '' , '', '', + ';sauvegarder Z'); +TXT_SAVE_H := Trans(';save H' , ';guardar H' , '', + '' , '', '', + ';sauvegarder H'); +MSG_NO_ENOU_RAM:= Trans('No enough RAM', 'No hay suficiente RAM.' , '', + '' , '', '', + 'Mémoire insuffisante'); +MSG_VER_CMP_EXP:= Trans('Very complex expression. To simplify.','Expresión muy compleja. Simplificar.' , '', + '' , '', '', + 'Expression trop complexe. À simplifier.'); +MSG_STACK_OVERF:= Trans('Stack Overflow', 'Desborde de pila.' , '', + '' , '', '', + 'Débordement de pile.'); +MSG_NOT_IMPLEM := Trans('Not implemented.', 'No implementado' , '', + '' , '', '', + 'Non implémenté.'); +ER_VARIAB_EXPEC:= trans('Variable expected.' , 'Se esperaba Variable', '', + 'Variable erwartet.' ,'Змінна очікується.','Переменная ожидается.', 'Variable attendue.'); +ER_ONL_BYT_WORD:= trans('Only BYTE or WORD index is allowed in FOR.', 'Solo variables Byte o Word son permitidas.', '', + 'In FOR-Schleifen sind nur BYTE oder WORD Indizes erlaubt.','Для FOR дозволено лише індекс BYTE або WORD.','В FOR допускается только индекс BYTE или WORD.', 'Seuls des indexes BYTE ou WORD sont autorisées dans une boucle FOR.'); +ER_ASIG_EXPECT := trans('":=" expected.' , 'Se esperaba ":="', '', + '":=" erwartet.' , '":=" очікується.', '":=" ожидается.', '":=" attendu.'); + diff --git a/language/tra_Parser.pas b/language/tra_Parser.pas index 0cb1a654..11240050 100644 --- a/language/tra_Parser.pas +++ b/language/tra_Parser.pas @@ -1,104 +1,86 @@ -var - ER_NOT_IMPLEM_, ER_IDEN_EXPECT, ER_DUPLIC_IDEN, ER_INVAL_FLOAT: string; - ER_ERR_IN_NUMB, ER_NOTYPDEFNUM, ER_UNDEF_TYPE_: string; - ER_INV_MAD_DEV, ER_EXP_VAR_IDE, ER_INV_MEMADDR, ER_BIT_VAR_REF: String; - ER_UNKNOWN_ID_: string; - ER_IDE_CON_EXP, ER_NUM_ADD_EXP, ER_IDE_TYP_EXP, ER_SEM_COM_EXP: String; - ER_EQU_COM_EXP, ER_END_EXPECTE, ER_EOF_END_EXP, ER_BOOL_EXPECT: String; - ER_UNKN_STRUCT, ER_PROG_NAM_EX, ER_COMPIL_PROC, ER_CON_EXP_EXP: String; - ER_NOT_AFT_END, ER_ELS_UNEXPEC : String; - ER_INST_NEV_EXE, ER_ONLY_ONE_REG: String; - ER_VARIAB_EXPEC, ER_ONL_BYT_WORD, ER_ASIG_EXPECT: String; - ER_FIL_NOFOUND, WA_UNUSED_CON_, WA_UNUSED_VAR_,WA_UNUSED_PRO_: String; - MSG_RAM_USED, MSG_FLS_USED, ER_NOTYPDEF_NU, ER_ARR_SIZ_BIG: String; - ER_INV_ARR_SIZ: String; -procedure SetLanguage; -begin //Update messages ER_NOT_IMPLEM_ := trans('Not implemented: "%s"' , 'No implementado: "%s"' ,'', - 'Nicht implementiert: "%s"' ,'Не впроваджено: "%s"','Не реализовано: "%s"'); + 'Nicht implementiert: "%s"' ,'Не впроваджено: "%s"','Не реализовано: "%s"', 'Non implémenté : "%s"'); ER_IDEN_EXPECT := trans('Identifier expected.' , 'Identificador esperado.' ,'', - 'Bezeichner erwartet.' , 'Очікується ідентифікатор.','Ожидается идентификатор.'); + 'Bezeichner erwartet.' , 'Очікується ідентифікатор.','Ожидается идентификатор.', 'Identifiant attendu.'); ER_DUPLIC_IDEN := trans('Duplicated identifier: "%s"', 'Identificador duplicado: "%s"' ,'', - 'Doppelter Platzhalter: "%s"','Дубльований ідентифікатор: "%s"','Дублированный идентификатор: "%s"'); + 'Doppelter Platzhalter: "%s"','Дубльований ідентифікатор: "%s"','Дублированный идентификатор: "%s"', 'Identifiant à double : "%s"'); ER_INVAL_FLOAT := trans('Unvalid float number.' , 'Número decimal no válido.' ,'', - 'Ungültige Gleitkommazahl.' ,'Невірне число з плаваючою комою.','Недопустимое число с плавающей запятой.'); + 'Ungültige Gleitkommazahl.' ,'Невірне число з плаваючою комою.','Недопустимое число с плавающей запятой.', 'Nombre à virgule flottante invalide.'); ER_ERR_IN_NUMB := trans('Error in number.' , 'Error en número' ,'', - 'Fehler bei Nummer.' ,'Помилка в числі.','Ошибка в числе.'); + 'Fehler bei Nummer.' ,'Помилка в числі.','Ошибка в числе.', 'Nombre invalide.'); ER_NOTYPDEFNUM := trans('No type defined to accommodate this number.', 'No hay tipo definido para albergar a este número.','', - 'Kein Typ definiert.' ,'Для типу цього числа не визначено жодного типу','Не определён тип для размещения этого числа'); + 'Kein Typ definiert.' ,'Для типу цього числа не визначено жодного типу','Не определён тип для размещения этого числа', 'Aucun type défini pour ce nombre.'); ER_UNDEF_TYPE_ := trans('Undefined type "%s"' , 'Tipo "%s" no definido.' ,'', - 'Undefinierter Typ "%s"' , 'Невизначений тип "%s"','Неопределённый тип "%s"'); + 'Undefinierter Typ "%s"' , 'Невизначений тип "%s"','Неопределённый тип "%s"', 'Type indéfini "%s"'); ER_INV_MEMADDR := trans('Invalid memory address.' , 'Dirección de memoria inválida.','', - 'Ungültige Speicheradresse.' , 'Недійсна адреса памʼяті.','Недопустимый адрес памяти.'); + 'Ungültige Speicheradresse.' , 'Недійсна адреса памʼяті.','Недопустимый адрес памяти.', 'Adresse mémoire invalide.'); ER_BIT_VAR_REF := trans('A bit variable reference expected.' , 'Se esreraba referencia a una variable bit.','', - 'Es wird eine Bitvariablen-referenz erwartet.', 'Очікується біт-змінна.','Ожидается бит-переменная.'); -ER_INV_MAD_DEV := trans('Invalid memory address for this device.', 'No existe esta dirección de memoria en este dispositivo.','', - 'Ungültige Speicheradresse für dieses Gerät.','Недійсна адреса памʼяті для цього пристрою.','Недопустимый адрес памяти для этого устройства.'); + 'Es wird eine Bitvariablen-referenz erwartet.', 'Очікується біт-змінна.','Ожидается бит-переменная.', 'Référence de bit attendue.'); +ER_INV_MAD_DEV := trans('Invalid memory address for this device.', 'No existe esta dirección de memoria en este dispositivo.','Adresse mémoire invalide pour ce modèle PIC.', + 'Ungültige Speicheradresse für dieses Gerät.','Недійсна адреса памʼяті для цього пристрою.','Недопустимый адрес памяти для этого устройства.', ''); ER_EXP_VAR_IDE := trans('Identifier of variable expected.', 'Se esperaba identificador de variable.','', - 'Variablenbezeichner erwartet.' , 'Очікується фдентифікатор змінної.','Ожидается идентификатор переменной.'); + 'Variablenbezeichner erwartet.' , 'Очікується фдентифікатор змінної.','Ожидается идентификатор переменной.', 'Identifiant de variable attendu.'); ER_UNKNOWN_ID_ := trans('Unknown identifier: %s' , 'Identificador desconocido: %s' ,'', - 'Unbekannter Bezeichner: %s' , 'Невідомий ідентифікатор: %s','Неизвестный идентификатор: %s'); + 'Unbekannter Bezeichner: %s' , 'Невідомий ідентифікатор: %s','Неизвестный идентификатор: %s', 'Identifiant inconnu : %s'); ER_IDE_CON_EXP := trans('Identifier of constant expected.', 'Se esperaba identificador de constante','', - 'Konstantenbezeichner erwartet.' , 'Очікується ідентифікатор константи.','Ожидается идентификатор константы.'); + 'Konstantenbezeichner erwartet.' , 'Очікується ідентифікатор константи.','Ожидается идентификатор константы.', 'Identifiant de constante attendu'); ER_NUM_ADD_EXP := trans('Numeric address expected.' , 'Se esperaba dirección numérica.','', - 'Numerische Adresse erwartet.', 'Очікується числова адреса.','Ожидается числовой адрес.'); + 'Numerische Adresse erwartet.', 'Очікується числова адреса.','Ожидается числовой адрес.', 'Adresse numérique attendue.'); ER_IDE_TYP_EXP := trans('Identifier of type expected.', 'Se esperaba identificador de tipo.','', - 'Typenbezeichner erwartet.' , 'Очікується ідентифікатор типу.','Ожидается идентификатор типа.'); + 'Typenbezeichner erwartet.' , 'Очікується ідентифікатор типу.','Ожидается идентификатор типа.', 'Identifiant de type attendu.'); ER_SEM_COM_EXP := trans('":" or "," expected.' , 'Se esperaba ":" o ",".' ,'', - '":"oder"," erwartet.' , '":" або "," очікується.','":" или "," ожидается.'); + '":"oder"," erwartet.' , '":" або "," очікується.','":" или "," ожидается.', '":" ou "," attendus.'); ER_EQU_COM_EXP := trans('"=" or "," expected.' , 'Se esperaba "=" o ","','', - '"=" oder "," erwartet.' , '"=" або "," очікується.','"=" или "," ожидается.'); + '"=" oder "," erwartet.' , '"=" або "," очікується.','"=" или "," ожидается.', '"=" ou "," attendus.'); ER_END_EXPECTE := trans('"end" expected.', 'Se esperaba "end".','', - '"End" erwartet.','"end" очікується.','"end" ожидается.'); + '"End" erwartet.','"end" очікується.','"end" ожидается.', '"end" attendu.'); ER_EOF_END_EXP := trans('Unexpected end of file. "end" expected.', 'Inesperado fin de archivo. Se esperaba "end".','', - 'Unerwartetes Dateiende. "end" erwartet.','Неочікуваний кінець файла. "end" очікується.','Неожиданный конец файла. "end" ожидается.'); + 'Unerwartetes Dateiende. "end" erwartet.','Неочікуваний кінець файла. "end" очікується.','Неожиданный конец файла. "end" ожидается.', '"end" attendu à la fin du fichier.'); ER_BOOL_EXPECT := trans('Boolean expression expected.' , 'Se esperaba expresión booleana.','', - 'Bool''scher Ausdruck erwartet.','Очікується булевий вираз.','Ожидается булевое выражение.'); + 'Bool''scher Ausdruck erwartet.','Очікується булевий вираз.','Ожидается булевое выражение.', 'Expression booléenne attendue'); ER_UNKN_STRUCT := trans('Unknown structure.' , 'Estructura desconocida.','', - 'Unbekannte Struktur.' ,'Невідома структура.','Неизвестная структура.'); + 'Unbekannte Struktur.' ,'Невідома структура.','Неизвестная структура.', 'Structure inconnue.'); ER_PROG_NAM_EX := trans('Program name expected.' , 'Se esperaba nombre de programa.','', - 'Name des Programms erwartet.','Очікується імʼя програми.','Ожидается имя программы.'); + 'Name des Programms erwartet.','Очікується імʼя програми.','Ожидается имя программы.', 'Nom de programme attendu.'); ER_COMPIL_PROC := trans('There is a compilation in progress.' , 'Ya se está compilando un programa actualmente.','', - 'Es ist (noch) ein Kompiliervorgang aktiv.', 'Триває компіляція.','Происходит компиляция.'); + 'Es ist (noch) ein Kompiliervorgang aktiv.', 'Триває компіляція.','Происходит компиляция.', 'Une compilation et en cours.'); ER_CON_EXP_EXP := trans('Constant expression expected.', 'Se esperaba una expresión constante','', - 'Konstanter Ausdruck erwartet.', '', ''); + 'Konstanter Ausdruck erwartet.', '', '', 'Expression constante attendue.'); ER_NOT_AFT_END := trans('Syntax error. Nothing should be after "END."' , 'Error de sintaxis. Nada debe aparecer después de "END."','', - 'Syntax-Fehler. Es sollte nichts nach "END." kommen.', 'Синтаксична помилка. Нічого не повинно бути після "END."','Ошибка синтаксиса. Ничего не должно быть после "END."'); + 'Syntax-Fehler. Es sollte nichts nach "END." kommen.', 'Синтаксична помилка. Нічого не повинно бути після "END."','Ошибка синтаксиса. Ничего не должно быть после "END."', 'Erreur de syntaxe. Rien ne devrait suivre "END."'); ER_ELS_UNEXPEC := trans('"else" unexpected.' , '"else" inesperado', '', - '"else" nicht erwartet.','"else" несподівано.','"else" неожиданно.'); + '"else" nicht erwartet.','"else" несподівано.','"else" неожиданно.', '"else" inattendu.'); ER_INST_NEV_EXE:= trans('Instruction will never execute.' , 'Esta instrucción no se ejecutará', '', - 'Bereich wird niemals ausgeführt.','Інструкція ніколи не виконуватиметься.','Инструкция никогда не будет выполнена.'); + 'Bereich wird niemals ausgeführt.','Інструкція ніколи не виконуватиметься.','Инструкция никогда не будет выполнена.', 'L''instruction ne sera jamais exécutée.'); ER_ONLY_ONE_REG:= trans('Only one REGISTER parameter is allowed.', 'Solo se permite un parámetro REGISTER.', '', - 'Nur ein REGISTER Parameter erlaubt.' ,'Дозволено тільки один параметр REGISTER.','Только один параметр REGISTER разрешён.'); + 'Nur ein REGISTER Parameter erlaubt.' ,'Дозволено тільки один параметр REGISTER.','Только один параметр REGISTER разрешён.', 'Un seul paramètre REGISTRE est autorisé.'); ER_VARIAB_EXPEC:= trans('Variable expected.' , 'Se esperaba Variable', '', - 'Variable erwartet.' ,'Змінна очікується.','Переменная ожидается.'); + 'Variable erwartet.' ,'Змінна очікується.','Переменная ожидается.', 'Variable attendue.'); ER_ONL_BYT_WORD:= trans('Only BYTE or WORD index is allowed in FOR.', 'Solo variables Byte o Word son permitidas.', '', - 'In FOR-Schleifen sind nur BYTE oder WORD Indizes erlaubt.','Для FOR дозволено лише індекс BYTE або WORD.','В FOR допускается только индекс BYTE или WORD.'); + 'In FOR-Schleifen sind nur BYTE oder WORD Indizes erlaubt.','Для FOR дозволено лише індекс BYTE або WORD.','В FOR допускается только индекс BYTE или WORD.', 'Seuls des indexes BYTE ou WORD sont autorisées dans une boucle FOR.'); ER_ASIG_EXPECT := trans('":=" expected.' , 'Se esperaba ":="', '', - '":=" erwartet.' , '":=" очікується.', '":=" ожидается.'); + '":=" erwartet.' , '":=" очікується.', '":=" ожидается.', '":=" attendu.'); ER_FIL_NOFOUND := trans('File not found: %s' , 'Archivo no encontrado: %s', '', - 'Datei nicht gefunden: "%s"', 'Файл не знайдено: %s','Файл не найден: %s'); + 'Datei nicht gefunden: "%s"', 'Файл не знайдено: %s','Файл не найден: %s', 'Fichier non trouvé: %s'); ER_NOTYPDEF_NU := trans('No type defined to allocate this number.', 'No hay tipo para almacenar este número.', '', - '','Не визначено тип, щоб виділити цей номер.','Нет определенного типа, чтобы выделить это число.'); + '','Не визначено тип, щоб виділити цей номер.','Нет определенного типа, чтобы выделить это число.', 'Aucun type défini pour allouer ce nombre'); WA_UNUSED_CON_ := trans('Unused constant: %s', 'Constante sin usar: %s', '', - 'Unbenutzte Konstante: %s','Невикористана константа: %s','Неиспользованная константа: %s'); + 'Unbenutzte Konstante: %s','Невикористана константа: %s','Неиспользованная константа: %s', 'Constante non utilisée : %s'); WA_UNUSED_VAR_ := trans('Unused variable: %s', 'Variable sin usar: %s', '', - 'Unbenutzte Variable:%s','Невикористана змінна: %s','Неиспользованная переменная: %s'); + 'Unbenutzte Variable:%s','Невикористана змінна: %s','Неиспользованная переменная: %s', 'Variable non utilisée : %s'); WA_UNUSED_PRO_ := trans('Unused procedure: %s', 'Procedimiento sin usar: %s', '', - 'Unbenutztes Prozedur:%s','Невикористана процедура: %s','Неиспользованная процедура: %s'); + 'Unbenutztes Prozedur:%s','Невикористана процедура: %s','Неиспользованная процедура: %s', 'Procédure non utilisée : %s'); MSG_RAM_USED := trans('RAM Used = ' , 'RAM usada =', '', - 'RAM verwendet = ','RAM використано = ','RAM использовано = '); + 'RAM verwendet = ','RAM використано = ','RAM использовано = ', 'RAM utilisée ='); MSG_FLS_USED := trans('Flash Used = ' , 'Flash usada=', '', - 'Flash verwendet =','Flash використано = ','Flash использовано = '); + 'Flash verwendet =','Flash використано = ','Flash использовано = ', 'FLASH utilisée ='); ER_ARR_SIZ_BIG := trans('Array size to big.' , 'Tamaño de arreglo muy grande', '', - '' ,'Розмір масиву завеликий.','Размер массива слишком велик.'); + '' ,'Розмір масиву завеликий.','Размер массива слишком велик.', 'Tableau trop grand.'); ER_INV_ARR_SIZ := trans('Invalid array size.', 'Tamaño de arreglo inválido', '', - '' , 'Помилка в розмірі масиву.','Ошибка размера массива.'); - -end; + '' , 'Помилка в розмірі масиву.','Ошибка размера массива.', 'Taille de tableau invalide.'); diff --git a/language/tra_ParserAsm.pas b/language/tra_ParserAsm.pas index ab5282ad..52275f04 100644 --- a/language/tra_ParserAsm.pas +++ b/language/tra_ParserAsm.pas @@ -1,29 +1,29 @@ //ASM blocks errors ER_EXPEC_COMMA := trans('Expected ",".' , 'Se esperaba ","', '', - '"," erwartet.' , 'Очікується ",".','Ожидается ",".'); + '"," erwartet.' , 'Очікується ",".','Ожидается ",".', 'Attendu ",".'); ER_EXP_ADR_VAR := trans('Expected address or variable name.' ,'Se esperaba dirección o variable.','', - 'Adresse oder Variablenname erwartete.','Очікується адреса або змінна.','Ожидается адрес или имя переменной.'); + 'Adresse oder Variablenname erwartete.','Очікується адреса або змінна.','Ожидается адрес или имя переменной.', 'Attendu: adresse ou nom de variable.'); ER_EXP_CON_VAL := trans('Expected constant or value.' ,'Se esperaba constante o variable.','', - 'Konstante oder Wert erwartet.' ,'Очікується константа або значення','Ожидается константа или значение'); -ER_NOGETADD_VAR:= trans('Cannot get address of this Variable' , 'No se puede obtener la dirección de esta variable.', '', - 'Kann Adresse dieser Variable nicht ermitteln', 'Не можу отримати адресу цієї змінної','Не могу получить адрес этой переменной'); -ER_NOGETVAL_CON:= trans('Cannot get value of this costant', 'No se puede obtener el valor de esta constante.', '', - 'Kann den Wert dieser Konstanten nicht ermitteln','Не можу отримати значення цієї константи.','Не могу получить значение этой константы.'); + 'Konstante oder Wert erwartet.' ,'Очікується константа або значення','Ожидается константа или значение', 'Attendu: constante ou valeur.'); +ER_NOGETADD_VAR:= trans('Cannot get address of this Variable' , 'No se puede obtener la dirección de esta variable.', 'Impossible d''obtenir l''adresse de cette variable', + 'Kann Adresse dieser Variable nicht ermitteln', 'Не можу отримати адресу цієї змінної','Не могу получить адрес этой переменной', ''); +ER_NOGETVAL_CON:= trans('Cannot get value of this constant', 'No se puede obtener el valor de esta constante.', '', + 'Kann den Wert dieser Konstanten nicht ermitteln','Не можу отримати значення цієї константи.','Не могу получить значение этой константы.', 'Impossible d''obtenir l''adresse de cette constante'); ER_INV_ASMCODE := trans('Invalid ASM Opcode: %s' , 'Instrucción inválida: %s' ,'', - 'Ungültige ASM Opcode: %s','Невірна ASM інструкція: %s','Неверная ASM инструкция: %s'); + 'Ungültige ASM Opcode: %s','Невірна ASM інструкція: %s','Неверная ASM инструкция: %s', 'Instruction ASM invalide: %s'); ER_EXPECT_W_F := trans('Expected "w" or "f".' , 'Se esperaba "w" or "f".' ,'', - '"w" oder "f" erwartet.', 'Очікується "w" або "f".','Ожидается "w" или "f".'); + '"w" oder "f" erwartet.', 'Очікується "w" або "f".','Ожидается "w" или "f".', 'Attendu: "w" ou "f".'); ER_SYNTAX_ERR_ := trans('Syntax error: "%s"' , 'Error de sintaxis: "%s"' ,'', - 'Syntax-Fehler: "%s"' ,'Помилка синтаксису: "%s"','Ошибка синтаксиса: "%s"'); + 'Syntax-Fehler: "%s"' ,'Помилка синтаксису: "%s"','Ошибка синтаксиса: "%s"', 'Erreur de syntaxe: "%s"'); ER_DUPLIC_LBL_ := trans('Duplicated label: "%s"' , 'Etiqueta duplicada: "%s"' ,'', - 'Dupliziertes Label: "%s"', 'Дублікат мітки: "%s"','Дубликат метки: "%s"'); + 'Dupliziertes Label: "%s"', 'Дублікат мітки: "%s"','Дубликат метки: "%s"', 'Label à double: %s'); ER_EXPE_NUMBIT := trans('Expected number of bit: 0..7.', 'Se esperaba número de bit: 0..7','', - 'Bitnummer erwarted: 0..7.' , 'Очікується номер біта 0..7','Ожидается номер бита 0..7'); + 'Bitnummer erwarted: 0..7.' , 'Очікується номер біта 0..7','Ожидается номер бита 0..7', 'Position de bit attendue: 0..7'); ER_EXPECT_ADDR := trans('Expected address.' , 'Se esperaba dirección' ,'', - 'Adresse erwarted.' ,'Очікується адреса.','Ожидается адрес.'); + 'Adresse erwarted.' ,'Очікується адреса.','Ожидается адрес.', 'Attendu: adresse.'); ER_EXPECT_BYTE := trans('Expected byte.' , 'Se esperaba byte' ,'', - 'Byte erwartet.' , 'Очікується байт.','Ожидается байт.'); + 'Byte erwartet.' , 'Очікується байт.','Ожидается байт.', 'Attendu: byte.'); ER_UNDEF_LABEL_:= trans('Undefined ASM Label: %s' , 'Etiqueta ASM indefinida: %s' ,'', - 'Undefiniertes ASM Label:%s','Невизначена ASM мітка: %s','Неопределенная ASM метка: %s'); + 'Undefiniertes ASM Label:%s','Невизначена ASM мітка: %s','Неопределенная ASM метка: %s', 'Label ASM non défini: %s'); WA_ADDR_TRUNC := trans('Address truncated to fit instruction.', 'Dirección truncada, al tamaño de la instrucción', '', - 'Adresse abgeschnitten, um in Anweisung zu passen.','Адресу скорочено відповідно до вказівки.','Адрес усечен в соответствии с инструкцией.'); + 'Adresse abgeschnitten, um in Anweisung zu passen.','Адресу скорочено відповідно до вказівки.','Адрес усечен в соответствии с инструкцией.', 'Adresse tronquée pour insertion dans l''instruction.'); diff --git a/language/tra_ParserDirec.pas b/language/tra_ParserDirec.pas index 0f309b1b..cb819ed4 100644 --- a/language/tra_ParserDirec.pas +++ b/language/tra_ParserDirec.pas @@ -1,63 +1,50 @@ -var - ER_ERROR_DIREC, ER_UNKNO_DEVIC, ER_MODE_UNKNOWN, ER_UNKNO_DIREC, - ER_ERROR_FREQ, ER_IDENT_EXPEC, ER_EXPEC_EQUAL, - ER_SYNTAX_ERRO, ER_SYNTAX_ERR_: string; - ER_EXPECTED_BR, ER_ENDIF_NOFOU, ER_UNEXP_ENDIF: String; - ER_UNEXP_ELSE, ER_CONF_UNDEF_, ER_INVAL_CBIT_: String; - ER_FILE_NO_FND_, ER_ERIN_NUMBER_, ER_UNKNW_IDENT_: String; - ER_DIVIDE_ZERO, ER_EVA_ZER_ZER, ER_OPE_NOT_IMP_: String; - ER_EXPECT_CAR_: String; - ER_TOOHIGHFRE: String; -procedure SetLanguage; -begin //Messages when compiling Directives ER_ERROR_DIREC := trans('Error in directive.' , 'Error en directiva' ,'', - 'Fehler bei Direktive.','Помилка директиви.','Ошибка в директиве.'); + 'Fehler bei Direktive.','Помилка директиви.','Ошибка в директиве.', 'Directive erronnée.'); ER_UNKNO_DEVIC := trans('Unknown device: %s' , 'Dispositivo desconocido: %s','', - 'Unbekanntes Gerät: %s','Невизначений прилад: %s','Неизвестное устройство: %s'); + 'Unbekanntes Gerät: %s','Невизначений прилад: %s','Неизвестное устройство: %s', 'Modèle inconnu : %s'); ER_MODE_UNKNOWN:= trans('Mode unknown: %s' , 'Modo inválido' , '', - 'Unbekannter Modus: %s','Невизначений режим: %s','Неизвестный режим: %s'); + 'Unbekannter Modus: %s','Невизначений режим: %s','Неизвестный режим: %s', 'Mode inconnu : %s'); ER_UNKNO_DIREC := trans('Unknown directive: %s', 'Directiva desconocida: %s','', - 'Unbekannte Direktive: %s','Невизначена директива: %s','Неизвестная директива: %s'); + 'Unbekannte Direktive: %s','Невизначена директива: %s','Неизвестная директива: %s', 'Directive inconnue : %s'); ER_ERROR_FREQ := trans('Error in frequency.' , 'Error en frecuencia.' , '', - 'Fehler bei der Frequenz.','Помилка в частоті.','Ошибка в частоте.'); + 'Fehler bei der Frequenz.','Помилка в частоті.','Ошибка в частоте.', 'Erreur de fréquence.'); ER_TOOHIGHFRE := trans('Frequency too high for this device.', 'Frecuencia muy alta para este microproc.', '', - '' ,'Частота зависока для цього приладу.','Слишком высокая частота для этого устройства.'); + '' , 'Частота зависока для цього приладу.','Слишком высокая частота для этого устройства.', 'Fréquence trop élevée pour ce modèle.'); ER_IDENT_EXPEC := trans('Identifier expected.' , 'Identificador esperado.' , '', - 'Bezeichner erwartet.' ,'Очікується ідентифікатор.','Ожидается идентификатор.'); + 'Bezeichner erwartet.' ,'Очікується ідентифікатор.','Ожидается идентификатор.', 'Identifiant attendu.'); ER_EXPEC_EQUAL := trans('Expected "="' , 'Se esperaba "="' , '', - '"=" erwartet.' , 'Очікується "="','Ожидается "="'); + '"=" erwartet.' , 'Очікується "="','Ожидается "="', 'Attendu: "="'); ER_SYNTAX_ERRO := trans('Syntax error.' , 'Error de sintaxis.' , '', - 'Syntaxfehler.' , 'Помилка синтаксиса.','Ошибка синтаксиса.'); + 'Syntaxfehler.' , 'Помилка синтаксиса.','Ошибка синтаксиса.', 'Erreur de syntaxe.'); ER_SYNTAX_ERR_ := trans('Syntax error: "%s"' , 'Error de sintaxis: "%s"' , '', - 'Syntax-Fehler: "%s"' , 'Помилка синтаксиса: "%s"','Ошибка синтаксиса: "%s"'); + 'Syntax-Fehler: "%s"' , 'Помилка синтаксиса: "%s"','Ошибка синтаксиса: "%s"', 'Erreur de syntaxe : "%s".'); ER_EXPECTED_BR := trans('Expected: "}".' , 'Se esperaba "}".' , '', - '"}" erwartet.' , 'Очікується: "}".','Ожидается: "}".'); + '"}" erwartet.' , 'Очікується: "}".','Ожидается: "}".', 'Attendu: "}"'); ER_ENDIF_NOFOU := trans('"$ENDIF" not found.' , 'No se encontró "$ENDIF".', '', - '' , '"$ENDIF" не знайдено.','"$ENDIF" не найден.'); + '' , '"$ENDIF" не знайдено.','"$ENDIF" не найден.', '$ENDIF non trouvé.'); ER_UNEXP_ENDIF := trans('Unexpected "$ENDIF".' , 'No se esperaba "$ENDIF".', '', - '' , 'Непередбачений "$ENDIF".','Непредвиденный "$ENDIF".'); + '' , 'Непередбачений "$ENDIF".','Непредвиденный "$ENDIF".', '"$ENDIF" non attendu.'); ER_UNEXP_ELSE := trans('Unexpected "$ELSE".' , 'No se esperaba "$ELSE".' , '', - '' , 'Непередбачений "$ELSE".','Непредвиденный "$ELSE".'); + '' , 'Непередбачений "$ELSE".','Непредвиденный "$ELSE".', '"$ELSE" non attendu.'); ER_CONF_UNDEF_ := trans('Undefined Config. Bit: %s', 'Bit de Config. no definido: %s' , '', - '' , 'Невизначений біт конфігурації: %s','Неопределённый бит конфигурации: %s'); + '' , 'Невизначений біт конфігурації: %s','Неопределённый бит конфигурации: %s', 'Bit de configuration non défini : %s'); ER_INVAL_CBIT_ := trans('Invalid Config. Bit: %s', 'Bit de Config. inválido: %s' , '', - '' , 'Помилковий біт конфігурації: %s','Ошибочный бит конфигурации: %s'); + '' , 'Помилковий біт конфігурації: %s','Ошибочный бит конфигурации: %s', 'Bit de configuration invalide : %s'); ER_FILE_NO_FND_:= trans('File no found: %s' , 'Archivo no encontrado: %s' , '', - '' , 'Файл не знайдено: %s','Файл не найден: %s'); + '' , 'Файл не знайдено: %s','Файл не найден: %s', 'Fichier non trouvé : %s'); ER_ERIN_NUMBER_:= trans('Error in number: %s' , 'Error en número: %s' , '', - '' , 'Помилка в номері: %s','Ошибка в числе: %s'); + '' , 'Помилка в номері: %s','Ошибка в числе: %s', 'Nombre erroné : %s'); ER_UNKNW_IDENT_:= trans('Unknown Identifier: %s' , 'Identificador desconocido: %s' , '', - '' , 'Невідомий ідентифікатор: %s','Неизвестный идентификатор: %s'); + '' , 'Невідомий ідентифікатор: %s','Неизвестный идентификатор: %s', 'Identifiant inconnu : %s'); ER_DIVIDE_ZERO := trans('Cannot divide by zero' , 'No se puede dividir por cero' , '', - '' , 'Не можу поділити на нуль','Не могу поделить на ноль'); + '' , 'Не можу поділити на нуль','Не могу поделить на ноль', 'Division par zéro impossible.'); ER_EVA_ZER_ZER := trans('Cannot evaluate 0^0' , 'No se puede evaluar 0^0', '', - '' , 'Не можу оцінити 0^0', 'Не могу оценить 0^0'); + '' , 'Не можу оцінити 0^0', 'Не могу оценить 0^0', 'Impossibilité d''évaluer 0^0'); ER_OPE_NOT_IMP_ := trans('Operator not implemented: %s', 'Operador no implementado: %s', '', - '' , 'Оператор не реалізовано: %s','Оператор не реализован: %s'); + '' , 'Оператор не реалізовано: %s','Оператор не реализован: %s', 'Opérateur non implémenté : %s'); ER_EXPECT_CAR_ := trans('Expected "%s"' , 'Se esperaba "%s"' , '', - '"%s" erwartet.' , 'Очікується "%s"','Ожидается "%s"'); + '"%s" erwartet.' , 'Очікується "%s"','Ожидается "%s"', 'Attendu "%s"'); -end; diff --git a/language/tra_RegWatcher.pas b/language/tra_RegWatcher.pas new file mode 100644 index 00000000..a9fbae3b --- /dev/null +++ b/language/tra_RegWatcher.pas @@ -0,0 +1,22 @@ +Label1.Caption := Trans('Register Watcher' , 'Inspector de Registros' , '', + '' , '', '', + 'Observateur de Registres'); +mnClearAll.Caption:= Trans('&Clear All' , 'Eliminar &Todos' , '', + '' , '', '', + 'Tout effacer'); +mnAddVars.Caption := Trans('Add Program &Variables', 'Agregar &Variables' , '', + '' , '', '', + 'Ajouter &variables programme'); +mnAddRT.Caption := Trans('Add &Registers' , 'Agregar &Registros' , '', + '' , '', '', + 'Ajouter ®istres'); +//Grid columns +TIT_ADD := Trans('Address' , 'Dirección' , '', + '' , '', '', + 'Adresse'); +TIT_NAM := Trans('Name' , 'Nombre' , '', + '' , '', '', + 'Nom'); +TIT_VAL := Trans('Value' , 'Valor' , '', + '' , '', '', + 'Valeur'); diff --git a/samples/ASM_BlinkLed.pas b/samples/ASM_BlinkLed.pas index e76d0159..b1441b74 100644 --- a/samples/ASM_BlinkLed.pas +++ b/samples/ASM_BlinkLed.pas @@ -1,8 +1,7 @@ {Sample program to blink a Led on PORTB.0 using ASM and a Pascal variable.} -{$FREQUENCY 4 MHZ } -{$PROCESSOR PIC16F84A} uses PIC16F84A; +{$FREQUENCY 4 MHZ } var counter: byte; begin asm diff --git a/samples/BlinkLed.pas b/samples/BlinkLed.pas index d57cdab9..c876a81d 100644 --- a/samples/BlinkLed.pas +++ b/samples/BlinkLed.pas @@ -1,10 +1,8 @@ {Sample program to blink a Led on PORTB.4} -{$FREQUENCY 8 MHZ } -{$PROCESSOR PIC16F84A} program BlinkLed; +uses PIC16F84A; +{$FREQUENCY 8 MHZ } var - PORTB : BYTE absolute $06; - TRISB : BYTE absolute $86; pin: bit absolute PORTB.7; begin TRISB := 0; //all outputs diff --git a/samples/Com_RS-232_UARTSoft.pas b/samples/Com_RS-232_UARTSoft.pas index 7e44c4d8..875da8b7 100644 --- a/samples/Com_RS-232_UARTSoft.pas +++ b/samples/Com_RS-232_UARTSoft.pas @@ -25,11 +25,9 @@ * } -{$PROCESSOR PIC16F84A} -{$FREQUENCY 8Mhz} {$MODE PICPAS} - uses PIC16F84A; +{$FREQUENCY 8Mhz} const DataBitCount = 8; // 8 bits de datos, sin paridad ni control de flujo. diff --git a/samples/DigitalInput.pas b/samples/DigitalInput.pas index d7f3925f..23ff3086 100644 --- a/samples/DigitalInput.pas +++ b/samples/DigitalInput.pas @@ -1,8 +1,8 @@ {Sample program to read a digital input in PORTB.4 and put the value in PORTB.5} +program DigitalInput; {$FREQUENCY 8 MHZ } -{$PROCESSOR PIC16F84A} -program BlinkLed; +uses PIC16F84A; var PORTB : BYTE absolute $06; TRISB : BYTE absolute $86; diff --git a/samples/EEPROM.pas b/samples/EEPROM.pas index f8294922..b61f0d29 100644 --- a/samples/EEPROM.pas +++ b/samples/EEPROM.pas @@ -10,12 +10,9 @@ * bits de la zona SFR de memoria y sus registros. } -{$FREQUENCY 8 MHZ } -{$PROCESSOR PIC16F84A} program EEPROMInterna; - -uses - PIC16F84A; +uses PIC16F84A; +{$FREQUENCY 8 MHZ } var Contador :byte; @@ -23,24 +20,24 @@ procedure WriteEEPROMASM(direccion , valor: byte); begin ASM -ESCRITURA: ; Establecer EEADR y EEDATA - MOVF direccion,w ; Direccion de esctritura - MOVWF EEADR ; Escribe la dirección en EEADR - MOVF valor,w ; Dato a escribir en EEPROM +ESCRITURA: ; Establecer EEADR y EEDATA + MOVF direccion,w ; Direccion de esctritura + MOVWF EEADR ; Escribe la dirección en EEADR + MOVF valor,w ; Dato a escribir en EEPROM MOVWF EEDATA ; Se escribe el dato en EEDATA - BSF STATUS,bit_RP0 ; Selecciona el banco 1 - BSF EECON1,bit_WREN ; Permiso de escritura activado + BSF STATUS_RP0 ; Selecciona el banco 1 + BSF EECON1_WREN ; Permiso de escritura activado ;Comienzo de la secuencia de escritura MOVLW $55 MOVWF EECON2 ; Se escribe el dato 55 h en EECON2 MOVLW $AA MOVWF EECON2 ; Se escribe AA h en EECON2 - BSF EECON1,bit_WR ; Comienza la escritura - BCF EECON1,bit_WREN ; Permiso de escritura desactivado + BSF EECON1_WR ; Comienza la escritura + BCF EECON1_WREN ; Permiso de escritura desactivado ESPERA: - BTFSC EECON1,bit_WR ; Espera a que termine la escritura + BTFSC EECON1_WR ; Espera a que termine la escritura GOTO ESPERA - BCF STATUS,bit_RP0 ; Selecciona el banco 0 + BCF STATUS_RP0 ; Selecciona el banco 0 END end; diff --git a/samples/output.hex b/samples/output.hex deleted file mode 100644 index 8019b14a..00000000 --- a/samples/output.hex +++ /dev/null @@ -1,7 +0,0 @@ -:020000040000FA -:1000000011288C0184008C0A840A840B08288C0B2C -:100010000A280800FA30FF3E0D280E28031D0B2881 -:10002000052883168601033083128C00E8300220F5 -:0A0030008030860683161328630053 -:00000001FF -;PIC16F84A diff --git a/syntax/PicPas_PIC16.xml b/syntax/PicPas_PIC16.xml index a37ed3aa..668f11ea 100644 --- a/syntax/PicPas_PIC16.xml +++ b/syntax/PicPas_PIC16.xml @@ -121,17 +121,20 @@ "{$MSGERR 'Error'}" "{$SET \_}" "{$SET variable = 'valor'}" - "{$CLEAR_STATE_RAM}" - "{$SET_STATE_RAM '\_'}" - "{$SET_STATE_RAM '000-00B:SFR'}" - "{$SET_MAPPED_RAM '\_'}" - "{$SET_MAPPED_RAM '08C-0CF:bnk0'}" "{$INFO \_}" "{$INFO 'Hello'}" "{$WARNING \_}" "{$WARNING 'Hello'}" "{$ERROR \_}" "{$ERROR 'Hello'}" + "{$CLEAR_STATE_RAM}" + "{$SET_STATE_RAM '\_'}" + "{$SET_STATE_RAM '000-00B:SFR'}" + "{$SET_MAPPED_RAM '\_'}" + "{$SET_MAPPED_RAM '08C-0CF:bnk0'}" + "{$RESET_PINS}" + "{$SET_PIN_NAME '\_'}" + "{$SET_PIN_NAME '1:VCC'}" "{$MAP_PORT_TO_PIN '\_'}" "{$MAP_RAM_TO_PIN '005:0-17,1-18,2-1,3-2,4-3'}" "{$SET_UNIMP_BITS '\_'}" diff --git a/temp/PicPas0.8.4.Full.rar b/temp/PicPas0.8.4.Full.rar deleted file mode 100644 index b0e781c2..00000000 Binary files a/temp/PicPas0.8.4.Full.rar and /dev/null differ diff --git a/TestCode/Simul_2/Last Loaded Test1.DBK b/testcode10/Simul_1/Test1.DSN similarity index 95% rename from TestCode/Simul_2/Last Loaded Test1.DBK rename to testcode10/Simul_1/Test1.DSN index 6178d395..83781928 100644 Binary files a/TestCode/Simul_2/Last Loaded Test1.DBK and b/testcode10/Simul_1/Test1.DSN differ diff --git a/testcode10/Simul_1/Test1.PWI b/testcode10/Simul_1/Test1.PWI new file mode 100644 index 00000000..27200143 Binary files /dev/null and b/testcode10/Simul_1/Test1.PWI differ diff --git a/testcode10/Simul_1/Test1_HelloWorld.pas b/testcode10/Simul_1/Test1_HelloWorld.pas new file mode 100644 index 00000000..a932cf6f --- /dev/null +++ b/testcode10/Simul_1/Test1_HelloWorld.pas @@ -0,0 +1,14 @@ +{Rutina de verificación del programa Hola Mundo. +Lo que se prueba aquí, es el funcionamiento báscio y la capacidad de llamar +a la rutina delay_ms(), definiendo el uso del registro H.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +begin + SetAsOutput(GPIO_GP0); + while true do + GPIO_GP0 := not GPIO_GP0; + delay_ms(1000); + end; +end. + diff --git a/testcode10/Simul_1/Test1_Vars.pas b/testcode10/Simul_1/Test1_Vars.pas new file mode 100644 index 00000000..1b87ce8b --- /dev/null +++ b/testcode10/Simul_1/Test1_Vars.pas @@ -0,0 +1,123 @@ +{Test code for validation of Variable declarations and Function Systems.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var //test pin + pinLed: bit absolute GPIO.0; +procedure bien; +begin + pinLed := 1; + delay_ms(30); + pinLed := 0; + delay_ms(20); +end; +procedure Mal; +begin + pinLed := 1; + delay_ms(2000); + pinLed := 0; + asm SLEEP end +end; +var //simple type declarations + vbit: bit; + vbool: boolean; + vchar: char; + vbyte: byte; + vword: word; + vdword: dword; +var //absolute type declarations + abit: bit absolute $20.0; + abool: boolean absolute vbool; + achar: char absolute vchar; + abyte: byte absolute vbyte; + aword: word absolute vword; + byteL: byte absolute aword.low; + byteH: byte absolute aword.high; +const + consWord = word($0A00); +begin + SetAsOutput(pinLed); + + /////////////////////////////////////////////////// + ///// Var declration + /////////////////////////////////////////////////// + //Basic assigment + vbit := 0; + if vbit=0 then bien else mal end; + vbit := 1; + if vbit=1 then bien else mal end; + + vbool := false; + if vbool then mal else bien end; + vbool := true; + if vbool then bien else mal end; + + vchar := ' '; + if vchar = ' ' then bien else mal end; + vchar := #65; + if vchar = chr(65) then bien else mal end; + vchar := #65; + if vchar = 'A' then bien else mal end; + + //Absolute position + abool := false; + if vbool then mal else bien end; + abool := true; + if vbool then bien else mal end; + + vbyte := 5; + if abyte = 0 then mal else bien end; + vbyte := 255; + if abyte = 255 then bien else mal end; + + //Access to bit + vbyte := 0; + vbyte.bit0 := 1; + vbyte.bit7 := 1; + if vbyte = $81 then bien else mal end; + if ($10).bit0 = 0 then bien else mal end; + if ($10).bit4 = 1 then bien else mal end; + if ($FFFF).high.bit7 = 1 then bien else mal end; + + //Access to bytes of word + vword:=$FF01; + vbyte := vword.low; + if vbyte = 1 then bien else mal end; + vbyte := vword.high; + if vbyte = 255 then bien else mal end; + vbyte := consWord.high; + if vbyte = 10 then bien else mal end; + + byteL := 0; + aword := $2010; + if byteL = $10 then bien else mal end; + if byteH = $20 then bien else mal end; + + aword := $2010; + vword.low.bit0 := 1; + if byteL = $11 then bien else mal end; + + aword := 0; + byteL := 5; + aword.high := aword.low; + if aword = $0505 then bien else mal end; + + aword := 0; + aword.low.bit0 := 1; + aword.high.bit0 := aword.low.bit0; + if aword = $0101 then bien else mal end; + + aword := $2010; + if vword = $2010 then bien else mal end; + + //Access to bytes of dword + vdword := $01020304; + if vdword.low = 4 then bien else mal end; + if vdword.high = 3 then bien else mal end; +// if vdword.extra= 2 then bien else mal end; +// if vdword.ultra = 1 then bien else mal end; +// if vdword.lowword = $0304 then bien else mal end; +// if vdword.highword = $0102 then bien else mal end; +// +end. + diff --git a/testcode10/Simul_1/Test2_Bit.pas b/testcode10/Simul_1/Test2_Bit.pas new file mode 100644 index 00000000..22d66d32 --- /dev/null +++ b/testcode10/Simul_1/Test2_Bit.pas @@ -0,0 +1,250 @@ +{Rutina de verificación para operaciones básicas con datos de +tipo BIT. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + pinLed: bit absolute GPIO.0; +procedure bien; +begin + pinLed := 1; + delay_ms(20); + pinLed := 0; + delay_ms(40); +end; +procedure Mal; +begin + pinLed := 1; + delay_ms(2000); + pinLed := 0; + asm SLEEP end +end; +var + a, b: bit; + vbyte: byte; +begin + SetAsOutput(pinLed); + pinLed := 0; + + //Pruebas con IF + if true then bien else mal end; + if false then mal else bien end; + + ////////////////////////////////////////////////////////// + ////////////// Operación Igualdad /////////////////// + ////////////////////////////////////////////////////////// + + //Pruebas con BIT - constante + if bit(0) = bit(0) then bien else mal end; + if bit(0) = bit(1) then mal else bien end; + if bit(1) = bit(1) then bien else mal end; + if bit(1) = bit(0) then mal else bien end; + + if bit(0) <> bit(0) then mal else bien end; + if bit(1) <> bit(0) then bien else mal end; + + //Pruebas con BIT - variable + a := 1; + b := 0; + if a = a then bien else mal end; + if a = b then mal else bien end; + if a <> a then mal else bien end; + if a <> b then bien else mal end; + + //Pruebas con BIT - variable - constante + a := 1; + b := 0; + if a = 1 then bien else mal end; + if a = 0 then mal else bien end; + if 0 <> b then mal else bien end; + if 1 <> b then bien else mal end; + + //Pruebas con BIT - expresión + a := 1; + b := 0; + if a = (b and a) then mal else bien end; + if (b and a) = a then mal else bien end; + if (a and 1) = 1 then bien else mal end; + if (a and 1) = 0 then mal else bien end; + + if (a and b) = (b and a) then bien else mal end; + if (a and b) <> (b and a) then mal else bien end; + + //Operación lógica NOT + if not bit(0) = 1 then bien else mal end; + if not bit(1) = 0 then bien else mal end; + a := 0; + if not a = 1 then bien else mal end; + if not a = 0 then mal else bien end; + if not a = not a then bien else mal end; + + ////////////////////////////////////////////////////////// + ////////////// Operación lógica AND /////////////////// + ////////////////////////////////////////////////////////// + + //Operación lógica AND - constantes + if 0 and 0 = 0 then bien else mal end; + if 0 and 1 = 0 then bien else mal end; + if 1 and 0 = 0 then bien else mal end; + if 1 and 1 = 1 then bien else mal end; + + //Operación lógica AND - variables + a := 0; b := 0; + if a and b = 0 then bien else mal end; + a := 0; b := 1; + if a and b = 0 then bien else mal end; + a := 1; b := 0; + if a and b = 0 then bien else mal end; + a := 1; b := 1; + if a and b = 1 then bien else mal end; + + //Operación lógica AND - variables y constantes + a := 0; + if a and 0 = 0 then bien else mal end; + if 0 and a = 0 then bien else mal end; + if a and 1 = 0 then bien else mal end; + if 1 and a = 0 then bien else mal end; + a := 1; + if a and 0 = 0 then bien else mal end; + if 0 and a = 0 then bien else mal end; + if a and 1 = 1 then bien else mal end; + if 1 and a = 1 then bien else mal end; + + //Operación lógica AND - lógica invertida + a := 0; b := 0; + if a and not b = 0 then bien else mal end; //lógica invertida + if not a and b = 0 then bien else mal end; //lógica invertida + if (not a and not b) = 1 then bien else mal end; //lógica invertida + + if a and a = a then bien else mal end; //lógica invertida + if a and not a = 0 then bien else mal end; //lógica invertida + + ////////////////////////////////////////////////////////// + ////////////// Operación lógica OR /////////////////// + ////////////////////////////////////////////////////////// + //Operación lógica OR - constantes + if 0 or 0 = 0 then bien else mal end; + if 0 or 1 = 1 then bien else mal end; + if 1 or 0 = 1 then bien else mal end; + if 1 or 1 = 1 then bien else mal end; + + //Operación lógica OR - variables + a := 0; b := 0; + if a or b = 0 then bien else mal end; + a := 0; b := 1; + if a or b = 1 then bien else mal end; + a := 1; b := 0; + if a or b = 1 then bien else mal end; + a := 1; b := 1; + if a or b = 1 then bien else mal end; + + //Operación lógica OR - variables y constantes + a := 0; + if a or 0 = 0 then bien else mal end; + if 0 or a = 0 then bien else mal end; + if a or 1 = 1 then bien else mal end; + if 1 or a = 1 then bien else mal end; + a := 1; + if a or 0 = 1 then bien else mal end; + if 0 or a = 1 then bien else mal end; + if a or 1 = 1 then bien else mal end; + if 1 or a = 1 then bien else mal end; + + //Operación lógica OR - lógica invertida + a := 0; b := 0; + if a or not b = 1 then bien else mal end; //lógica invertida + if not a or b = 1 then bien else mal end; //lógica invertida + if (not a or not b) = 1 then bien else mal end; //lógica invertida + + if a or a = a then bien else mal end; //lógica invertida + if a or not a = 1 then bien else mal end; //lógica invertida + +// ////////////////////////////////////////////////////////// +// ////////////// Operación lógica XOR /////////////////// +// ////////////////////////////////////////////////////////// +// //Constantes +// if 0 xor 0 = 0 then bien else mal end; +// if 0 xor 1 = 1 then bien else mal end; +// if 1 xor 0 = 1 then bien else mal end; +// if 1 xor 1 = 0 then bien else mal end; +// +// //Variables +// a := 0; b := 0; +// if a xor b = 0 then bien else mal end; +// a := 0; b := 1; +// if a xor b = 1 then bien else mal end; +// a := 1; b := 0; +// if a xor b = 1 then bien else mal end; +// a := 1; b := 1; +// if a xor b = 0 then bien else mal end; +// +// //Variables y constantes +// a := 0; +// if a xor 0 = 0 then bien else mal end; +// if 0 xor a = 0 then bien else mal end; +// if a xor 1 = 1 then bien else mal end; +// if 1 xor a = 1 then bien else mal end; +// a := 1; +// if a xor 0 = 1 then bien else mal end; +// if 0 xor a = 1 then bien else mal end; +// if a xor 1 = 0 then bien else mal end; +// if 1 xor a = 0 then bien else mal end; +// +// //Lógica invertida +// a := 0; b := 0; +// if a xor not b = 1 then bien else mal end; //lógica invertida +// if not a xor b = 1 then bien else mal end; //lógica invertida +// if (not a xor not b) = 0 then bien else mal end; //lógica invertida +// +// ////////////////////////////////////////////////////////// +// //////////////// Operaciones Mixtas // ////////////////// +// ////////////////////////////////////////////////////////// +// //Operaciones con la misma variable +// a := 0; +// a := a; +// if (a=a) and (a=0) then bien else mal end; +// a := 1; +// a := a; +// if (a=a) and (a=1) then bien else mal end; +// +// a := 0; +// a := not a; +// if (a=1) then bien else mal end; +// +// vbyte.bit7 := 0; +// vbyte.bit7 := vbyte.bit7; +// if (vbyte.bit7=vbyte.bit7) and (vbyte.bit7=0) then bien else mal end; +// +// vbyte.bit7 := 1; +// vbyte.bit7 := vbyte.bit7; +// if (vbyte.bit7=1) then bien else mal end; +// +// vbyte.bit7 := 0; +// vbyte.bit7 := not vbyte.bit7; +// if vbyte.bit7 = 1 then bien else mal end; +// +// //Oepraciones con dos variables +// a := 0; b := 0; +// if (a = 0) and (b = 0) then bien else mal end; +// if (not a and not b) = 1 then bien else mal end; +// +// a := 1; b := 0; +// if (a = 1) and (b = 0) then bien else mal end; +// if (a and not b) = 1 then bien else mal end; +// +// +// a := 0; b := 0; +// if a xor b = (not a and b or not b and a) then bien else mal end; +// if (not a and b or not b and a) = (a xor b) then bien else mal end; +// a := 1; b := 0; +// if a xor b = (not a and b or not b and a) then bien else mal end; +// if (not a and b or not b and a) = (a xor b) then bien else mal end; +// a := 1; b := 1; +// if a xor b = (not a and b or not b and a) then bien else mal end; +// if (not a and b or not b and a) = (a xor b) then bien else mal end; + +end. + diff --git a/testcode10/Simul_1/Test2_Bit2.pas b/testcode10/Simul_1/Test2_Bit2.pas new file mode 100644 index 00000000..1bb51ee1 --- /dev/null +++ b/testcode10/Simul_1/Test2_Bit2.pas @@ -0,0 +1,117 @@ +{Rutina de verificación para operaciones básicas con datos de +tipo BIT. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + pinLed: bit absolute GPIO.0; +procedure bien; +begin + pinLed := 1; + delay_ms(20); + pinLed := 0; + delay_ms(40); +end; +procedure Mal; +begin + pinLed := 1; + delay_ms(2000); + pinLed := 0; + asm SLEEP end +end; +var + a, b: bit; + vbyte: byte; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////// Operación lógica XOR /////////////////// + ////////////////////////////////////////////////////////// + //Constantes + if 0 xor 0 = 0 then bien else mal end; + if 0 xor 1 = 1 then bien else mal end; + if 1 xor 0 = 1 then bien else mal end; + if 1 xor 1 = 0 then bien else mal end; + + //Variables + a := 0; b := 0; + if a xor b = 0 then bien else mal end; + a := 0; b := 1; + if a xor b = 1 then bien else mal end; + a := 1; b := 0; + if a xor b = 1 then bien else mal end; + a := 1; b := 1; + if a xor b = 0 then bien else mal end; + + //Variables y constantes + a := 0; + if a xor 0 = 0 then bien else mal end; + if 0 xor a = 0 then bien else mal end; + if a xor 1 = 1 then bien else mal end; + if 1 xor a = 1 then bien else mal end; + a := 1; + if a xor 0 = 1 then bien else mal end; + if 0 xor a = 1 then bien else mal end; + if a xor 1 = 0 then bien else mal end; + if 1 xor a = 0 then bien else mal end; + + //Lógica invertida + a := 0; b := 0; + if a xor not b = 1 then bien else mal end; //lógica invertida + if not a xor b = 1 then bien else mal end; //lógica invertida + if (not a xor not b) = 0 then bien else mal end; //lógica invertida + + ////////////////////////////////////////////////////////// + //////////////// Operaciones Mixtas // ////////////////// + ////////////////////////////////////////////////////////// + //Operaciones con la misma variable + a := 0; + a := a; + if (a=a) and (a=0) then bien else mal end; + a := 1; + a := a; + if (a=a) and (a=1) then bien else mal end; + + a := 0; + a := not a; + if (a=1) then bien else mal end; + + vbyte.bit7 := 0; + vbyte.bit7 := vbyte.bit7; + if (vbyte.bit7=vbyte.bit7) and (vbyte.bit7=0) then bien else mal end; + + vbyte.bit7 := 1; + vbyte.bit7 := vbyte.bit7; + if (vbyte.bit7=1) then bien else mal end; + + vbyte.bit7 := 0; + vbyte.bit7 := not vbyte.bit7; + if vbyte.bit7 = 1 then bien else mal end; + + //Oepraciones con dos variables + a := 0; b := 0; + if (a = 0) and (b = 0) then bien else mal end; + if (not a and not b) = 1 then bien else mal end; + + a := 1; b := 0; + if (a = 1) and (b = 0) then bien else mal end; + if (a and not b) = 1 then bien else mal end; + + + a := 0; b := 0; + if a xor b = (not a and b or not b and a) then bien else mal end; + if (not a and b or not b and a) = (a xor b) then bien else mal end; + a := 1; b := 0; + if a xor b = (not a and b or not b and a) then bien else mal end; + if (not a and b or not b and a) = (a xor b) then bien else mal end; + a := 1; b := 1; + if a xor b = (not a and b or not b and a) then bien else mal end; + if (not a and b or not b and a) = (a xor b) then bien else mal end; + +end. + diff --git a/testcode10/Simul_1/Test3_Procedure.pas b/testcode10/Simul_1/Test3_Procedure.pas new file mode 100644 index 00000000..421826e8 --- /dev/null +++ b/testcode10/Simul_1/Test3_Procedure.pas @@ -0,0 +1,65 @@ +{Rutina de verificación del funcionamiento de los procedimientos y +funciones. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + vbyte: byte; + + pinLed: bit absolute GPIO.0; + + procedure bien; + begin + pinLed := 1; + delay_ms(30); + pinLed := 0; + delay_ms(70); + end; + procedure Mal; + begin + pinLed := 1; + delay_ms(1500); + pinLed := 0; + asm SLEEP end + end; + //Procedimientos de prueba + procedure proc1; + begin + vbyte := 5; + end; + + procedure proc2(par1: byte); + begin + if par1 = 0 then + exit; + else + vbyte := 10; + end; + end; + +var + xbyte : byte; + xword : word; + xbit : bit; + xbool : boolean; +begin + SetAsOutput(pinLed); + pinLed := 0; + //Prueba de procedimiento + vbyte := 0; + Proc1; + if vbyte = 5 then bien else mal end; + + vbyte := 1; + proc2(0); + if vbyte = 1 then bien else mal end; + + proc2(1); + if vbyte = 10 then bien else mal end; + + //Falta implementar soporte para funciones + +end. diff --git a/testcode10/Simul_1/Test3_Structs1.pas b/testcode10/Simul_1/Test3_Structs1.pas new file mode 100644 index 00000000..62edaa15 --- /dev/null +++ b/testcode10/Simul_1/Test3_Structs1.pas @@ -0,0 +1,411 @@ +{Rutina de verificación del funcionamiento de las estructuras del +lenguaje. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + pinLed: bit absolute GPIO.0; + a, i, fin: byte; + b,c: boolean; + procedure bien; + begin + pinLed := 1; + delay_ms(30); + pinLed := 0; + delay_ms(70); + end; + procedure Mal; + begin + pinLed := 1; + delay_ms(1500); + pinLed := 0; + asm SLEEP end + end; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ///////////////////// IF-CONSTANTE ////////////////////// + ////////////////////////////////////////////////////////// + + if true then bien; end; + if false then mal; end; + //validación de ejecución completa de bloque + a := 0; + if true then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + //validación de no-ejecución completa de bloque + a := 0; + if false then + mal; + mal; + mal; //al fin del bloque + end; + //validación mixta + a := 0; + if true then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + else + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; end; + //validación ELSIF 1 + a := 0; + if true then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + elsif true then + mal; + mal; + elsif true then + mal; + mal; + else + mal; + mal; + end; + if a<>2 then mal; end; + //validación ELSIF 2 + a := 0; + if false then + mal; + mal; + elsif true then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + elsif true then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + else + mal; + mal; + end; + if a<>2 then mal; end; + //validación ELSIF 3 + a := 0; + if not true then + mal; + mal; + elsif not true then + mal; + mal; + else + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + + + ////////////////////////////////////////////////////////// + ///////////////////// IF-VARIABLE ////////////////////// + ////////////////////////////////////////////////////////// + b := true; + if b then bien; else mal; end; + b := false; + if b then mal; else bien; end; + //lógica invertida + b := false; + if not b then bien; else mal; end; + b := true; + if not b then mal; else bien; end; + + //validación de ejecución completa de bloque + b := true; + a := 0; + if b then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + //validación de no-ejecución completa de bloque + b := false; + if b then + mal; + mal; + mal; //al fin del bloque + end; + //validación mixta + a := 0; + b := true; + if b then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + else + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; end; + //validación ELSIF 1 + a := 0; + b := true; + if b then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + elsif b then + mal; + mal; + else + mal; + mal; + end; + if a<>2 then mal; end; + + //validación ELSIF 2 + a := 0; + b := true; + if not b then + mal; + mal; + elsif b then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + else + mal; + mal; + end; + if a<>2 then mal; end; + + //validación ELSIF 3 + a := 0; + b := true; + if not b then + mal; + mal; + elsif not b then + mal; + mal; + elsif not b then + mal; + mal; + else + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + + ////////////////////////////////////////////////////////// + ///////////////////// IF-EXPRESIÓN ////////////////////// + ////////////////////////////////////////////////////////// + b := true; c := true; + + if b and c then bien; else mal; end; + if b and not c then mal; else bien; end; + //lógica invertida + if not (b and c) then mal; else bien; end; + //optimización C a Z + if a+1>a then bien; else mal; end; + + //validación de ejecución completa de bloque + a := 0; + if b and c then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + //validación de no-ejecución completa de bloque + if b and not c then + mal; + mal; + mal; //al fin del bloque + end; + //validación mixta + a := 0; + if b and c then + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + else + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; end; + + //validación ELSIF 1 + a := 0; + if b and c then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + elsif b and c then + mal; + mal; + else + mal; + mal; + end; + if a<>2 then mal; end; + + //validación ELSIF 2 + a := 0; + b := true; + if b and not c then + mal; + mal; + elsif b and c then + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + else + mal; + mal; + end; + if a<>2 then mal; end; + //validación ELSIF 3 + a := 0; + b := true; + if not b and c then + mal; + mal; + elsif not b and c then + mal; + mal; + elsif not b and c then + mal; + mal; + else + inc(a); //al fin del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; end; + + ////////////////////////////////////////////////////////// + ///////////////////// WHILE ////////////////////// + ////////////////////////////////////////////////////////// + + //Constantes +// a := 0; !!!!! No se puede probar un lazo infinito +// while true do +// bien; +// end; + + while false do + mal; + mal; + mal; + end; + + //Variables +// b := true; !!!!! No se puede probar un lazo infinito +// while b do +// bien; +// end; + + b := false; + while false do + mal; + mal; + mal; + end; + + //Expresiones + a := 0; + while a<1 do + bien; + inc(a); + end; + if a<>1 then mal; end; + + ////////////////////////////////////////////////////////// + ///////////////////// REPEAT ////////////////////// + ////////////////////////////////////////////////////////// + a := 0; + repeat + bien; + inc(a); + until true; + if a<>1 then mal; end; + +// a := 0; +// repeat +// bien; +// inc(a); +// until false; + + //Variables + a := 0; + b := true; + repeat + bien; + inc(a); + until b; + if a<>1 then mal; end; + + //Expresiones + a := 0; + repeat + bien; + inc(a); + until a>1; + if a<>2 then mal; end; + + ////////////////////////////////////////////////////////// + ///////////////////////// FOR ////////////////////////// + ////////////////////////////////////////////////////////// + //Constante, una iteración + i := 0; + a := 0; + for i:=0 to 0 do + bien; + inc(a); + end; + if a<>1 then mal; end; + //Constante, varias iteraciones + i := 0; + a := 0; + for i:=0 to 3 do + bien; + inc(a); + end; + if a<>4 then mal; end; + //Constante, sin iteraciones + i := 0; + a := 0; + for i:=1 to 0 do + bien; + inc(a); + end; + if a<>0 then mal; end; + //Variable, una iteración + i := 0; fin := 0; + a := 0; + for i:=0 to fin do + bien; + inc(a); + end; + if a<>1 then mal; end; + //Variable, varias iteraciones + i := 0; fin := 3; + a := 0; + for i:=0 to fin do + bien; + inc(a); + end; + if a<>4 then mal; end; + +end. + diff --git a/testcode10/Simul_1/Test3_Structs2.pas b/testcode10/Simul_1/Test3_Structs2.pas new file mode 100644 index 00000000..b0ca69c6 --- /dev/null +++ b/testcode10/Simul_1/Test3_Structs2.pas @@ -0,0 +1,173 @@ +{Rutina de verificación del funcionamiento de las estructuras del +lenguaje, en modo de compatibilidad. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +{$Mode Pascal} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + pinLed: bit absolute GPIO.0; + a: byte; + b,c: boolean; + procedure bien; + begin + pinLed := 1; + delay_ms(30); + pinLed := 0; + delay_ms(70); + end; + procedure Mal; + begin + pinLed := 1; + delay_ms(1500); + pinLed := 0; + asm SLEEP end + end; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ///////////////////// IF-CONSTANTE ////////////////////// + ////////////////////////////////////////////////////////// + + if true then bien; + if false then mal; + //validación de ejecución completa de bloque + a := 0; + if true then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; + //validación mixta + a := 0; + if true then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end else begin + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; + + ////////////////////////////////////////////////////////// + ///////////////////// IF-VARIABLE ////////////////////// + ////////////////////////////////////////////////////////// + b := true; + if b then bien else mal; + b := false; + if b then mal else bien; + + //validación de ejecución completa de bloque + b := true; + a := 0; + if b then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; + //validación de no-ejecución completa de bloque + b := false; + if b then begin + mal; + mal; + mal; //al fin del bloque + end; + //validación mixta + a := 0; + b := true; + if b then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end else begin + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; + + ////////////////////////////////////////////////////////// + ///////////////////// IF-EXPRESIÓN ////////////////////// + ////////////////////////////////////////////////////////// + b := true; c := true; + + if b and c then bien else mal; + if b and not c then mal else bien; + //lógica invertida + if not (b and c) then mal else bien; + //optimización C a Z + if a+1>a then bien else mal; + + //validación de ejecución completa de bloque + a := 0; + if b and c then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end; + if a<>2 then mal; + //validación de no-ejecución completa de bloque + if b and not c then begin + mal; + mal; + mal; //al fin del bloque + end; + //validación mixta + a := 0; + if b and c then begin + inc(a); //al inicio del bloque + bien; + inc(a); //al fin del bloque + end else begin + mal; + inc(a); //al fin del bloque + mal; //al fin del bloque + end; + if a<>2 then mal; + + ////////////////////////////////////////////////////////// + ///////////////////// WHILE ////////////////////// + ////////////////////////////////////////////////////////// + + //Constantes +// a := 0; !!!!! No se puede probar un lazo infinito +// while true do begin +// bien; +// end; + + while false do begin + mal; + mal; + mal; + end; + + //Variables +// b := true; !!!!! No se puede probar un lazo infinito +// while b do begin +// bien; +// end; + + b := false; + while false do begin + mal; + mal; + mal; + end; + + //Expresiones + a := 0; + while a<1 do begin + bien; + inc(a); + end; + if a<>1 then mal; + +end. diff --git a/testcode10/Simul_1/Test4_Asm.pas b/testcode10/Simul_1/Test4_Asm.pas new file mode 100644 index 00000000..4e137bf2 --- /dev/null +++ b/testcode10/Simul_1/Test4_Asm.pas @@ -0,0 +1,189 @@ +{Rutina de verificación de las rutinas en ensamblador.} +{$Mode Pascal} +uses PIC10F202; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + pinLed: bit absolute GPIO.0; + vbyte: byte; + vword: word; + vbool: boolean; + vbit: bit; +var + abyte: byte absolute $20; +const + CBYTE = 3; + + procedure bien; + begin + pinLed := 1; + delay_ms(30); + pinLed := 0; + delay_ms(70); + end; + procedure Mal; + begin + pinLed := 1; + delay_ms(1500); + pinLed := 0; + asm SLEEP end + end; + +// //Función para prueba de lectura y devolución de valores +// procedure SetTo8040: word; //Devuelve $8040 +// begin +// asm +// ;El resultado de un word, se devuelve en _H (parte alta) y W (parte baja) +// MOVLW $80 +// MOVWF _H +// MOVLW $40 +// end +// end; +// +// procedure Multiplicar (multiplicando, multiplicador : byte) : word; +// var +// resultado: word; +// begin +// ASM +// ;Inicializacion de Registros +// BCF STATUS_RP0 ; RP0=0 / Trabajamos en el Banco de memoria 0. +// CLRF resultado.LOW ; Limpia el byte bajo de la variable global resultado. +// CLRF resultado.HIGH ; Limpia el byte alto de la variable global resultado. +// CLRF _H +// ;Comprueba multiplicacion por cero. +// MOVLW $00 +// SUBWF multiplicador,W +// BTFSC STATUS_Z +// GOTO MULT_FIN ; Si multiplicador = 0 entonces acabar. +// ;LOOP de multiplicacion +// MULT_LOOP: +// MOVF multiplicando,W ; Carga el multiplicador en el registro W. +// ADDWF resultado.LOW,F ; Suma el valor de multiplicando al byte bajo de la variable global resultado +// BTFSC STATUS_C ; Comprueba el bit CARRY del registro STATUS. +// INCF resultado.HIGH,F ; Si CARRY es 0 resultado.LOW se ha desbordado se incrementa resultado.HIGH +// DECFSZ multiplicador,F ; Decrementa multiplicador y comprueba si ha llegado a cero. +// GOTO MULT_LOOP ; nuevo paso del bucle de multiplicacion. +// MULT_FIN: +// END +// exit(resultado); +// end; + +begin + SetAsOutput(pinLed); + pinLed := 0; + +asm + ;Opcode test + ADDWF vbyte, w + ANDWF vbyte, w + CLRF vbyte + CLRW + COMF vbyte, f + DECF vbyte, f + INCF vbyte, w + + ;test jumps + DECFSZ vbyte, w + NOP + INCFSZ vbyte, w + NOP + + IORWF vbyte, w + MOVF vbyte, w + MOVWF vbyte + RLF vbyte, w + RRF vbyte, w + SUBWF vbyte, w + SWAPF vbyte, w + XORWF vbyte, w + BCF vbyte, 0 + BSF vbyte, 0 + BTFSC vbyte, 0 + NOP + BTFSS vbyte, 0 + NOP + ANDLW 0 + ;CALL + CLRWDT + GOTO $+1 + IORLW 0 + MOVLW 0 + ;RETFIE + ;RETLW + ;RETURN + ;SLEEP + XORLW 0 +end + //variable asigment + abyte := 66; + asm + MOVLW 65 + MOVWF $20 ;absolute address + end + if abyte = 65 then bien else mal; + + vbyte := 0; + asm + MOVLW 5 + MOVWF vbyte + end + if vbyte = 5 then bien else mal; + + vbool := false; + asm BSF vbool end + if vbool then bien else mal; + + vbit := 1; + asm BCF vbit end + if vbit=0 then bien else mal; + + vbit := 1; + asm + BTFSC vbit + BCF vbit + end + if vbit=0 then bien else mal; + + //constant access + vbyte := 0; + asm + MOVLW CBYTE + MOVWF vbyte + end + if vbyte = CBYTE then bien else mal; + + vbyte := 0; + asm + BSF vbyte, CBYTE + end + if vbyte = 8 then bien else mal; + + //jumps + asm + GOTO $+2 + SLEEP ;stop if not jump + end + + vbyte := 10; + asm + DECFSZ vbyte, f + GOTO $-1 + end + if vbit=0 then bien else mal; + + vbyte := 10; + asm + label1: + DECFSZ vbyte, f + GOTO label1 + end + if vbit=0 then bien else mal; + asm org $ end + vbit := 1; + +// vword := SetTo8040; +// if vword = $8040 then bien else mal; +// +// vword := multiplicar(5,10); +// if vword = word(50) then bien else mal; +end. diff --git a/testcode10/Simul_1/output.hex b/testcode10/Simul_1/output.hex new file mode 100644 index 00000000..be2180e4 --- /dev/null +++ b/testcode10/Simul_1/output.hex @@ -0,0 +1,22 @@ +:020000040000FA +:100000001F0A6A002B00AA02AB02EB02080AEA02EE +:100010000A0A0008FA0C2C000000EC020C0A050A7F +:1000200006051E0C01090604460C01090008060518 +:10003000050C2A00DC0C0209060403000008FE0C73 +:1000400006000604C8014801680040006802E80094 +:100050008802C8020000C803000008010802280046 +:100060004803080388008803880108040805080677 +:10007000000008070000000E04003E0A000D000CFE +:10008000000F420C2000410C2000410C800043076F +:100090004B0A10094C0A17096800050C2800050CCA +:1000A00088004307550A1009560A1709090409056B +:1000B00009075C0A10095D0A1709290529042906A0 +:1000C000630A1009640A1709290529062904290663 +:1000D0006B0A10096C0A17096800030C2800030C4E +:1000E00088004307750A1009760A17096800680531 +:1000F000080C880043077E0A10097F0A1709810A45 +:1001000003000A0C2800E802830A2906890A10095C +:100110008A0A17090A0C2800E8028C0A2906920AA2 +:0A0120001009930A170929050300CE +:00000001FF +;PIC10F202 diff --git a/TestCode/Simul_2/Last Loaded Test2.DBK b/testcode10/Simul_2/Last Loaded Test2.DBK similarity index 96% rename from TestCode/Simul_2/Last Loaded Test2.DBK rename to testcode10/Simul_2/Last Loaded Test2.DBK index 6f2a92d3..83781928 100644 Binary files a/TestCode/Simul_2/Last Loaded Test2.DBK and b/testcode10/Simul_2/Last Loaded Test2.DBK differ diff --git a/TestCode/Simul_3/Readme.txt b/testcode10/Simul_2/Readme.txt similarity index 100% rename from TestCode/Simul_3/Readme.txt rename to testcode10/Simul_2/Readme.txt diff --git a/testcode10/Simul_2/Test1_SystemFunc1.pas b/testcode10/Simul_2/Test1_SystemFunc1.pas new file mode 100644 index 00000000..e6f46b56 --- /dev/null +++ b/testcode10/Simul_2/Test1_SystemFunc1.pas @@ -0,0 +1,143 @@ +{Test code for validation of Variable declarations and Function Systems.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var //simple type declarations + vbit: bit; + vbool: boolean; + vchar: char; + vbyte: byte; + vword: word; + vdword: dword; +begin + SetAsOutput(pinLed); + + /////////////////////////////////////////////////// + ///// System Function + /////////////////////////////////////////////////// + + /////// Inc() procedure + vchar := #0; + vbyte := 0; + vword := 0; + vdword := 0; + Inc(vchar ); if vchar = #1 then good else bad end; + Inc(vbyte ); if vbyte = 1 then good else bad end; + Inc(vword ); if vword = word(1) then good else bad end; + Inc(vdword); if vdword = dword(1) then good else bad end; + + vword := $FF; + Inc(vword ); if vword = $100 then good else bad end; + vdword := $FFFF; + Inc(vdword); if vdword = $10000 then good else bad end; + + /////// Dec() procedure + vchar := #0; + vbyte := 0; + vword := 0; + vdword := 0; + Dec(vchar ); if vchar = #255 then good else bad end; + Dec(vbyte ); if vbyte = $FF then good else bad end; + Dec(vword ); if vword = $FFFF then good else bad end; + Dec(vdword); if vdword = $FFFFFFFF then good else bad end; + + vword := $100; + Dec(vword ); if vword = word($FF) then good else bad end; + vdword := $10000; + Dec(vdword); if vdword = dword($FFFF) then good else bad end; + + /////// Ord() function + vchar := 'A'; + vbyte := Ord(vchar); + if vbyte = 65 then good else bad end; + vbyte := Ord('B'); + if vbyte = 66 then good else bad end; + vbyte := 34+Ord('B'); + if vbyte = 100 then good else bad end; + vbyte := (vbyte + 1)+Ord('A'); + if vbyte = 166 then good else bad end; + + + /////// Chr() function + vbyte := 65; + vchar := Chr(vbyte); + if vchar = 'A' then good else bad end; + vchar := Chr(66); + if vchar = 'B' then good else bad end; + vbyte := 1; + vchar := Chr(65+vbyte); + if vchar = 'B' then good else bad end; + + /////// Bit() function + vbit := bit(65); + if vbit = 1 then good else bad end; + vbit := bit(0); + if vbit = 0 then good else bad end; + + vbyte := 65; + vbit := bit(vbyte); + if vbit = 1 then good else bad end; + + vbyte := 0; + vbit := bit(vbyte); + if vbit = 0 then good else bad end; + vbit := bit(vbyte+1); + if vbit = 1 then good else bad end; + if bit(2) and 1 = 1 then good else bad end; + + vbool := true; + if bit(vbool) = 1 then good else bad end; + if bit(not vbool) = 0 then good else bad end; + if bit(not vbool) and bit(vbool) = 0 then good else bad end; + if bit(not vbool) or bit(vbool) = 1 then good else bad end; + + /////// Boolean() function + vbool := boolean(65); + if vbool then good else bad end; + vbool := boolean(0); + if not vbool then good else bad end; + + vbyte := 65; + vbool := boolean(vbyte); + if vbool then good else bad end; + + vbyte := 0; + vbool := boolean(vbyte); + if not vbool then good else bad end; + vbool := boolean(vbyte+1); + if vbool then good else bad end; + if boolean(2) and true then good else bad end; + + vbit := 1; + if boolean(vbit) then good else bad end; + if not boolean(not vbit) then good else bad end; + if not (boolean(not vbit) and boolean(vbit) ) then good else bad end; + if boolean(not vbit) or boolean(vbit) then good else bad end; + + /////// Byte() function + vbyte := byte(65); //byte of byte + if vbyte = 65 then good else bad end; + vbyte := byte('A'); //byte of char + if vbyte = 65 then good else bad end; + vbyte := byte($FFFF); //byte of word + if vbyte = $FF then good else bad end; + + vbit := 0; + if byte(vbit) = 0 then good else bad end; + vbit := 1; + if byte(vbit)+1 = 2 then good else bad end; + + vbit := 1; + if byte(vbit and 0) = 0 then good else bad end; + + vbyte := 10; + if byte(vbyte) = 10 then good else bad end; + vbyte := 10; + if byte(vbyte+5) = 15 then good else bad end; + + vchar := '0'; + if byte(vchar) = 48 then good else bad end; + + +end. + diff --git a/testcode10/Simul_2/Test1_SystemFunc2.pas b/testcode10/Simul_2/Test1_SystemFunc2.pas new file mode 100644 index 00000000..d1a3cd0e --- /dev/null +++ b/testcode10/Simul_2/Test1_SystemFunc2.pas @@ -0,0 +1,91 @@ +{Test code for validation of Variable declarations and Function Systems.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var //simple type declarations + vbit: bit; + vbool: boolean; + vchar: char; + vbyte: byte; + vword: word; + vdword: dword; +begin + SetAsOutput(pinLed); + + /////////////////////////////////////////////////// + ///// System Function + /////////////////////////////////////////////////// + + /////// Byte() function + vword := $0102; + if byte(vword) = 2 then good else bad end; + if byte(vword+1) = 3 then good else bad end; + + vdword := $01020304; + if byte(vdword) = 4 then good else bad end; + if byte(vdword+dword(1)) = 5 then good else bad end; + + /////// Word() function + vword := word(65); //word of byte + if vword = word(65) then good else bad end; + vword := word('A'); //word of char + if vword = word(65) then good else bad end; + vword := word($FFFF); //word of word + if vword = $FFFF then good else bad end; + vword := word($01020304); //word of dword + if vword = $0304 then good else bad end; + + vbyte := 65; + if word(vbyte) = word(65) then good else bad end; + if word(vbyte+1) = word(66) then good else bad end; + vchar := 'A'; //word of char + if word(vchar) = word(65) then good else bad end; + vword := $FFFF; //word of word + if word(vword) = $FFFF then good else bad end; + if word(vword+1) = word(0) then good else bad end; + vdword := $01020304; //word of dword + if word(vdword) = $0304 then good else bad end; + if word(vdword+dword(1)) = $0305 then good else bad end; + + /////// DWord() function + vdword := dword(65); //dword of byte + if vdword = dword(65) then good else bad end; + vdword := dword('A'); //dword of char + if vdword = dword(65) then good else bad end; + vdword := dword($FFFF); //dword of word + if vdword = dword($FFFF) then good else bad end; + vdword := dword($01020304); //dword of dword + if vdword = $01020304 then good else bad end; + + vbyte := 65; + if dword(vbyte) = dword(65) then good else bad end; + if dword(vbyte+1) = dword(66) then good else bad end; + vchar := 'A'; //dword of char + if dword(vchar) = dword(65) then good else bad end; + vword := $FFFF; //dword of word + if dword(vword) = dword($FFFF) then good else bad end; + if dword(vword+1) = dword(0) then good else bad end; + +//Funciones comentadas por falta de memoria Flash + +// vdword := $01020304; //dword of dword +// if dword(vdword) = $01020304 then good else bad end; +// if dword(vdword+dword(1)) = $01020305 then good else bad end; +// +// /////// SetAsInput() function +// {Cuidado que esto puede fallar en Proteus, porque parece que no maneja +// bien los bits no implementados, y puede leer $FF u otro valor en TRISA} +//// SetAsInput(PORTA); +//// if TRISA = $3F then good else bad end; +// +// SetAsInput(PORTB); +// if TRISB = $FF then good else bad end; +// +// /////// SetAsOutput() function +// SetAsOutput(PORTA); +// if TRISA = 0 then good else bad end; +// SetAsOutput(PORTB); +// if TRISB = 0 then good else bad end; + +end. + diff --git a/TestCode/Simul_2/Test2.DSN b/testcode10/Simul_2/Test2.DSN similarity index 96% rename from TestCode/Simul_2/Test2.DSN rename to testcode10/Simul_2/Test2.DSN index 06017bff..c3395574 100644 Binary files a/TestCode/Simul_2/Test2.DSN and b/testcode10/Simul_2/Test2.DSN differ diff --git a/TestCode/Simul_2/Test2.PWI b/testcode10/Simul_2/Test2.PWI similarity index 65% rename from TestCode/Simul_2/Test2.PWI rename to testcode10/Simul_2/Test2.PWI index a21476f2..2d6d27b9 100644 Binary files a/TestCode/Simul_2/Test2.PWI and b/testcode10/Simul_2/Test2.PWI differ diff --git a/TestCode/Simul_3/Last Loaded Test1.DBK b/testcode10/Simul_2/Test2_16f57.DSN similarity index 95% rename from TestCode/Simul_3/Last Loaded Test1.DBK rename to testcode10/Simul_2/Test2_16f57.DSN index 6178d395..c3395574 100644 Binary files a/TestCode/Simul_3/Last Loaded Test1.DBK and b/testcode10/Simul_2/Test2_16f57.DSN differ diff --git a/testcode10/Simul_2/Test2_16f57.PWI b/testcode10/Simul_2/Test2_16f57.PWI new file mode 100644 index 00000000..2d6d27b9 Binary files /dev/null and b/testcode10/Simul_2/Test2_16f57.PWI differ diff --git a/TestCode/Simul_2/Test5_Bank.pas b/testcode10/Simul_2/Test2_Bank.pas similarity index 88% rename from TestCode/Simul_2/Test5_Bank.pas rename to testcode10/Simul_2/Test2_Bank.pas index be8163c1..848e0048 100644 --- a/TestCode/Simul_2/Test5_Bank.pas +++ b/testcode10/Simul_2/Test2_Bank.pas @@ -1,9 +1,7 @@ {Programa para la verifiación del manejo de bancos RAM.} -{$PROCESSOR PIC16C63} -{$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} -uses PIC16C63, //Se requiere un MCU con más de un banco - UnitTest; +uses PIC16F877A, UnitTest; +{$FREQUENCY 8Mhz} var a0: byte; //At bank 0 b0: byte; //At bank 0 diff --git a/TestCode/Simul_3/Test3.PWI b/testcode10/Simul_2/Test3.PWI similarity index 100% rename from TestCode/Simul_3/Test3.PWI rename to testcode10/Simul_2/Test3.PWI diff --git a/testcode10/Simul_2/Test3_Byte1.pas b/testcode10/Simul_2/Test3_Byte1.pas new file mode 100644 index 00000000..e85eb45d --- /dev/null +++ b/testcode10/Simul_2/Test3_Byte1.pas @@ -0,0 +1,158 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test2.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + //Pruebas con IF + if true then good else bad end; + if false then bad else good end; + + ////////////////////////////////////////////////////////// + ////////////// Operación Igualdad /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 0 = 0 then good else bad end; + if 0 = 1 then bad else good end; + if 255 = 255 then good else bad end; + if 0 <> 0 then bad else good end; + if 255 <> 0 then good else bad end; + + //coConst_Variab + a := 10; + if 10 = a then good else bad end; + if 0 = a then bad else good end; + if 10 <> a then bad else good end; + a := 255; + if 255 = a then good else bad end; + + //coVariab_Const + a := 10; + if a = 10 then good else bad end; + if a = 0 then bad else good end; + if a <> 10 then bad else good end; + if a = 5+5 then good else bad end; + + //coVariab_Variab + a := 0; + b := 255; + if a = a then good else bad end; + if a = b then bad else good end; + if a <> a then bad else good end; + a := 255; + if a = a then good else bad end; + if a = b then good else bad end; + if a <> a then bad else good end; + + //coConst_Expres + a := 0; + if 11 = a+11 then good else bad end; + + //coExpres_Const + if a+255 = 255 then good else bad end; + + //coVariab_Variab + a:= 255; b := 255; + if a = b then good else bad end; + + //coExpres_Expres + a := 10; + if a+1 = a+1 then good else bad end; + if a+1 = a+2 then bad else good end; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Mayor ///////////////////// + ////////////////////////////////////////////////////////// + + //Constante + if 0 > 0 then bad else good end; + if 0 > 1 then bad else good end; + if 255 > 0 then good else bad end; + if 255 > 15 then good else bad end; + if 255 > 255 then bad else good end; + + //Variables + a := 1; b := 255; + if a > a then bad else good end; + if a > b then bad else good end; + if b > b then bad else good end; + if b > a then good else bad end; + + a := 0; b := 255; + if a > a then bad else good end; + if a > b then bad else good end; + if b > b then bad else good end; + if b > a then good else bad end; + + a := 0; b := 1; + if a > a then bad else good end; + if a > b then bad else good end; + if b > b then bad else good end; + if b > a then good else bad end; + + a := 0; b := 0; + if a > a then bad else good end; + if a > b then bad else good end; + if b > b then bad else good end; + if b > a then bad else good end; + + a := 255; b := 255; + if a > a then bad else good end; + if a > b then bad else good end; + if b > b then bad else good end; + if b > a then bad else good end; + + //Variables - constantes + a := 1; + if a > 0 then good else bad end; + if a > 1 then bad else good end; + if a > 255 then bad else good end; + if 0 > a then bad else good end; + if 1 > a then bad else good end; + if 2 > a then good else bad end; + if 255 > a then good else bad end; + + //Expresiones + a := 10; + if 0 > a-10 then bad else good end; + if 0 > a+1 then bad else good end; + if 11 > a+1 then bad else good end; + if 12 > a+1 then good else bad end; + if 255 > a+1 then good else bad end; + + a := 10; + if a+1 > 0 then good else bad end; + if a+1 > 10 then good else bad end; + if a+1 > 11 then bad else good end; + if a+1 > 12 then bad else good end; + if a+1 > 255 then bad else good end; + + if a > a+1 then bad else good end; + if a+1 > a then good else bad end; + + if a+1 > a+2 then bad else good end; + +//Código comentado por falta de espacio +// if a+1 > a+1 then bad else good end; +// if a+2 > a+1 then good else bad end; +// +// ////////////////////////////////////////////////////////// +// ///////////////////// FIN DE PRUEBAS /////////////////// +// ////////////////////////////////////////////////////////// +// pinLed := 0; +// delay_ms(50); +// pinLed := 1; +// delay_ms(70); +// pinLed := 0; +end. diff --git a/testcode10/Simul_2/Test3_Byte2.pas b/testcode10/Simul_2/Test3_Byte2.pas new file mode 100644 index 00000000..a2c3bb3a --- /dev/null +++ b/testcode10/Simul_2/Test3_Byte2.pas @@ -0,0 +1,160 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test2.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Menor ///////////////////// + ////////////////////////////////////////////////////////// + {Las pruebas para las operaciones "menor que", no son tan exigentes porque + se generan a partir de "mayor que"} + + //Constante + if 0 < 0 then bad else good end; + if 0 < 1 then good else bad end; + if 255 < 0 then bad else good end; + + //Variables + a := 0; b := 0; + if a < a then bad else good end; + if a < b then bad else good end; + if b < a then bad else good end; + + a := 255; b := 255; + if a < a then bad else good end; + if a < b then bad else good end; + if b < a then bad else good end; + + //Variables - constantes + a := 1; + if a < 0 then bad else good end; + if a < 1 then bad else good end; + if a < 255 then good else bad end; + if 0 < a then good else bad end; + if 255 < a then bad else good end; + + //Expresiones + a := 10; + if a < a+1 then good else bad end; + if a+1 < a then bad else good end; + + if a+1 < a+2 then good else bad end; + if a+1 < a+1 then bad else good end; + if a+2 < a+1 then bad else good end; + + ////////////////////////////////////////////////////////// + /////////////// Operación Mayor/Menor o igual /////////// + ////////////////////////////////////////////////////////// + {Estas operaciones, son aún menos exigentes, porque son negaciones + de las operaciones base} + + if 5>=4 then good else bad end; + if 5>=5 then good else bad end; + if 5>=6 then bad else good end; + + a := 5; b := 6; + if a >= a then good else bad end; + if a >= b then bad else good end; + if b >= a then good else bad end; + + if a <= a then good else bad end; + if a <= 6 then good else bad end; + if a <= 4 then bad else good end; + + ////////////////////////////////////////////////////////// + ///////////////////// Operación AND ///////////////////// + ////////////////////////////////////////////////////////// + a := $FF; b:=$0F; + //coConst_Variab + if $00 and a = 0 then good else bad end; + if $FF and b = $0F then good else bad end; + //coConst_Expres + if $FF and (b+1) = $10 then good else bad end; + //coVariab_Const + if b and $01 = $01 then good else bad end; + //coVariab_Variab + if a and b = $0F then good else bad end; + //coVariab_Expres + if a and (b+1) = $10 then good else bad end; + //coExpres_Const + if (b+1) and $0F = $0 then good else bad end; + //coExpres_Variab + if (b+1) and a = $10 then good else bad end; + //coExpres_Expres + if (b+1) and (a+1) = $00 then good else bad end; + + ////////////////////////////////////////////////////////// + ///////////////////// Operación OR ///////////////////// + ////////////////////////////////////////////////////////// + a := $FF; b:=$0F; + //coConst_Variab + if $00 or a = $FF then good else bad end; + if $00 or b = $0F then good else bad end; + //coConst_Expres + if $00 or (b+1) = $10 then good else bad end; + //coVariab_Const + if b or $01 = $0F then good else bad end; + //coVariab_Variab + if a or b = $FF then good else bad end; + //coVariab_Expres + if a or (b+1) = $FF then good else bad end; + //coExpres_Const + if (b+1) or $0F = $1F then good else bad end; + //coExpres_Variab + if (b+1) or b = $1F then good else bad end; + //coExpres_Expres + if (b+1) or (a+1) = $10 then good else bad end; + + ////////////////////////////////////////////////////////// + ///////////////////// Operación XOR ///////////////////// + ////////////////////////////////////////////////////////// + a := $FF; b:=$0F; + //coConst_Variab + if $00 xor a = $FF then good else bad end; + if $00 xor b = $0F then good else bad end; + //coConst_Expres + if $00 xor (b+1) = $10 then good else bad end; + //coVariab_Const + if b xor $01 = $0E then good else bad end; + //coVariab_Variab + if a xor b = $F0 then good else bad end; + //coVariab_Expres + if a xor (b+1) = $EF then good else bad end; + //coExpres_Const + if (b+1) xor $0F = $1F then good else bad end; + //coExpres_Variab + if (b+1) xor b = $1F then good else bad end; + //coExpres_Expres + if (b+1) xor (a+1) = $10 then good else bad end; + + ////////////////////////////////////////////////////////// + ///////////////////// Operación NOT ///////////////////// + ////////////////////////////////////////////////////////// + a := $FF; + //coConst + if not $00 = $FF then good else bad end; + if not $0F = $F0 then good else bad end; + //coConst + if not a = $00 then good else bad end; + + + ////////////////////////////////////////////////////////// + ///////////////////// FIN DE PRUEBAS /////////////////// + ////////////////////////////////////////////////////////// + pinLed := 0; + delay_ms(50); + pinLed := 1; + delay_ms(70); + pinLed := 0; +end. diff --git a/testcode10/Simul_2/Test3_Byte3.pas b/testcode10/Simul_2/Test3_Byte3.pas new file mode 100644 index 00000000..9621f63a --- /dev/null +++ b/testcode10/Simul_2/Test3_Byte3.pas @@ -0,0 +1,81 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test2.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + /////////////////// Desplaz. Derecha //////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if 1>>0 = 1 then good else bad end; + if 2>>2 = 0 then good else bad end; + //coVariab_Const + a := $ff; + if a>>0 = $ff then good else bad end; + if a>>1 = $7f then good else bad end; + if a>>2 = $3f then good else bad end; + if a>>3 = $1f then good else bad end; + if a>>7 = $1 then good else bad end; + if a>>8 = $0 then good else bad end; + //coVariab_Variab + a := $ff; + b := 0; + if a>>b = $ff then good else bad end; + b := 1; + if a>>b = $7f then good else bad end; + b := 8; + if a>>b = $0 then good else bad end; + //coExpres_Const + a := $80; + if (a+8)>>1 = $44 then good else bad end; + if (a+8)>>2 = $22 then good else bad end; + if (a+8)>>3 = $11 then good else bad end; + if (a+8)>>4 = $08 then good else bad end; + if (a+8)>>5 = $04 then good else bad end; + + ////////////////////////////////////////////////////////// + ////////////////// Desplaz. Izquierda /////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if 1<<0 = 1 then good else bad end; + if 2<<2 = 8 then good else bad end; + + //coVariab_Const + a := $01; + if a<<0 = $01 then good else bad end; + if a<<1 = $02 then good else bad end; + if a<<2 = $04 then good else bad end; + if a<<3 = $08 then good else bad end; + if a<<7 = $80 then good else bad end; + if a<<8 = $00 then good else bad end; + + //coVariab_Variab + a := $01; + b := 0; + if a<<b = $01 then good else bad end; + b := 1; + if a<<b = $02 then good else bad end; + b := 8; + if a<<b = $00 then good else bad end; + + //coExpres_Const + a := $02; + if (a+1)<<1 = $06 then good else bad end; + if (a+1)<<2 = $0C then good else bad end; + if (a+1)<<3 = $18 then good else bad end; + if (a+1)<<4 = $30 then good else bad end; +//Prueba eliminada por falta de espacio +// if (a+1)<<5 = $60 then good else bad end; + +end. diff --git a/testcode10/Simul_2/Test3_Byte4.pas b/testcode10/Simul_2/Test3_Byte4.pas new file mode 100644 index 00000000..35af96ae --- /dev/null +++ b/testcode10/Simul_2/Test3_Byte4.pas @@ -0,0 +1,129 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test2.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + //////////////////////// Suma ///////////////////////// + ////////////////////////////////////////////////////////// + + //Constante + if 0 + 0 = 0 then good else bad end; + if 0 + 1 = 0 then bad else good end; + if 255 + 0 = 255 then good else bad end; + + //Variables + a := 0; + b := 255; + if a + a = 0 then good else bad end; + if a + b = 255 then good else bad end; + if b + a = 255 then good else bad end; + if a + b = b then good else bad end; + + a := 1; + b := 254; + if a + b = 255 then good else bad end; + + //Variables - constantes + a := 0; + if a + 0 = 0 then good else bad end; + if 0 + a = 0 then good else bad end; + if a + 1 = 1 then good else bad end; + if 1 + a = 1 then good else bad end; + if a + 255 = 255 then good else bad end; + if 255 + a = 255 then good else bad end; + + a := 1; + if a + 0 = 1 then good else bad end; + if 0 + a = 1 then good else bad end; + if a + 1 = 2 then good else bad end; + if 1 + a = 2 then good else bad end; + if a + 254 = 255 then good else bad end; + if 254 + a = 255 then good else bad end; + + //Expresiones + a := 10; b := 5; + if a = b+5 then good else bad end; + if a + b = 15 then good else bad end; + if (a + b) + 1 = 16 then good else bad end; + if b + a = 15 then good else bad end; + if 15 = b + a then good else bad end; + if a + b = a + 5 then good else bad end; + if a + (b+a) = a + (a + 5) then good else bad end; + if a + (b+ (a+b)) = a + (a + a) then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////////// Resta ///////////////////////// + ////////////////////////////////////////////////////////// + + //Constante + if 0 - 0 = 0 then good else bad end; + if 1 - 0 = 0 then bad else good end; + if 255 - 0 = 255 then good else bad end; + + //Variables + a := 255; b := 0; + if a - a = 0 then good else bad end; + if a - a = b then good else bad end; + if b - b = b then good else bad end; + if a - b = 255 then good else bad end; + if a - b = a then good else bad end; + + a := 255; b := 1; + if b - b = 0 then good else bad end; + if a - b = 254 then good else bad end; + + a := 1; b := 0; + if a - b = 1 then good else bad end; + if a - b = a then good else bad end; + + a := 10; b := 5; + if a - b = b then good else bad end; + if a - b = 5 then good else bad end; + + //Variables - constantes + a := 0; + if a - 0 = 0 then good else bad end; + if 0 - a = 0 then good else bad end; + if a - 0 = a then good else bad end; + a := 1; + if a - 1 = 0 then good else bad end; + if 1 - a = 0 then good else bad end; + if 255 - a = 254 then good else bad end; + if 10 - a = 9 then good else bad end; + a := 255; + if a - 1 = 254 then good else bad end; + if 255 - a = 0 then good else bad end; + if a - 10 = 245 then good else bad end; + + //Expresiones + a := 10; b := 5; + if 10 - (b+1) = 4 then good else bad end; //constante - expresión + if a - (b+1) = 4 then good else bad end; //variable - expresión + if (a+1) - 1 = 10 then good else bad end; //expresión - constante + if (a+1) - 0 = 11 then good else bad end; //expresión - constante + if (a+1) - a = 1 then good else bad end; //expresión - variable + //Pruebas eliminadas por falta de espacio +// if (a+1) - (b+1) = 5 then good else bad end; //expresión - expresión +// if a - b = a - b then good else bad end; +// if a - b - 1 = 4 then good else bad end; +// if a - b - 1 = b - 1 then good else bad end; +// if 5 = a - b then good else bad end; +// if a - 5 = a - b then good else bad end; +// if b + (a-b) = a then good else bad end; +// if a = b + (a-b) then good else bad end; +// if a + (b+ (a-b)) = a + (a - b + 5) then good else bad end; +// + +end. diff --git a/testcode10/Simul_2/Test3_Byte5.pas b/testcode10/Simul_2/Test3_Byte5.pas new file mode 100644 index 00000000..319f0730 --- /dev/null +++ b/testcode10/Simul_2/Test3_Byte5.pas @@ -0,0 +1,161 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test2.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + //////////////////// Mult 8 bits->16 /////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if 0 * 0 = 0 then good else bad end; + if 0 * 1 = 0 then good else bad end; + if 255 * 0 = 0 then good else bad end; + if 5 * 5 = 25 then good else bad end; + + //coConst_Variab + a := 0; + if 5 * a = word(0) then good else bad end; + a := 5; + if word(0 * a) = word(0) then good else bad end; + if 5 * a = word(25) then good else bad end; + //coConst_Expres + a := 5; + if 0 * (a+1) = word(0) then good else bad end; + if 5 * (a+1) = word(30) then good else bad end; + //coVariab_Const + a := 5; + if a * 0 = word(0) then good else bad end; + if a * 5 = word(25) then good else bad end; + //coVariab_Variab + a := 5; b := 0; + if a * b = word(0) then good else bad end; + a := 5; b := 100; + if a * b = 500 then good else bad end; + //coVariab_Expres + a := 10; b := 10; + if a * (b+1) = word(110) then good else bad end; + //coExpres_Const + a := 19; + if (a+1) * 5 = word(100) then good else bad end; + //coExpres_Variab + a := 19; b := 100; + if (a+1) * b = 2000 then good else bad end; + //coExpres_Expres + a := 10; b := 10; + if (a+1) * (b+1) = word(121) then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////// 8 Div 8 -> 8 /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 0 div 1 = 0 then good else bad end; + if 5 div 255 = 0 then good else bad end; + if 25 div 5 = 5 then good else bad end; + + //coConst_Variab + a := 0; + if 0 div a = 0 then good else bad end; + a := 1; + if 1 div a = 1 then good else bad end; + a := 2; + if 1 div a = 0 then good else bad end; + a := 50; + if 100 div a = 2 then good else bad end; + a := 0; //Entre cero + if 255 div a = 255 then good else bad end; + + //coConst_Expres + a := 5; + if 0 div (a+1) = 0 then good else bad end; + if 6 div (a+1) = 1 then good else bad end; + //coVariab_Const + a := 25; + if a div 5 = 5 then good else bad end; + if a div 6 = 4 then good else bad end; + //coVariab_Variab + a := 255; b := 50; + if a DIV b = 5 then good else bad end; + a := 99; b := 100; + if a DIV b = 0 then good else bad end; + //coVariab_Expres + a := 100; b := 10; + if a div (b+1) = 9 then good else bad end; + //coExpres_Const + a := 19; + if (a+1) div 5 = 4 then good else bad end; + //coExpres_Variab + a := 15; b := 4; + if (a+1) div b = 4 then good else bad end; + //coExpres_Expres + a := 100; b := 5; + if (a+5) div (b+2) = 15 then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////// 8 Mod 8 bits-> 8 /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 0 mod 1 = 0 then good else bad end; + if 5 mod 255 = 5 then good else bad end; + if 25 mod 5 = 0 then good else bad end; + if 24 mod 5 = 4 then good else bad end; + + //coConst_Variab + a := 0; + if 0 mod a = 0 then good else bad end; + a := 1; + if 1 mod a = 0 then good else bad end; +// a := 2; +// if 1 mod a = 1 then good else bad end; + +//Pruebas elimiandas por falta de espacio +// a := 50; +// if 100 mod a = 0 then good else bad end; +// a := 0; //Entre cero +// if 255 mod a = 255 then good else bad end; //Realmente no está definido que se así +// +// //coConst_Expres +// a := 5; +// if 0 mod (a+1) = 0 then good else bad end; +// if 6 mod (a+1) = 0 then good else bad end; +// +// //coVariab_Const +// a := 25; +// if a mod 5 = 0 then good else bad end; +// if a mod 6 = 1 then good else bad end; +// +// //coVariab_Variab +// a := 255; b := 50; +// if a mod b = 5 then good else bad end; +// a := 99; b := 100; +// if a mod b = 99 then good else bad end; +// +// //coVariab_Expres +// a := 100; b := 10; +// if a mod (b+1) = 1 then good else bad end; +// +// //coExpres_Const +// a := 19; +// if (a+1) mod 5 = 0 then good else bad end; +// +// //coExpres_Variab +// a := 18; b := 4; +// if (a+1) mod b = 3 then good else bad end; +// +// //coExpres_Expres +// a := 100; b := 5; +// if (a+4) mod (b+2) = 6 then good else bad end; +// +end. diff --git a/testcode10/Simul_2/Word1.pas b/testcode10/Simul_2/Word1.pas new file mode 100644 index 00000000..5687ba0e --- /dev/null +++ b/testcode10/Simul_2/Word1.pas @@ -0,0 +1,103 @@ +{Rutina de verificación para operaciones de comparación con datos +de tipo WORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + + a, b: word; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////// Operación Igualdad /////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if word(0) = word(0) then good else bad end; + if word(0) = word(1) then bad else good end; + if word(255) = word(255) then good else bad end; + if 65535 = 65535 then good else bad end; + + if word(0) <> word(0) then bad else good end; + if word(255) <> word(0) then good else bad end; + if 65535 <> 65535 then bad else good end; + + //coConst_Variab + //Se prueba más detalladamente, porque hay varios casos que se optimizan + a := 10; + if word(10) = a then good else bad end; + if word(0) = a then bad else good end; + if word(10) <> a then bad else good end; + if word(255) <> a then good else bad end; + if 256 <> a then good else bad end; + a := 1000; + if 1000 = a then good else bad end; + if word(0) = a then bad else good end; + if word(1000) <> a then bad else good end; + if $FFFF <> a then good else bad end; + if 256 <> a then good else bad end; + a := 257; //caso para optimizar + if 257 = a then good else bad end; + + //coConst_Expres + a := 10; + if word(11) = a+1 then good else bad end; + a := 1000; + if 2000 = a+1000 then good else bad end; + + //coVariab_Const + a := 10; + if a = word(10) then good else bad end; + a := 1000; + if a = 1000 then good else bad end; + + //coVariab_Variab + a := 0; + b := 255; + if a = a then good else bad end; + if a = b then bad else good end; + if a <> a then bad else good end; + a := 65535; + b := 65535; + if a = a then good else bad end; + if a = b then good else bad end; + if b = a then good else bad end; + if a <> a then bad else good end; + a := 65535; + b := 1; + if a = b then bad else good end; + if b = a then bad else good end; + if a <> a then bad else good end; + + //coVariab_Expres + a := 10; b := 5; + if a = b+5 then good else bad end; + a := 1000; + if a = b+995 then good else bad end; + + //coExpres_Const + a := 10; + if a+1 = word(11) then good else bad end; + a := 1000; + if a+1 = 1001 then good else bad end; + + //coExpres_Variab + a := 1000; b := 5; + if b+995 = a then good else bad end; + + //coExpres_Expres + a := 10; b := 5; + if a+1 = a+1 then good else bad end; +//Operaciones comentadas por falta de espacio +// if a+1 = a+2 then bad else good end; +// a := 1000; b := 5; +// if a+1 = a+1 then good else bad end; +// if a+1 = a+2 then bad else good end; +// if a+1 = (a+1)+(b+2) then bad else good end; + +end. diff --git a/testcode10/Simul_2/Word2.pas b/testcode10/Simul_2/Word2.pas new file mode 100644 index 00000000..8a1eeee2 --- /dev/null +++ b/testcode10/Simul_2/Word2.pas @@ -0,0 +1,101 @@ +{Rutina de verificación para operaciones aritméticas con datos +de tipo WORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: word; + vbyte: byte; + vword: word; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Mayor ///////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if word(0) > word(0) then bad else good end; + if word(10) > word(9) then good else bad end; + + //coConst_Variab + a := 0; + if word(0) > a then bad else good end; + a := 1000; + if 1000 > a then bad else good end; + if 1001 > a then good else bad end; + + //coConst_Expres + a := 0; + if word(1) > (a+1) then bad else good end; + a := 999; + if 1000 > (a+1) then bad else good end; + if 1001 > (a+1) then good else bad end; + + //coVariab_Const + a := 0; + if a > word(0) then bad else good end; + a := 1; + if a > word(0) then good else bad end; + a := 255; + if a > word(254) then good else bad end; + a := 1000; + if 1000 > a then bad else good end; + if 1001 > a then good else bad end; + + //coVariab_Variab + a := 0; b := 0; + if a > b then bad else good end; + a := 256; b := 255; + if a > b then good else bad end; + if b > a then bad else good end; + a := 1000; b := 1000; + if a > b then bad else good end; + a := 1001; b := 1000; + if a > b then good else bad end; + + //coVariab_Expres + a := 1; b := 0; + if a > (b+1) then bad else good end; + a := 256; b := 254; + if a > (b+1) then good else bad end; + if a > (b+2) then bad else good end; + a := 1001; b := 1000; + if a > (b+1) then bad else good end; + a := 1001; b := 999; + if a > (b+1) then good else bad end; + + //coExpres_Const + a := 0; + if (a+1) > word(1) then bad else good end; + if (a+2) > word(1) then good else bad end; + a := 999; + if (a+1) > 1000 then bad else good end; + if (a+2) > 1000 then good else bad end; + +//Lineas comentadas por falta de espacio +// //coExpres_Variab +// a := 0; b := 1; +// if (a+1) > b then bad else good end; +// if (a+2) > b then good else bad end; +// a := 999; b := 1000; +// if (a+1) > b then bad else good end; +// if (a+2) > b then good else bad end; +// +// //coExpres_Expres +// a := 0; b := 0; +// if (a+1) > (b+1) then bad else good end; +// a := 254; b := 254; +// if (a+1) > (b+1) then bad else good end; +// if (a+2) > (b+1) then good else bad end; +// a := 1000; b := 1000; +// if (a+1) > (b+2) then bad else good end; +// if (a+1) > (b+1) then bad else good end; +// if (a+2) > (b+1) then good else bad end; + +end. + diff --git a/testcode10/Simul_2/Word3.pas b/testcode10/Simul_2/Word3.pas new file mode 100644 index 00000000..21a2a8d5 --- /dev/null +++ b/testcode10/Simul_2/Word3.pas @@ -0,0 +1,88 @@ +{Rutina de verificación para operaciones aritméticas con datos +de tipo WORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: word; + vbyte: byte; + vword: word; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////// Operación suma /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if word(0) + word(1) = 1 then good else bad end; + if 32768 + 1000 = 33768 then good else bad end; + //coConst_Variab + a := 100; + if 257 + a = 357 then good else bad end; + //coConst_Expres + a := 100; + if 256 + (a+1) = 357 then good else bad end; + //coVariab_Const + a := 100; + if a + 257 = 357 then good else bad end; + //coVariab_Variab + a := 0; b := 256; + if a + b = 256 then good else bad end; + a := 1000; b := 256; + if a + b = 1256 then good else bad end; + //coVariab_Expres + a := 300; + if a + (a+1) = 601 then good else bad end; + //coExpres_Const + a := 100; + if (a+1) + 256 = 357 then good else bad end; + //coExpres_Variab + a := 300; b := 1 ; + if (a+1) + b = 302 then good else bad end; + a := 100; b := 500; + if a + b + 5 = 605 then good else bad end; + //coExpres_Expres + a := 100; b := 500; + if (a+500) + (b + 500) = 1600 then good else bad end; + + ////////////////////////////////////////////////////////// + ////////////// Operación suma word-byte /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if word(0) + 1 = 1 then good else bad end; + if 65534 + 1 = 65535 then good else bad end; + //coConst_Variab + vbyte := 100; + if 257 + vbyte = 357 then good else bad end; + //coConst_Expres + vbyte := 100; + if 256 + (vbyte+1) = 357 then good else bad end; + //coVariab_Const + a := 100; + if a + 25 = word(125) then good else bad end; + //coVariab_Variab + a := 0; vbyte := 1; + if a + vbyte = word(1) then good else bad end; + a := 1000; vbyte := 1; + if a + vbyte = 1001 then good else bad end; + //coVariab_Expres + a := 300; vbyte := 5; + if a + (vbyte+1) = 306 then good else bad end; + //coExpres_Const + a := 100; + if (a+1) + 5 = word(106) then good else bad end; + //coExpres_Variab + a := 300; vbyte := 1 ; + if (a+1) + vbyte = 302 then good else bad end; + //coExpres_Expres +// a := 100; vbyte := 100; +// if (a+500) + (vbyte + 1) = 701 then good else bad end; + +end. + diff --git a/testcode10/Simul_2/Word4.pas b/testcode10/Simul_2/Word4.pas new file mode 100644 index 00000000..e1072eb8 --- /dev/null +++ b/testcode10/Simul_2/Word4.pas @@ -0,0 +1,119 @@ +{Rutina de verificación para operaciones aritméticas con datos +de tipo WORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + a, b: word; + vbyte: byte; + vword: word; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////// Operación suma byte-word /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 1 + word(0) = 1 then good else bad end; + if 1 + 65534 = 65535 then good else bad end; + //coConst_Variab + vword := 257; + if 100 + vword = 357 then good else bad end; + //coConst_Expres + vword := 256; + if 100 + (vword + 1) = 357 then good else bad end; + //coVariab_Const + vbyte := 100; + if vbyte + 350 = 450 then good else bad end; + //coVariab_Variab + vbyte := 0; vword := 1; + if vbyte + vword = word(1) then good else bad end; + vbyte := 1; vword := 1000; + if vbyte + vword = 1001 then good else bad end; + //coVariab_Expres + vbyte := 5; vword := 300; + if vbyte + (vword+1) = 306 then good else bad end; + //coExpres_Const + vbyte := 100; + if (vbyte+1) + 500 = 601 then good else bad end; + //coExpres_Variab + vbyte := 1; vword := 300; + if (vbyte+1) + vword = 302 then good else bad end; + //coExpres_Expres + vbyte := 100; vword := 100; + if (vbyte+100) + (vword + 500) = 800 then good else bad end; + +// ////////////////////////////////////////////////////////// +// ////////////// Resta word-word /////////////////// +// ////////////////////////////////////////////////////////// +// //coConst_Const +// if word(2) - word(1) = 1 then good else bad end; +// if word(1000) - word(500) = 500 then good else bad end; +// //coConst_Variab +// a := 2; +// if word(10) - a = word(8) then good else bad end; +// if word(1000) - a = 998 then good else bad end; +// //coConst_Expres +// if word(10) - (a+1) = word(7) then good else bad end; +// if word(1000) - (498 + a) = 500 then good else bad end; +// //coVariab_Const +// if a - word(1) = word(1) then good else bad end; +// a := 1000; +// if a - 300 = 700 then good else bad end; +// //coVariab_Variab +// a := 2; b := 1; +// if a - b = word(1) then good else bad end; +// a := 1000; b := 999; +// if a - b = word(1) then good else bad end; +// a := 1000; b := 0; +// if a - b = 1000 then good else bad end; +// //coVariab_Expres +// if a - (b+1) = 999 then good else bad end; +// //coExpres_Const +// if (a+1000) - 1250 = 750 then good else bad end; +// //coExpres_Variab +// if (a+1000) - b = 2000 then good else bad end; +// //coExpres_Expres +// if (a+1000) - (b+1000) = 1000 then good else bad end; +// +// ////////////////////////////////////////////////////////// +// ////////////// Multip word-word->word /////////////////// +// ////////////////////////////////////////////////////////// + //coConst_Const + if word(2) umulword word(1) = word(2) then good else bad end; + if word(100) umulword 500 = 50000 then good else bad end; + //coConst_Variab + a := 2; + if word(10) - a = word(8) then good else bad end; + if word(1000) - a = 998 then good else bad end; + //coConst_Expres + if word(10) - (a+1) = word(7) then good else bad end; + if word(1000) - (498 + a) = 500 then good else bad end; + //coVariab_Const + if a - word(1) = word(1) then good else bad end; + a := 1000; + if a - 300 = 700 then good else bad end; + //coVariab_Variab + a := 2; b := 1; + if a - b = word(1) then good else bad end; + a := 1000; b := 999; + if a - b = word(1) then good else bad end; + a := 1000; b := 0; + if a - b = 1000 then good else bad end; +// //coVariab_Expres +// if a - (b+1) = 999 then good else bad end; +// //coExpres_Const +// if (a+1000) - 1250 = 750 then good else bad end; +// //coExpres_Variab +// if (a+1000) - b = 2000 then good else bad end; +// //coExpres_Expres +// if (a+1000) - (b+1000) = 1000 then good else bad end; + + +end. + diff --git a/testcode10/Simul_2/dWord1.pas b/testcode10/Simul_2/dWord1.pas new file mode 100644 index 00000000..68983bbb --- /dev/null +++ b/testcode10/Simul_2/dWord1.pas @@ -0,0 +1,82 @@ +{Rutina de verificación para operaciones de comparación con datos +de tipo DWORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + + a, b: Dword; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////// Operación Igualdad /////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if dword(0) = dword(0) then good else bad end; + if dword(0) = dword(1) then bad else good end; + if dword($FFFF) = dword($FFFF) then good else bad end; + if 1265535 = 1265535 then good else bad end; + + if dword(0) <> dword(0) then bad else good end; + if dword(255) <> dword(0) then good else bad end; + if $12345678 <> $12345678 then bad else good end; + + //coConst_Variab + a := $123456; + if $123456 = a then good else bad end; + a := 0; + if dword(0) = a then good else bad end; + a := $01020304; + if dword($01020304) = a then good else bad end; + a := $FFFFFFFF; + if $FFFFFFFF = a then good else bad end; + + //coConst_Expres + a := $123456; + if $123457 = a + dword(1) then good else bad end; + + //coVariab_Const + a := $123456; + if a = $123456 then good else bad end; + a := $1234; + if a = dword($1234) then good else bad end; + + //coVariab_Variab + a := $123456; + b := $123456; + if a = b then good else bad end; + a := $1234; + b := $1234; + if a = b then good else bad end; + + //coVariab_Expres + a := $123456; + b := $123457; + if b = dword(1) + a then good else bad end; + + //coExpres_Const + a := $FFFFFFF; + if dword(1) + a = $10000000 then good else bad end; + + //coExpres_Variab + b := $10000000; + if dword(1) + a = b then good else bad end; + + //coExpres_Expres +// a := 3141592654; +// b := 3141592654; +// if dword(1) + b = dword(1) + a then good else bad end; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Mayor ///////////////////// + ////////////////////////////////////////////////////////// + //<<No implementado>> + + +end. diff --git a/testcode10/Simul_2/dWord2.pas b/testcode10/Simul_2/dWord2.pas new file mode 100644 index 00000000..1b42fc09 --- /dev/null +++ b/testcode10/Simul_2/dWord2.pas @@ -0,0 +1,90 @@ +{Rutina de verificación para operaciones de comparación con datos +de tipo DWORD. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var + + a, b: Dword; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Mayor ///////////////////// + ////////////////////////////////////////////////////////// + + //<<No implementado>> + + ////////////////////////////////////////////////////////// + ////////////////// Operación Asign.-suma ///////////////////// + ////////////////////////////////////////////////////////// + //coConst + a := 1; + a += dword(1); + if a = dword(2) then good else bad end; + a := $ff; + a += dword(1); + if a = dword($100) then good else bad end; + a := 100000; + a += dword(1000); + if a = dword(101000) then good else bad end; + a := 800000; + a += 800000; + if a = 1600000 then good else bad end; + + //coVariab + a := 1; b := 1; + a += b; + if a = dword(2) then good else bad end; + a := 100000; b := 100000; + a += b; + if a = 200000 then good else bad end; + + //coExpres + a := 100000; b := 100000; + a += (b+dword(1)); + if a = 200001 then good else bad end; + + a := 5; + a += (a+dword(1)); + if a = dword(11) then good else bad end; + + ////////////////////////////////////////////////////////// + ////////////////// Operación Suma ///////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if dword($FFFF) + dword(1) = $10000 then good else bad end; + if dword(1) + dword(1000) = 1001 then good else bad end; + + //coConst_Variab + a := $FF; + if dword(1) + a = dword($100) then good else bad end; + + //coConst_Expres + a := $FF; + if dword(1) + (a+dword(1)) = dword($101) then good else bad end; + + {Pruebas suprimidas por falta de espacio en la memoria} +// //coVariab_Const +// a := 0; +// if a + dword($FFFFFF) = dword($FFFFFF) then good else bad end; +// +// //coVariab_Variab +// a := 1; b := 1; +// if a+b = dword(2) then good else bad end; +// a := $FFFFFF; b:= 1; +// if b + a = $1000000 then good else bad end; +// a := 123456; b:= 123456789; +// if b + a = 123580245 then good else bad end; +// +// //coExpres_Const +// //coConst_Expres +// a := $FF; +// if (a+dword(1)) + dword(1) = dword($101) then good else bad end; +end. diff --git a/testcode10/Simul_2/nuevo-0.hex b/testcode10/Simul_2/nuevo-0.hex new file mode 100644 index 00000000..32f8b50d --- /dev/null +++ b/testcode10/Simul_2/nuevo-0.hex @@ -0,0 +1,6 @@ +:020000040000FA +:100000000C0A71007300730532030306F10131031A +:100010003203F302050A0008050C3000100232001A +:08002000050C010912020300A6 +:00000001FF +;DEFAULT diff --git a/testcode10/Simul_2/output.hex b/testcode10/Simul_2/output.hex new file mode 100644 index 00000000..de492f33 --- /dev/null +++ b/testcode10/Simul_2/output.hex @@ -0,0 +1,65 @@ +:020000040000FA +:100000001F0A70003300B002B302F302080AF002C4 +:100010000A0A0008FA0C34000000F4020C0A050A6F +:1000200006051E0C010906041E0C01090008060540 +:10003000050C3000DC0C0209060403000008FE0C6D +:1000400006000604680028024307280A1009290A46 +:100050001709FF0C290089024307300A1009310AE9 +:100060001709050C2C000C022800050C880043071A +:100070003B0A10093C0A1709850C280008022900D0 +:10008000850C89004307460A1009470A1709100C16 +:10009000C8012900950C89004307500A1009510A2C +:1000A0001709100C88002900750C890043075A0AAB +:1000B00010095B0A1709A902E900750C89004307BA +:1000C000630A1009640A1709230C2C000C0C280081 +:1000D000120C2D000D0C2900080224000002230F31 +:1000E0004307740A1009750A170908022400FF0C57 +:1000F00020008C0243077E0A10097F0A1709230C8F +:100100002C0008022400000233000902240013021C +:100110002000230C8D0043078F0A1009900A17094D +:100120000C0C28000802240000022D000C028D0097 +:1001300043079C0A10099D0A1709120C2C0008029B +:1001400024000002120F4307A70A1009A80A170982 +:100150000802240000023300010CD301130F4307EF +:10016000B30A1009B40A1709080224000002330078 +:10017000010C9300110F4307BF0A1009C00A1709A9 +:100180000802240000023500080224000002D50104 +:10019000240F4307CD0A1009CE0A170908022400CC +:1001A00000020F0E020F4307D70A1009D80A1709D9 +:1001B000120C2D00880224000002120F4307E20AED +:1001C0001009E30A17098802240000023300010C19 +:1001D000D301130F4307EE0A1009EF0A170988022B +:1001E000240000023300010C9300110F4307FA0AA8 +:1001F0001009FB0A17098802240000020F0E020FE3 +:100200004307040B1009050B17096A002A0243076C +:100210000B0B10090C0B1709FF0C2B008B0243076B +:10022000130B1009140B1709050C2C000C022A00E3 +:10023000050C8A0043071E0B10091F0B1709850CBC +:100240002A000A022B00850C8B004307290B10099A +:100250002A0B1709100CCA012B00950C8B004307C1 +:10026000330B1009340B1709100C8A002B00750C86 +:100270008B0043073D0B10093E0B1709AB02EB0047 +:10028000750C8B004307460B1009470B17096F00CD +:10029000230C2E000E0C2A007200120C3100110CDF +:1002A0002B008A02240000023000E4000002330028 +:1002B000000C900043075E0B230C93004307620B76 +:1002C0001009630B17090A022400FF0C2000A40286 +:1002D00060000F0243076D0B8E024307710B10097C +:1002E000720B17096F00230C2E008A0224000002F3 +:1002F0003000E400000233000B022400130220004F +:100300001002A402200012024307880B230C910064 +:1003100043078C0B10098D0B17090E0C2A008A025B +:10032000240000023000E40000023100100232001C +:100330000F02920043079E0B0E0291004307A20B8F +:100340001009A30B17096F00120C2E008A0224005B +:1003500000023000E40000023300000C900043076C +:10036000B30B120C93004307B70B1009B80B170916 +:100370008A02240000023000E40000023300000C76 +:10038000F001010CD3010306B0023300000C900011 +:100390004307CC0B130C93004307D00B1009D10B70 +:1003A00017098A02240000023000E4000002330032 +:1003B000000CB000010C93000307F0003300000CA8 +:1003C00090004307E50B110C93004307E90B10095C +:0603D000EA0B170903000F +:00000001FF +;PIC10F202 diff --git a/testcode10/Simul_2/types1.pas b/testcode10/Simul_2/types1.pas new file mode 100644 index 00000000..a8da9254 --- /dev/null +++ b/testcode10/Simul_2/types1.pas @@ -0,0 +1,96 @@ +{Rutina de verificación para el manejo de tipos. +Se debe simular el programa en el circuito "Test1.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación.} +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +var //tipos básicos + vbit : bit; + vbool : boolean; + vbyte : byte; + vchar : char; + vword : word; + vdword: dword; +type //tipos equivalentes + bit1 = bit; + bool1 = boolean; + byte1 = byte; + char1 = char; + word1 = word; + dword1 = dword; +var //variables de tipos equivalentes + vbit1 : bit1; + vbool1 : bool1; + vbyte1 : byte1; + vchar1 : char1; + vword1 : word1; + vdword1: dword1; +type //Tipos punteros + byteptr = ^byte; + wordptr = ^word; +var + ptrByte1, ptrByte2: byteptr; + ptrWord1, ptrWord2: wordptr; +// m, n : byte; +// x, y : word; + +// procedure proc1(x, y: byte1): word1; +// begin +// exit( word(x+y)); +// end; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////// + ////////////// Existencia básica de tipos /////////////////// + ////////////////////////////////////////////////////// + vbit := 1; + if vbit = 1 then good else bad end; + vbool := true; + if vbool = true then good else bad end; + vbyte := 1; + if vbyte = 1 then good else bad end; + vchar:= ' '; + if vchar = ' ' then good else bad end; + vword:= 1; + if vword = word(1) then good else bad end; + vdword:= 1; + if vdword = dword(1) then good else bad end; + + //Operaciones con tipos equivalentes + vbit1 := 1; + if vbit1 = 1 then good else bad end; + vbool1 := true; + if vbool1 = true then good else bad end; + vbyte1 := 1; + if vbyte1 = 1 then good else bad end; + vbyte1 := vbyte1 + 1; + if vbyte1 = 2 then good else bad end; + + vchar1:= ' '; + if vchar1 = ' ' then good else bad end; + vword1:= 1; + if vword1 = word(1) then good else bad end; + + vdword1:= 1; + if vdword1 = dword(1) then good else bad end; + vdword1:= 1000; + if vdword1 = dword(1000) then good else bad end; + + //Uso de variables de tipos equivalentes + vword1 := 0; + for vbyte1:=1 to 5 do + vword1 := vword1 + 1; + end; + if vword1 = word(5) then good else bad end; + + //Paso de parámetros a procedimientos + // if proc1(1,2) = 3 then good else bad end; + // NO IMPLEMENTADO + + + +end. diff --git a/testcode10/Simul_2/types2.hex b/testcode10/Simul_2/types2.hex new file mode 100644 index 00000000..32f8b50d --- /dev/null +++ b/testcode10/Simul_2/types2.hex @@ -0,0 +1,6 @@ +:020000040000FA +:100000000C0A71007300730532030306F10131031A +:100010003203F302050A0008050C3000100232001A +:08002000050C010912020300A6 +:00000001FF +;DEFAULT diff --git a/testcode10/Simul_2/types2.pas b/testcode10/Simul_2/types2.pas new file mode 100644 index 00000000..a698dcdf --- /dev/null +++ b/testcode10/Simul_2/types2.pas @@ -0,0 +1,212 @@ +uses PIC10F202, UnitTest; +{$FREQUENCY 4Mhz} +{$OUTPUTHEX 'output.hex'} +type + byteptr = ^byte; + wordptr = ^word; +type //Tipos arreglos + Tachar = array[3] of char; + Tabyte = array[3] of byte; + Taword = array[3] of word; +var //Variables arreglos + achar: Tachar; + abyte: Tabyte; + aword: Taword; +var //Variables para punteros + ptrByte1, ptrByte2: byteptr; + ptrWord1, ptrWord2: wordptr; + m, n : byte; + x, y : word; +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////// + //////////////// Punteros a byte ///////////////////// + ////////////////////////////////////////////////////// + ptrByte1 := 0; //asignación constante + if ptrByte1 = 0 then good else bad end; + ptrByte2 := 255; //asignación constante + if ptrByte2 = 255 then good else bad end; + m := 5; + ptrByte1 := m; //asignación byte + if ptrByte1 = 5 then good else bad end; + + ptrByte1 := $85; + ptrByte2 := ptrByte1; //asignación punteros + if ptrByte2 = $85 then good else bad end; + + //Aritmética de punteros + ptrByte2 := ptrByte1+$10; //asignación expresión de punteros + if ptrByte2 = $95 then good else bad end; + + ptrByte2 := ptrByte1-$10; //asignación expresión de punteros + if ptrByte2 = $75 then good else bad end; + + inc(ptrByte2); + dec(ptrByte2); + if ptrByte2 = $75 then good else bad end; + + //Acceso a variables + m := $23; + ptrByte1 := @m; + + n := $12; + ptrByte2 := @n; + + if ptrByte1^ = $23 then good else bad end; + ptrByte1^ := $FF; + if m = $ff then good else bad end; + + m := $23; + ptrByte2^ := ptrByte1^; + if n = $23 then good else bad end; + + ptrByte1 := @m; + n := ptrByte1^; + if m = n then good else bad end; + + //Operaciones con desreferencia stVarRefVar + m := $12; + if ptrByte1^ = $12 then good else bad end; + if ptrByte1^ + 1 = $13 then good else bad end; + if ptrByte1^ - 1 = $11 then good else bad end; + if ptrByte1^ + ptrByte1^ = $24 then good else bad end; + if $0f and ptrByte1^ = $02 then good else bad end; + + //Pendientes +// delay_ms(ptrByte1^); +// Inc(ptrByte1^); +// Dec(ptrByte1^); +// ptrByte1^.bit7 := 0; +// chr(ptrByte1^); +// bit(ptrByte1^); +// word(ptrByte1^); +// dword(ptrByte1^); + + //Operaciones con desreferencia stVarRefExp + //Se asume para esta prueba que "n", está ubicado después de "m" + //De otar forma no funcionará, porque ptrByte1+1, fallaría + n := $12; + if (ptrByte1+1)^ = $12 then good else bad end; + if (ptrByte1+1)^ + 1 = $13 then good else bad end; + if (ptrByte1+1)^ - 1 = $11 then good else bad end; + {Expresión muy compleja stVarRefExp + stVarRefExp. No implementada por ahora. + // if (ptrByte1+1)^ + (ptrByte1+1)^ = $24 then good else bad end; + } + if $0f and (ptrByte1+1)^ = $02 then good else bad end; + + //Pendientes +// delay_ms((ptrByte1+1)^); +// Inc((ptrByte1+1)^); +// Dec((ptrByte1+1)^); +// (ptrByte1+1)^.bit7 := 0; +// chr((ptrByte1+1)^); +// bit((ptrByte1+1)^); +// word((ptrByte1+1)^); +// dword((ptrByte1+1)^); + + + ////////////////////////////////////////////////////// + //////////////// Punteros a word ///////////////////// + ////////////////////////////////////////////////////// + ptrWord1 := 0; //asignación constante + if ptrWord1 = 0 then good else bad end; + ptrWord2 := 255; //asignación constante + if ptrWord2 = 255 then good else bad end; + m := 5; + ptrWord1 := m; //asignación byte + if ptrWord1 = 5 then good else bad end; + + ptrWord1 := $85; + ptrWord2 := ptrWord1; //asignación punteros + if ptrWord2 = $85 then good else bad end; + + //Aritmética de punteros + ptrWord2 := ptrWord1+$10; //asignación expresión de punteros + if ptrWord2 = $95 then good else bad end; + + ptrWord2 := ptrWord1-$10; //asignación expresión de punteros + if ptrWord2 = $75 then good else bad end; + + inc(ptrWord2); + dec(ptrWord2); + if ptrWord2 = $75 then good else bad end; + + //Acceso a variables + x := $23; + ptrWord1 := @x; + + y := $12; + ptrWord2 := @y; + + if ptrWord1^ = word($23) then good else bad end; + ptrWord1^ := word($FF); + if x = word($ff) then good else bad end; + + x := $23; + ptrWord2^ := ptrWord1^; + if y = word($23) then good else bad end; + + ptrWord1 := @x; + y := ptrWord1^; + if x = y then good else bad end; + + //Operaciones con desreferencia stVarRefVar + x := $12; + if ptrWord1^ = word($12) then good else bad end; + if ptrWord1^ + word(1) = word($13) then good else bad end; + if ptrWord1^ - word(1) = word($11) then good else bad end; +// if ptrWord1^ + ptrWord1^ = word($24) then good else bad end; +// if word($0f) and ptrWord1^ = word($02) then good else bad end; +// +// //Pendientes +//// delay_ms(ptrWord1^); +//// Inc(ptrWord1^); +//// Dec(ptrWord1^); +//// ptrWord1^.bit7 := 0; +//// chr(ptrWord1^); +//// bit(ptrWord1^); +//// word(ptrWord1^); +//// dword(ptrWord1^); +// +// //Operaciones con desreferencia stVarRefExp +// //Se asume para esta prueba que "y", está ubicado después de "x" +// //De otar forma no funcionará, porque ptrWord1+1, fallaría +// y := $12; +// if (ptrWord1+1)^ = $12 then good else bad end; +// if (ptrWord1+1)^ + 1 = $13 then good else bad end; +// if (ptrWord1+1)^ - 1 = $11 then good else bad end; +// {Expresión muy compleja stVarRefExp + stVarRefExp. No implementada por ahora. +// // if (ptrWord1+1)^ + (ptrWord1+1)^ = $24 then good else bad end; +// } +// if $0f and (ptrWord1+1)^ = $02 then good else bad end; +// +// //Pendientes +//// delay_ms((ptrWord1+1)^); +//// Inc((ptrWord1+1)^); +//// Dec((ptrWord1+1)^); +//// (ptrWord1+1)^.bit7 := 0; +//// chr((ptrWord1+1)^); +//// bit((ptrWord1+1)^); +//// word((ptrWord1+1)^); +//// dword((ptrWord1+1)^); +// +// + ////////////////////////////////////////////////////// + ////////////////////// Arreglos ///////////////////// + ////////////////////////////////////////////////////// +// achar[0] := 'a'; +// if 'a' = achar[0] then good else bad end; +// vbyte := 1; +// achar[vbyte] := 'a'; +// if achar[vbyte] = 'a' then good else bad end; +// +// abyte[0] := 1; +// vbyte := 1; +// abyte[vbyte] := 1; +// +// vbyte := 1; +// aword[0] := word(5000); +// aword[vbyte] := word(5000); +end. diff --git a/TestCode/MustFail/Duplic.pas b/testcode16/MustFail/Duplic.pas similarity index 100% rename from TestCode/MustFail/Duplic.pas rename to testcode16/MustFail/Duplic.pas diff --git a/TestCode/MustFail/unit1.pas b/testcode16/MustFail/unit1.pas similarity index 100% rename from TestCode/MustFail/unit1.pas rename to testcode16/MustFail/unit1.pas diff --git a/TestCode/MustFail/unit_dummy.pas b/testcode16/MustFail/unit_dummy.pas similarity index 100% rename from TestCode/MustFail/unit_dummy.pas rename to testcode16/MustFail/unit_dummy.pas diff --git a/TestCode/MustPass/Test5_BankConditions.pas b/testcode16/MustPass/Test5_BankConditions.pas similarity index 100% rename from TestCode/MustPass/Test5_BankConditions.pas rename to testcode16/MustPass/Test5_BankConditions.pas diff --git a/TestCode/MustPass/Test5_Banks.pas b/testcode16/MustPass/Test5_Banks.pas similarity index 100% rename from TestCode/MustPass/Test5_Banks.pas rename to testcode16/MustPass/Test5_Banks.pas diff --git a/TestCode/MustPass/a_progam1.pas b/testcode16/MustPass/a_progam1.pas similarity index 100% rename from TestCode/MustPass/a_progam1.pas rename to testcode16/MustPass/a_progam1.pas diff --git a/TestCode/MustPass/a_progam2.pas b/testcode16/MustPass/a_progam2.pas similarity index 100% rename from TestCode/MustPass/a_progam2.pas rename to testcode16/MustPass/a_progam2.pas diff --git a/TestCode/MustPass/a_progam3.pas b/testcode16/MustPass/a_progam3.pas similarity index 100% rename from TestCode/MustPass/a_progam3.pas rename to testcode16/MustPass/a_progam3.pas diff --git a/TestCode/MustPass/b_unit1.pas b/testcode16/MustPass/b_unit1.pas similarity index 100% rename from TestCode/MustPass/b_unit1.pas rename to testcode16/MustPass/b_unit1.pas diff --git a/TestCode/MustPass/b_unit2.pas b/testcode16/MustPass/b_unit2.pas similarity index 100% rename from TestCode/MustPass/b_unit2.pas rename to testcode16/MustPass/b_unit2.pas diff --git a/TestCode/MustPass/b_unit3.pas b/testcode16/MustPass/b_unit3.pas similarity index 100% rename from TestCode/MustPass/b_unit3.pas rename to testcode16/MustPass/b_unit3.pas diff --git a/TestCode/MustPass/b_unit4.pas b/testcode16/MustPass/b_unit4.pas similarity index 100% rename from TestCode/MustPass/b_unit4.pas rename to testcode16/MustPass/b_unit4.pas diff --git a/TestCode/MustPass/conditional1.pas b/testcode16/MustPass/conditional1.pas similarity index 100% rename from TestCode/MustPass/conditional1.pas rename to testcode16/MustPass/conditional1.pas diff --git a/TestCode/MustPass/conditional2.pas b/testcode16/MustPass/conditional2.pas similarity index 100% rename from TestCode/MustPass/conditional2.pas rename to testcode16/MustPass/conditional2.pas diff --git a/TestCode/MustPass/directives.pas b/testcode16/MustPass/directives.pas similarity index 100% rename from TestCode/MustPass/directives.pas rename to testcode16/MustPass/directives.pas diff --git a/TestCode/MustPass/loops1.pas b/testcode16/MustPass/loops1.pas similarity index 100% rename from TestCode/MustPass/loops1.pas rename to testcode16/MustPass/loops1.pas diff --git a/TestCode/Simul_1/Test1.DSN b/testcode16/Simul_1/Test1.DSN similarity index 100% rename from TestCode/Simul_1/Test1.DSN rename to testcode16/Simul_1/Test1.DSN diff --git a/TestCode/Simul_1/Test1.PWI b/testcode16/Simul_1/Test1.PWI similarity index 100% rename from TestCode/Simul_1/Test1.PWI rename to testcode16/Simul_1/Test1.PWI diff --git a/TestCode/Simul_1/Test1_HelloWorld.pas b/testcode16/Simul_1/Test1_HelloWorld.pas similarity index 90% rename from TestCode/Simul_1/Test1_HelloWorld.pas rename to testcode16/Simul_1/Test1_HelloWorld.pas index a8da8ede..0160065b 100644 --- a/TestCode/Simul_1/Test1_HelloWorld.pas +++ b/testcode16/Simul_1/Test1_HelloWorld.pas @@ -1,7 +1,6 @@ {Rutina de verificación del programa Hola Mundo. Lo que se prueba aquí, es el funcionamiento báscio y la capacidad de llamar a la rutina delay_ms(), definiendo el uso del registro H.} -{$PROCESSOR PIC16F84A} {$FREQUENCY 10Mhz} {$OUTPUTHEX 'output.hex'} uses PIC16F84A; diff --git a/TestCode/Simul_1/Test1_Vars.pas b/testcode16/Simul_1/Test1_Vars.pas similarity index 95% rename from TestCode/Simul_1/Test1_Vars.pas rename to testcode16/Simul_1/Test1_Vars.pas index b96f2432..c438b553 100644 --- a/TestCode/Simul_1/Test1_Vars.pas +++ b/testcode16/Simul_1/Test1_Vars.pas @@ -1,5 +1,4 @@ {Test code for validation of Variable declarations and Function Systems.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} uses PIC16F84A; diff --git a/TestCode/Simul_1/Test2_Bit.pas b/testcode16/Simul_1/Test2_Bit.pas similarity index 96% rename from TestCode/Simul_1/Test2_Bit.pas rename to testcode16/Simul_1/Test2_Bit.pas index 6566eb08..b470c08d 100644 --- a/TestCode/Simul_1/Test2_Bit.pas +++ b/testcode16/Simul_1/Test2_Bit.pas @@ -3,7 +3,6 @@ Se debe simular el programa en el circuito "Test1.DSN". Se debe escuchar, una serie de pitidos cortos. Si se escucha un pitido largo, es que hubo algún error en el resultado de alguna operación.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} uses PIC16F84A; diff --git a/TestCode/Simul_1/Test3_Procedure.pas b/testcode16/Simul_1/Test3_Procedure.pas similarity index 94% rename from TestCode/Simul_1/Test3_Procedure.pas rename to testcode16/Simul_1/Test3_Procedure.pas index 4d4e71ae..501cab56 100644 --- a/TestCode/Simul_1/Test3_Procedure.pas +++ b/testcode16/Simul_1/Test3_Procedure.pas @@ -3,7 +3,6 @@ Se debe simular el programa en el circuito "Test1.DSN". Se debe escuchar, una serie de pitidos cortos. Si se escucha un pitido largo, es que hubo algún error en el resultado de alguna operación.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} uses PIC16F84A; diff --git a/TestCode/Simul_1/Test3_Structs1.pas b/testcode16/Simul_1/Test3_Structs1.pas similarity index 94% rename from TestCode/Simul_1/Test3_Structs1.pas rename to testcode16/Simul_1/Test3_Structs1.pas index 429680de..eb60a74a 100644 --- a/TestCode/Simul_1/Test3_Structs1.pas +++ b/testcode16/Simul_1/Test3_Structs1.pas @@ -3,7 +3,6 @@ Se debe simular el programa en el circuito "Test1.DSN". Se debe escuchar, una serie de pitidos cortos. Si se escucha un pitido largo, es que hubo algún error en el resultado de alguna operación.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} uses PIC16F84A; diff --git a/TestCode/Simul_1/Test3_Structs2.pas b/testcode16/Simul_1/Test3_Structs2.pas similarity index 95% rename from TestCode/Simul_1/Test3_Structs2.pas rename to testcode16/Simul_1/Test3_Structs2.pas index 56688e73..c6fb30d0 100644 --- a/TestCode/Simul_1/Test3_Structs2.pas +++ b/testcode16/Simul_1/Test3_Structs2.pas @@ -3,7 +3,6 @@ Se debe simular el programa en el circuito "Test1.DSN". Se debe escuchar, una serie de pitidos cortos. Si se escucha un pitido largo, es que hubo algún error en el resultado de alguna operación.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} {$Mode Pascal} diff --git a/TestCode/Simul_1/Test4_Asm.pas b/testcode16/Simul_1/Test4_Asm.pas similarity index 94% rename from TestCode/Simul_1/Test4_Asm.pas rename to testcode16/Simul_1/Test4_Asm.pas index 50ed1ca4..7e3d78e1 100644 --- a/TestCode/Simul_1/Test4_Asm.pas +++ b/testcode16/Simul_1/Test4_Asm.pas @@ -1,5 +1,4 @@ {Rutina de verificación de las rutinas en ensamblador.} -{$PROCESSOR PIC16F84} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} {$Mode Pascal} diff --git a/TestCode/Simul_3/Test1_SystemFunc.pas b/testcode16/Simul_2/Test1_SystemFunc.pas similarity index 100% rename from TestCode/Simul_3/Test1_SystemFunc.pas rename to testcode16/Simul_2/Test1_SystemFunc.pas diff --git a/testcode16/Simul_2/Test2_Bank.pas b/testcode16/Simul_2/Test2_Bank.pas new file mode 100644 index 00000000..848e0048 --- /dev/null +++ b/testcode16/Simul_2/Test2_Bank.pas @@ -0,0 +1,45 @@ +{Programa para la verifiación del manejo de bancos RAM.} +{$OUTPUTHEX 'output.hex'} +uses PIC16F877A, UnitTest; +{$FREQUENCY 8Mhz} +var + a0: byte; //At bank 0 + b0: byte; //At bank 0 + a1: byte absolute $A0; //At bank 1 + b1: byte absolute $A1; //At bank 1 + +begin + SetAsOutput(pinLed); //Inicia pin + pinLed := 0; //Inicia estado + + a0 := 1; //Bank 0 + b0 := 3; //Bank 0 . Must not generate bank Switch + if a0 = 1 then good else bad end; + if b0 = 3 then good else bad end; + + a0 := 1; //Bank 0 + a1 := 3; //Bank 1 + if a0 = 1 then good else bad end; + if a1 = 3 then good else bad end; + + a1 := 3; //Bank 1 + a0 := 1; //Bank 0 + if a0 = 1 then good else bad end; + if a1 = 3 then good else bad end; + + a1 := 1; //Bank 1 + b1 := 2; //Bank 1. Must not generate bank Switch + if a1 = 1 then good else bad end; + if b1 = 2 then good else bad end; + + //Expresion with several banks + a0 := 1; //Bank 0 + a1 := a0 + 1; //Bank 1 and 0 + if a1 = 2 then good else bad end; + + a0 := 1; //Bank 0 + a1 := 2; //Bank 1 + a1 := a0 + 1 + a1; //Bank 1 and 0 + if a1 = 4 then good else bad end; + +end. diff --git a/TestCode/Simul_3/Test1_Byte.pas b/testcode16/Simul_2/Test3_Byte1.pas similarity index 53% rename from TestCode/Simul_3/Test1_Byte.pas rename to testcode16/Simul_2/Test3_Byte1.pas index 173a13f8..7767b799 100644 --- a/TestCode/Simul_3/Test1_Byte.pas +++ b/testcode16/Simul_2/Test3_Byte1.pas @@ -1,7 +1,9 @@ {Rutina de verificación para operaciones con datos de tipo byte. Se debe simular el programa en el circuito "Test3.DSN". Se debe escuchar, una serie de pitidos cortos. Si se escucha un pitido -largo, es que hubo algún error en el resultado de alguna operación.} +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} {$PROCESSOR PIC16F877A} {$FREQUENCY 8Mhz} {$OUTPUTHEX 'output.hex'} @@ -202,116 +204,6 @@ if a <= 6 then good else bad end; if a <= 4 then bad else good end; - ////////////////////////////////////////////////////////// - //////////////////////// Suma ///////////////////////// - ////////////////////////////////////////////////////////// - - //Constante - if 0 + 0 = 0 then good else bad end; - if 0 + 1 = 0 then bad else good end; - if 255 + 0 = 255 then good else bad end; - - //Variables - a := 0; - b := 255; - if a + a = 0 then good else bad end; - if a + b = 255 then good else bad end; - if b + a = 255 then good else bad end; - if a + b = b then good else bad end; - - a := 1; - b := 254; - if a + b = 255 then good else bad end; - - //Variables - constantes - a := 0; - if a + 0 = 0 then good else bad end; - if 0 + a = 0 then good else bad end; - if a + 1 = 1 then good else bad end; - if 1 + a = 1 then good else bad end; - if a + 255 = 255 then good else bad end; - if 255 + a = 255 then good else bad end; - - a := 1; - if a + 0 = 1 then good else bad end; - if 0 + a = 1 then good else bad end; - if a + 1 = 2 then good else bad end; - if 1 + a = 2 then good else bad end; - if a + 254 = 255 then good else bad end; - if 254 + a = 255 then good else bad end; - - //Expresiones - a := 10; b := 5; - if a = b+5 then good else bad end; - if a + b = 15 then good else bad end; - if (a + b) + 1 = 16 then good else bad end; - if b + a = 15 then good else bad end; - if 15 = b + a then good else bad end; - if a + b = a + 5 then good else bad end; - if a + (b+a) = a + (a + 5) then good else bad end; - if a + (b+ (a+b)) = a + (a + a) then good else bad end; - - ////////////////////////////////////////////////////////// - //////////////////////// Resta ///////////////////////// - ////////////////////////////////////////////////////////// - - //Constante - if 0 - 0 = 0 then good else bad end; - if 1 - 0 = 0 then bad else good end; - if 255 - 0 = 255 then good else bad end; - - //Variables - a := 255; b := 0; - if a - a = 0 then good else bad end; - if a - a = b then good else bad end; - if b - b = b then good else bad end; - if a - b = 255 then good else bad end; - if a - b = a then good else bad end; - - a := 255; b := 1; - if b - b = 0 then good else bad end; - if a - b = 254 then good else bad end; - - a := 1; b := 0; - if a - b = 1 then good else bad end; - if a - b = a then good else bad end; - - a := 10; b := 5; - if a - b = b then good else bad end; - if a - b = 5 then good else bad end; - - //Variables - constantes - a := 0; - if a - 0 = 0 then good else bad end; - if 0 - a = 0 then good else bad end; - if a - 0 = a then good else bad end; - a := 1; - if a - 1 = 0 then good else bad end; - if 1 - a = 0 then good else bad end; - if 255 - a = 254 then good else bad end; - if 10 - a = 9 then good else bad end; - a := 255; - if a - 1 = 254 then good else bad end; - if 255 - a = 0 then good else bad end; - if a - 10 = 245 then good else bad end; - - //Expresiones - a := 10; b := 5; - if 10 - (b+1) = 4 then good else bad end; //constante - expresión - if a - (b+1) = 4 then good else bad end; //variable - expresión - if (a+1) - 1 = 10 then good else bad end; //expresión - constante - if (a+1) - 0 = 11 then good else bad end; //expresión - constante - if (a+1) - a = 1 then good else bad end; //expresión - variable - if (a+1) - (b+1) = 5 then good else bad end; //expresión - expresión - if a - b = a - b then good else bad end; - if a - b - 1 = 4 then good else bad end; - if a - b - 1 = b - 1 then good else bad end; - if 5 = a - b then good else bad end; - if a - 5 = a - b then good else bad end; - if b + (a-b) = a then good else bad end; - if a = b + (a-b) then good else bad end; - if a + (b+ (a-b)) = a + (a - b + 5) then good else bad end; - ////////////////////////////////////////////////////////// ///////////////////// Operación AND ///////////////////// ////////////////////////////////////////////////////////// @@ -402,142 +294,54 @@ if a>>3 = $1f then good else bad end; if a>>7 = $1 then good else bad end; if a>>8 = $0 then good else bad end; -// //coVariab_Variab -// a := $ff; -// b := 0; -// if a>>b = $ff then good else bad end; -// b := 1; -// if a>>b = $7f then good else bad end; -// b := 8; -// if a>>b = $0 then good else bad end; -// //coExpres_Const -// a := $80; -// if (a+8)>>1 = $44 then good else bad end; -// if (a+8)>>2 = $22 then good else bad end; -// if (a+8)>>3 = $11 then good else bad end; -// if (a+8)>>4 = $08 then good else bad end; -// if (a+8)>>5 = $04 then good else bad end; -// -// ////////////////////////////////////////////////////////// -// ////////////////// Desplaz. Izquierda /////////////////// -// ////////////////////////////////////////////////////////// -// //coConst_Const -// if 1<<0 = 1 then good else bad end; -// if 2<<2 = 8 then good else bad end; -// -// //coVariab_Const -// a := $01; -// if a<<0 = $01 then good else bad end; -// if a<<1 = $02 then good else bad end; -// if a<<2 = $04 then good else bad end; -// if a<<3 = $08 then good else bad end; -// if a<<7 = $80 then good else bad end; -// if a<<8 = $00 then good else bad end; -// -// //coVariab_Variab -// a := $01; -// b := 0; -// if a<<b = $01 then good else bad end; -// b := 1; -// if a<<b = $02 then good else bad end; -// b := 8; -// if a<<b = $00 then good else bad end; -// -// //coExpres_Const -// a := $02; -// if (a+1)<<1 = $06 then good else bad end; -// if (a+1)<<2 = $0C then good else bad end; -// if (a+1)<<3 = $18 then good else bad end; -// if (a+1)<<4 = $30 then good else bad end; -// if (a+1)<<5 = $60 then good else bad end; -// - ////////////////////////////////////////////////////////// - //////////////////// Mult 8 bits->16 /////////////////// - ////////////////////////////////////////////////////////// - //coConst_Const - if 0 * 0 = word(0) then good else bad end; - if 0 * 1 = word(0) then good else bad end; - if 255 * 0 = word(0) then good else bad end; - if 5 * 5 = word(25) then good else bad end; - - //coConst_Variab - a := 0; - if 5 * a = word(0) then good else bad end; - a := 5; - if word(0 * a) = word(0) then good else bad end; - if 5 * a = word(25) then good else bad end; - //coConst_Expres - a := 5; - if 0 * (a+1) = word(0) then good else bad end; - if 5 * (a+1) = word(30) then good else bad end; - //coVariab_Const - a := 5; - if a * 0 = word(0) then good else bad end; - if a * 5 = word(25) then good else bad end; - //coVariab_Variab - a := 5; b := 0; - if a * b = word(0) then good else bad end; - a := 5; b := 100; - if a * b = 500 then good else bad end; - //coVariab_Expres - a := 10; b := 10; - if a * (b+1) = word(110) then good else bad end; + //coVariab_Variab + a := $ff; + b := 0; + if a>>b = $ff then good else bad end; + b := 1; + if a>>b = $7f then good else bad end; + b := 8; + if a>>b = $0 then good else bad end; //coExpres_Const - a := 19; - if (a+1) * 5 = word(100) then good else bad end; - //coExpres_Variab - a := 19; b := 100; - if (a+1) * b = 2000 then good else bad end; - //coExpres_Expres - a := 10; b := 10; - if (a+1) * (b+1) = word(121) then good else bad end; - + a := $80; + if (a+8)>>1 = $44 then good else bad end; + if (a+8)>>2 = $22 then good else bad end; + if (a+8)>>3 = $11 then good else bad end; + if (a+8)>>4 = $08 then good else bad end; + if (a+8)>>5 = $04 then good else bad end; + ////////////////////////////////////////////////////////// - //////////////////// Div 8 bits->8 /////////////////// + ////////////////// Desplaz. Izquierda /////////////////// ////////////////////////////////////////////////////////// - - //coConst_Const - if 0 div 1 = word(0) then good else bad end; - if 5 div 255 = word(0) then good else bad end; - if 25 div 5 = word(5) then good else bad end; - - //coConst_Variab - a := 0; - if 0 div a = 0 then good else bad end; - a := 1; - if 1 div a = 1 then good else bad end; - a := 2; - if 1 div a = 0 then good else bad end; - a := 50; - if 100 div a = 2 then good else bad end; - a := 0; //Entre cero - if 255 div a = 255 then good else bad end; - - //coConst_Expres - a := 5; - if 0 div (a+1) = 0 then good else bad end; - if 6 div (a+1) = 1 then good else bad end; + //coConst_Const + if 1<<0 = 1 then good else bad end; + if 2<<2 = 8 then good else bad end; + //coVariab_Const - a := 25; - if a div 5 = 5 then good else bad end; - if a div 6 = 4 then good else bad end; - //coVariab_Variab - a := 255; b := 50; - if a DIV b = 5 then good else bad end; - a := 99; b := 100; - if a DIV b = 0 then good else bad end; - //coVariab_Expres - a := 100; b := 10; - if a div (b+1) = 9 then good else bad end; + a := $01; + if a<<0 = $01 then good else bad end; + if a<<1 = $02 then good else bad end; + if a<<2 = $04 then good else bad end; + if a<<3 = $08 then good else bad end; + if a<<7 = $80 then good else bad end; + if a<<8 = $00 then good else bad end; + + //coVariab_Variab + a := $01; + b := 0; + if a<<b = $01 then good else bad end; + b := 1; + if a<<b = $02 then good else bad end; + b := 8; + if a<<b = $00 then good else bad end; + //coExpres_Const - a := 19; - if (a+1) div 5 = 4 then good else bad end; - //coExpres_Variab - a := 15; b := 4; - if (a+1) div b = 4 then good else bad end; - //coExpres_Expres - a := 100; b := 5; - if (a+5) div (b+2) = 15 then good else bad end; + a := $02; + if (a+1)<<1 = $06 then good else bad end; + if (a+1)<<2 = $0C then good else bad end; + if (a+1)<<3 = $18 then good else bad end; + if (a+1)<<4 = $30 then good else bad end; + if (a+1)<<5 = $60 then good else bad end; ////////////////////////////////////////////////////////// ///////////////////// FIN DE PRUEBAS /////////////////// diff --git a/testcode16/Simul_2/Test3_Byte2.pas b/testcode16/Simul_2/Test3_Byte2.pas new file mode 100644 index 00000000..7cd99dfa --- /dev/null +++ b/testcode16/Simul_2/Test3_Byte2.pas @@ -0,0 +1,278 @@ +{Rutina de verificación para operaciones con datos de tipo byte. +Se debe simular el programa en el circuito "Test3.DSN". Se debe +escuchar, una serie de pitidos cortos. Si se escucha un pitido +largo, es que hubo algún error en el resultado de alguna operación. +Por: Tito Hinostroza +Modificado: 01/03/2018} +{$PROCESSOR PIC16F877A} +{$FREQUENCY 8Mhz} +{$OUTPUTHEX 'output.hex'} +uses UnitTest, PIC16F877A; +var + a, b: byte; + +begin + SetAsOutput(pinLed); + pinLed := 0; + + ////////////////////////////////////////////////////////// + //////////////////////// Suma ///////////////////////// + ////////////////////////////////////////////////////////// + + //Constante + if 0 + 0 = 0 then good else bad end; + if 0 + 1 = 0 then bad else good end; + if 255 + 0 = 255 then good else bad end; + + //Variables + a := 0; + b := 255; + if a + a = 0 then good else bad end; + if a + b = 255 then good else bad end; + if b + a = 255 then good else bad end; + if a + b = b then good else bad end; + + a := 1; + b := 254; + if a + b = 255 then good else bad end; + + //Variables - constantes + a := 0; + if a + 0 = 0 then good else bad end; + if 0 + a = 0 then good else bad end; + if a + 1 = 1 then good else bad end; + if 1 + a = 1 then good else bad end; + if a + 255 = 255 then good else bad end; + if 255 + a = 255 then good else bad end; + + a := 1; + if a + 0 = 1 then good else bad end; + if 0 + a = 1 then good else bad end; + if a + 1 = 2 then good else bad end; + if 1 + a = 2 then good else bad end; + if a + 254 = 255 then good else bad end; + if 254 + a = 255 then good else bad end; + + //Expresiones + a := 10; b := 5; + if a = b+5 then good else bad end; + if a + b = 15 then good else bad end; + if (a + b) + 1 = 16 then good else bad end; + if b + a = 15 then good else bad end; + if 15 = b + a then good else bad end; + if a + b = a + 5 then good else bad end; + if a + (b+a) = a + (a + 5) then good else bad end; + if a + (b+ (a+b)) = a + (a + a) then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////////// Resta ///////////////////////// + ////////////////////////////////////////////////////////// + + //Constante + if 0 - 0 = 0 then good else bad end; + if 1 - 0 = 0 then bad else good end; + if 255 - 0 = 255 then good else bad end; + + //Variables + a := 255; b := 0; + if a - a = 0 then good else bad end; + if a - a = b then good else bad end; + if b - b = b then good else bad end; + if a - b = 255 then good else bad end; + if a - b = a then good else bad end; + + a := 255; b := 1; + if b - b = 0 then good else bad end; + if a - b = 254 then good else bad end; + + a := 1; b := 0; + if a - b = 1 then good else bad end; + if a - b = a then good else bad end; + + a := 10; b := 5; + if a - b = b then good else bad end; + if a - b = 5 then good else bad end; + + //Variables - constantes + a := 0; + if a - 0 = 0 then good else bad end; + if 0 - a = 0 then good else bad end; + if a - 0 = a then good else bad end; + a := 1; + if a - 1 = 0 then good else bad end; + if 1 - a = 0 then good else bad end; + if 255 - a = 254 then good else bad end; + if 10 - a = 9 then good else bad end; + a := 255; + if a - 1 = 254 then good else bad end; + if 255 - a = 0 then good else bad end; + if a - 10 = 245 then good else bad end; + + //Expresiones + a := 10; b := 5; + if 10 - (b+1) = 4 then good else bad end; //constante - expresión + if a - (b+1) = 4 then good else bad end; //variable - expresión + if (a+1) - 1 = 10 then good else bad end; //expresión - constante + if (a+1) - 0 = 11 then good else bad end; //expresión - constante + if (a+1) - a = 1 then good else bad end; //expresión - variable + if (a+1) - (b+1) = 5 then good else bad end; //expresión - expresión + if a - b = a - b then good else bad end; + if a - b - 1 = 4 then good else bad end; + if a - b - 1 = b - 1 then good else bad end; + if 5 = a - b then good else bad end; + if a - 5 = a - b then good else bad end; + if b + (a-b) = a then good else bad end; + if a = b + (a-b) then good else bad end; + if a + (b+ (a-b)) = a + (a - b + 5) then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////// Mult 8 bits->16 /////////////////// + ////////////////////////////////////////////////////////// + //coConst_Const + if 0 * 0 = 0 then good else bad end; + if 0 * 1 = 0 then good else bad end; + if 255 * 0 = 0 then good else bad end; + if 5 * 5 = 25 then good else bad end; + + //coConst_Variab + a := 0; + if 5 * a = word(0) then good else bad end; + a := 5; + if word(0 * a) = word(0) then good else bad end; + if 5 * a = word(25) then good else bad end; + //coConst_Expres + a := 5; + if 0 * (a+1) = word(0) then good else bad end; + if 5 * (a+1) = word(30) then good else bad end; + //coVariab_Const + a := 5; + if a * 0 = word(0) then good else bad end; + if a * 5 = word(25) then good else bad end; + //coVariab_Variab + a := 5; b := 0; + if a * b = word(0) then good else bad end; + a := 5; b := 100; + if a * b = 500 then good else bad end; + //coVariab_Expres + a := 10; b := 10; + if a * (b+1) = word(110) then good else bad end; + //coExpres_Const + a := 19; + if (a+1) * 5 = word(100) then good else bad end; + //coExpres_Variab + a := 19; b := 100; + if (a+1) * b = 2000 then good else bad end; + //coExpres_Expres + a := 10; b := 10; + if (a+1) * (b+1) = word(121) then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////// 8 Div 8 -> 8 /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 0 div 1 = 0 then good else bad end; + if 5 div 255 = 0 then good else bad end; + if 25 div 5 = 5 then good else bad end; + + //coConst_Variab + a := 0; + if 0 div a = 0 then good else bad end; + a := 1; + if 1 div a = 1 then good else bad end; + a := 2; + if 1 div a = 0 then good else bad end; + a := 50; + if 100 div a = 2 then good else bad end; + a := 0; //Entre cero + if 255 div a = 255 then good else bad end; + + //coConst_Expres + a := 5; + if 0 div (a+1) = 0 then good else bad end; + if 6 div (a+1) = 1 then good else bad end; + //coVariab_Const + a := 25; + if a div 5 = 5 then good else bad end; + if a div 6 = 4 then good else bad end; + //coVariab_Variab + a := 255; b := 50; + if a DIV b = 5 then good else bad end; + a := 99; b := 100; + if a DIV b = 0 then good else bad end; + //coVariab_Expres + a := 100; b := 10; + if a div (b+1) = 9 then good else bad end; + //coExpres_Const + a := 19; + if (a+1) div 5 = 4 then good else bad end; + //coExpres_Variab + a := 15; b := 4; + if (a+1) div b = 4 then good else bad end; + //coExpres_Expres + a := 100; b := 5; + if (a+5) div (b+2) = 15 then good else bad end; + + ////////////////////////////////////////////////////////// + //////////////////// 8 Mod 8 bits-> 8 /////////////////// + ////////////////////////////////////////////////////////// + + //coConst_Const + if 0 mod 1 = 0 then good else bad end; + if 5 mod 255 = 5 then good else bad end; + if 25 mod 5 = 0 then good else bad end; + if 24 mod 5 = 4 then good else bad end; + + //coConst_Variab + a := 0; + if 0 mod a = 0 then good else bad end; + a := 1; + if 1 mod a = 0 then good else bad end; + a := 2; + if 1 mod a = 1 then good else bad end; + a := 50; + if 100 mod a = 0 then good else bad end; + a := 0; //Entre cero + if 255 mod a = 255 then good else bad end; //Realmente no está definido que se así + + //coConst_Expres + a := 5; + if 0 mod (a+1) = 0 then good else bad end; + if 6 mod (a+1) = 0 then good else bad end; + + //coVariab_Const + a := 25; + if a mod 5 = 0 then good else bad end; + if a mod 6 = 1 then good else bad end; + + //coVariab_Variab + a := 255; b := 50; + if a mod b = 5 then good else bad end; + a := 99; b := 100; + if a mod b = 99 then good else bad end; + + //coVariab_Expres + a := 100; b := 10; + if a mod (b+1) = 1 then good else bad end; + + //coExpres_Const + a := 19; + if (a+1) mod 5 = 0 then good else bad end; + + //coExpres_Variab + a := 18; b := 4; + if (a+1) mod b = 3 then good else bad end; + + //coExpres_Expres + a := 100; b := 5; + if (a+4) mod (b+2) = 6 then good else bad end; + + ////////////////////////////////////////////////////////// + ///////////////////// FIN DE PRUEBAS /////////////////// + ////////////////////////////////////////////////////////// + pinLed := 0; + delay_ms(50); + pinLed := 1; + delay_ms(70); + pinLed := 0; +end. diff --git a/TestCode/Simul_3/Word1.pas b/testcode16/Simul_2/Word1.pas similarity index 100% rename from TestCode/Simul_3/Word1.pas rename to testcode16/Simul_2/Word1.pas diff --git a/TestCode/Simul_3/Word2.pas b/testcode16/Simul_2/Word2.pas similarity index 100% rename from TestCode/Simul_3/Word2.pas rename to testcode16/Simul_2/Word2.pas diff --git a/TestCode/Simul_3/dWord1.pas b/testcode16/Simul_2/dWord1.pas similarity index 100% rename from TestCode/Simul_3/dWord1.pas rename to testcode16/Simul_2/dWord1.pas diff --git a/TestCode/Simul_3/types.pas b/testcode16/Simul_2/types.pas similarity index 94% rename from TestCode/Simul_3/types.pas rename to testcode16/Simul_2/types.pas index 7bc7b0bd..57b4740c 100644 --- a/TestCode/Simul_3/types.pas +++ b/testcode16/Simul_2/types.pas @@ -145,7 +145,7 @@ n := ptrByte1^; if m = n then good else bad end; - //Operaciones con dereferencia stVarRefVar + //Operaciones con desreferencia stVarRefVar m := $12; if ptrByte1^ = $12 then good else bad end; if ptrByte1^ + 1 = $13 then good else bad end; @@ -163,7 +163,7 @@ // word(ptrByte1^); // dword(ptrByte1^); - //Operaciones con dereferencia stVarRefExp + //Operaciones con desreferencia stVarRefExp //Se asume para esta prueba que "n", está ubicado después de "m" //De otar forma no funcionará, porque ptrByte1+1, fallaría n := $12; @@ -230,7 +230,7 @@ y := ptrWord1^; if x = y then good else bad end; - //Operaciones con dereferencia stVarRefVar + //Operaciones con desreferencia stVarRefVar x := $12; if ptrWord1^ = word($12) then good else bad end; if ptrWord1^ + word(1) = word($13) then good else bad end; @@ -248,7 +248,7 @@ //// word(ptrWord1^); //// dword(ptrWord1^); // -// //Operaciones con dereferencia stVarRefExp +// //Operaciones con desreferencia stVarRefExp // //Se asume para esta prueba que "y", está ubicado después de "x" // //De otar forma no funcionará, porque ptrWord1+1, fallaría // y := $12; diff --git a/units/PIC12F675A.pas b/units/PIC12F675A.pas deleted file mode 100644 index 938dd431..00000000 --- a/units/PIC12F675A.pas +++ /dev/null @@ -1,122 +0,0 @@ -{$PROCESSOR PIC12F675A} -unit PIC12F675A; - -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_GPIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_GPIF : bit absolute INTCON.0; - PIR1 : byte absolute $000C; - PIR1_EEIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_CMIF : bit absolute PIR1.3; - PIR1_TMR1IF : bit absolute PIR1.0; - T1CON : byte absolute $0010; - T1CON_TMR1GE : bit absolute T1CON.6; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - CMCON : byte absolute $0019; - CMCON_COUT : bit absolute CMCON.6; - CMCON_CINV : bit absolute CMCON.4; - CMCON_CIS : bit absolute CMCON.3; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - ADRESH : byte absolute $001E; - ADCON0 : byte absolute $001F; - ADCON0_ADFM : bit absolute ADCON0.7; - ADCON0_VCFG : bit absolute ADCON0.6; - ADCON0_CHS1 : bit absolute ADCON0.3; - ADCON0_CHS0 : bit absolute ADCON0.2; - ADCON0_GO_DONE : bit absolute ADCON0.1; - ADCON0_ASON : bit absolute ADCON0.0; - - EEDATA : byte absolute $009A; - EEADR : byte absolute $009B; - EECON1 : byte absolute $009C; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $009D; - - ADRESL : byte absolute $009E; - ANSEL : byte absolute $009F; - ANSEL_ADCS2 : bit absolute ANSEL.6; - ANSEL_ADCS1 : bit absolute ANSEL.5; - ANSEL_ADCS0 : bit absolute ANSEL.4; - ANSEL_ANS3 : bit absolute ANSEL.3; - ANSEL_ANS2 : bit absolute ANSEL.2; - ANSEL_ANS1 : bit absolute ANSEL.1; - ANSEL_ANS0 : bit absolute ANSEL.0; - - - ///////////////////////////////////////////////// -// Config Register -///////////////////////////////////////////////// -//#define _CONFIG 0x2007 - -//////////////////////////////////////////////////////////////////////////// -// -// Configuration Bits -// -//////////////////////////////////////////////////////////////////////////// - -{$define _CPD_ON = 0x3EFF} -{$define _CPD_OFF = 0x3FFF} -{$define _CP_ON = 0x3F7F} -{$define _CP_OFF = 0x3FFF} -{$define _BODEN_ON = 0x3FFF} -{$define _BODEN_OFF = 0x3FBF} -{$define _MCLRE_ON = 0x3FFF} -{$define _MCLRE_OFF = 0x3FDF} -{$define _PWRTE_OFF = 0x3FFF} -{$define _PWRTE_ON = 0x3FEF} -{$define _WDT_ON = 0x3FFF} -{$define _WDT_OFF = 0x3FF7} -{$define _LP_OSC = 0x3FF8} -{$define _XT_OSC = 0x3FF9} -{$define _HS_OSC = 0x3FFA} -{$define _EC_OSC = 0x3FFB} -{$define _INTRC_OSC_NOCLKOUT = 0x3FFC} -{$define _INTRC_OSC_CLKOUT = 0x3FFD} -{$define _EXTRC_OSC_NOCLKOUT = 0x3FFE} -{$define _EXTRC_OSC_CLKOUT = 0x3FFF} - - -implementation -end. diff --git a/units/PIC16F72.pas b/units/PIC16F72.pas deleted file mode 100644 index 6b9ba4fe..00000000 --- a/units/PIC16F72.pas +++ /dev/null @@ -1,222 +0,0 @@ -{ -* UNIT para compilador PicPas -* SFR del microcontrolador PIC 16F84A -* -* (C) AguHDz 05-JUL-2017 -* Ultima Actualizacion: 10-JUL-2017 -} - -{$PROCESSOR PIC16F72} - -unit PIC16F72; - -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_AN4 : bit absolute PORTA.5; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_T0CKI : bit absolute PORTA.4; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_AN3 : bit absolute PORTA.3; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_AN2 : bit absolute PORTA.2; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_AN1 : bit absolute PORTA.1; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_AN0 : bit absolute PORTA.0; - PORTA_RA0 : bit absolute PORTA.0; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.7; - PORTB_RB6 : bit absolute PORTB.6; - PORTB_RB5 : bit absolute PORTB.5; - PORTB_RB4 : bit absolute PORTB.4; - PORTB_RB3 : bit absolute PORTB.3; - PORTB_RB2 : bit absolute PORTB.2; - PORTB_RB1 : bit absolute PORTB.1; - PORTB_RB0 : bit absolute PORTB.0; - PORTB_INT : bit absolute PORTB.0; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_SDO : bit absolute PORTC.5; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_SCA : bit absolute PORTC.4; - PORTC_SDI : bit absolute PORTC.4; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_SCL : bit absolute PORTC.3; - PORTC_SCK : bit absolute PORTC.3; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_CCP1 : bit absolute PORTC.2; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_T1OSI : bit absolute PORTC.1; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_T1CKI : bit absolute PORTC.0; - PORTC_T1OSC : bit absolute PORTC.0; - PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RBIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000C; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - TMR1L : byte absolute $000E; - TMR1H : byte absolute $000F; - T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute TMR2.6; - T2CON_TOUTPS2 : bit absolute TMR2.5; - T2CON_TOUTPS1 : bit absolute TMR2.4; - T2CON_TOUTPS0 : bit absolute TMR2.3; - T2CON_TMR2ON : bit absolute TMR2.2; - T2CON_T2CKPS1 : bit absolute TMR2.1; - T2CON_T2CKPS0 : bit absolute TMR2.0; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1 : word absolute $0015; - CCPR1L : byte absolute CCPR1.LOW; // $0015 - CCPR1H : byte absolute CCPR1.HIGH; // $0016 - CCP1CON : byte absolute $0017; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - ADRES : byte absolute $001E; - ADCON0 : byte absolute $001F; - ADCON0_ADCS1 : bit absolute ADCON0.7; - ADCON0_ADCS2 : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.5; - ADCON0_CHS1 : bit absolute ADCON0.4; - ADCON0_CHS0 : bit absolute ADCON0.3; - ADCON0_GO_DONE : bit absolute ADCON0.1; - ADCON0_ADON : bit absolute ADCON0.0; - OPTION : byte absolute $0081; - OPTION_RBPU : bit absolute OPTION.7; - OPTION_INTEDG : bit absolute OPTION.6; - OPTION_T0CS : bit absolute OPTION.5; - OPTION_T0SE : bit absolute OPTION.4; - OPTION_PSA : bit absolute OPTION.3; - OPTION_PS2 : bit absolute OPTION.2; - OPTION_PS1 : bit absolute OPTION.1; - OPTION_PS0 : bit absolute OPTION.0; -//---- Por compatibilidad de nombres con versiones anteriores ----- - OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; -//----------------------------------------------------------------- - TRISA : byte absolute $0085; - TRISB : byte absolute $0086; - TRISC : byte absolute $0087; - PIE1 : byte absolute $008C; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TME2IE : bit absolute PIE1.1; - PIE1_TME1IE : bit absolute PIE1.0; - PCON : byte absolute $008E; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_D_A : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_R_W : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - ADCON1 : byte absolute $009F; - ADCON1_PCFG2 : bit absolute ADCON1.2; - ADCON1_PCFG1 : bit absolute ADCON1.1; - ADCON1_PCFG0 : bit absolute ADCON1.0; - PMDATL : byte absolute $010C; - PMADRL : byte absolute $010D; - PMDATH : byte absolute $010E; - PMADRH : byte absolute $010F; - PMCON1 : byte absolute $018C; - PMCON1_RD : bit absolute PMCON1.0; - - - // CONFIGURATION WORD PIC16F72 -// ======================================= -// BOREN : Brown-out Reset Enable bit. -// Enable BOREN automatically enable PWRTEN, regardless of the -// value of bit PWRTEN. Ensure the PWRTEN is enable any time -// BOREN is enable. -{$DEFINE _BOREN_OFF = $3FBF} // BOR disabled -{$DEFINE _BOREN_ON = $3FFF} // BOR enabled -// CP : FLASH Program Memory Code Protection bit. -{$DEFINE _CP_ON = $3FEF} // All Memory locations code protected -{$DEFINE _CP_ALL = $3FEF} // All Memory locations code protected -{$DEFINE _CP_OFF = $3FFF} // Code protection off -// PWRTEN : Power-up Timer Enable bit. -{$DEFINE _PWRTEN_ON = $3FF7} // PWRT enabled -{$DEFINE _PWRTEN_OFF = $3FFF} // PWRT disabled -// WDTEN : Watchdog Timer Eneble bit. -{$DEFINE _WDT_OFF = $3FFB} // WDT disabled -{$DEFINE _WDT_ON = $3FFF} // WDT enabled -// FOSC1:FOSC2 : Oscilator Seleccion bits. -{$DEFINE _LP_OSC = $3FFC} // LP oscillator -{$DEFINE _XT_OSC = $3FFD} // XT oscillator -{$DEFINE _HS_OSC = $3FFE} // HS oscillator -{$DEFINE _RC_OSC = $3FFF} // RC oscillator -// ======================================= -// The erased (unprogrammed) value of the configuration word is 3FFFFh. -// Configuration Word Address : 2007h. - - - - -implementation -end. diff --git a/units/PIC16F84A.pas b/units/PIC16F84A.pas deleted file mode 100644 index fcd72f20..00000000 --- a/units/PIC16F84A.pas +++ /dev/null @@ -1,109 +0,0 @@ -{ -* UNIT para compilador PicPas -* SFR del microcontrolador PIC 16F84A -* -* (C) AguHDz 05-JUN-2017 -* Ultima Actualizacion: 23-JUN-2017 -} -{$PROCESSOR PIC16F84A} -unit PIC16F84A; -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_T0CKI : bit absolute PORTA.4; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.7; - PORTB_RB6 : bit absolute PORTB.6; - PORTB_RB5 : bit absolute PORTB.5; - PORTB_RB4 : bit absolute PORTB.4; - PORTB_RB3 : bit absolute PORTB.3; - PORTB_RB2 : bit absolute PORTB.2; - PORTB_RB1 : bit absolute PORTB.1; - PORTB_RB0 : bit absolute PORTB.0; - PORTB_INT : bit absolute PORTB.0; - EEDATA : byte absolute $0008; - EEADR : byte absolute $0009; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_EEIE : bit absolute INTCON.6; - INTCON_T0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RBIE : bit absolute INTCON.3; - INTCON_T0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RBIF : bit absolute INTCON.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISB : byte absolute $0086; - EECON1 : byte absolute $0088; - EECON1_EEIF : bit absolute EECON1.4; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $0089; - - //Bits Configuration - {$define _CP_ON = 0x000F} - {$define _CP_OFF = 0x3FFF} - {$define _PWRTE_ON = 0x3FF7} - {$define _PWRTE_OFF = 0x3FFF} - {$define _WDT_ON = 0x3FFF} - {$define _WDT_OFF = 0x3FFB} - {$define _LP_OSC = 0x3FFC} - {$define _XT_OSC = 0x3FFD} - {$define _HS_OSC = 0x3FFE} - {$define _RC_OSC = 0x3FFF} - - -implementation - -procedure EEPROM_Read(addr:byte):byte; -begin - EEADR:=addr; - EECON1_RD:=1; - exit(EEDATA); -end; - -procedure WriteEEPROM(direccion , valor: byte); -begin - EEADR := direccion; - EEDATA := valor; - EECON1_WREN := 1; - EECON2 := $55; - EECON2 := $AA; - EECON1_WR := 1; - EECON1_WREN := 0; - repeat until (EECON1_WR = 0); -end; - -end. diff --git a/units/PIC16F873A.pas b/units/PIC16F873A.pas deleted file mode 100644 index 81a8941c..00000000 --- a/units/PIC16F873A.pas +++ /dev/null @@ -1,313 +0,0 @@ -{ -* UNIT para compilador PicPas -* SFR del microcontrolador PIC 16F877A -* -* (C) AguHDz 04-JUN-2017 -* Ultima Actualizacion: 23-JUN-2017 -} -{$PROCESSOR PIC16F873A} -unit PIC16F873A; - -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.7; - PORTB_RB6 : bit absolute PORTB.6; - PORTB_RB5 : bit absolute PORTB.5; - PORTB_RB4 : bit absolute PORTB.4; - PORTB_RB3 : bit absolute PORTB.3; - PORTB_RB2 : bit absolute PORTB.2; - PORTB_RB1 : bit absolute PORTB.1; - PORTB_RB0 : bit absolute PORTB.0; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RBIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000C; - PIR1_PSPIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_TXIF : bit absolute PIR1.4; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000D; - PIR2_CMIF : bit absolute PIR2.6; - PIR2_EEIF : bit absolute PIR2.4; - PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000E; - TMR1H : byte absolute $000F; - T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute TMR2.6; - T2CON_TOUTPS2 : bit absolute TMR2.5; - T2CON_TOUTPS1 : bit absolute TMR2.4; - T2CON_TOUTPS0 : bit absolute TMR2.3; - T2CON_TMR2ON : bit absolute TMR2.2; - T2CON_T2CKPS1 : bit absolute TMR2.1; - T2CON_T2CKPS0 : bit absolute TMR2.0; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1 : word absolute $0015; - CCPR1L : byte absolute CCPR1.LOW; // $0015 - CCPR1H : byte absolute CCPR1.HIGh; // $0016 - CCP1CON : byte absolute $0017; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - RCSTA : byte absolute $0018; - RCSTA_SPEN : bit absolute RCSTA.7; - RCSTA_RX9 : bit absolute RCSTA.6; - RCSTA_SREN : bit absolute RCSTA.5; - RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_ADDEN : bit absolute RCSTA.3; - RCSTA_FERR : bit absolute RCSTA.2; - RCSTA_OERR : bit absolute RCSTA.1; - RCSTA_RX9D : bit absolute RCSTA.0; - TXREG : byte absolute $0019; - RCREG : byte absolute $001A; - CCPR2 : word absolute $001B; - CCPR2L : byte absolute CCPR2.LOW; // $001B - CCPR2H : byte absolute CCPR2.HIGH; // $001C - CCP2CON : byte absolute $001D; - CCP2CON_CCP2X : bit absolute CCP2CON.5; - CCP2CON_CCP2Y : bit absolute CCP2CON.4; - CCP2CON_CCP2M3 : bit absolute CCP2CON.3; - CCP2CON_CCP2M2 : bit absolute CCP2CON.2; - CCP2CON_CCP2M1 : bit absolute CCP2CON.1; - CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001E; - ADCON0 : byte absolute $001F; - ADCON0_ADCS1 : bit absolute ADCON0.7; - ADCON0_ADCS0 : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.5; - ADCON0_CHS1 : bit absolute ADCON0.4; - ADCON0_CHS0 : bit absolute ADCON0.3; - ADCON0_GO_DONE : bit absolute ADCON0.2; - ADCON0_ASON : bit absolute ADCON0.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISB : byte absolute $0086; - TRISC : byte absolute $0087; - PIE1 : byte absolute $008C; - PIE1_PSPIE : bit absolute PIE1.7; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_RCIE : bit absolute PIE1.5; - PIE1_TXIE : bit absolute PIE1.4; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TMR2IE : bit absolute PIE1.1; - PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008D; - PIE2_CMIE : bit absolute PIE2.6; - PIE2_EEIE : bit absolute PIE2.4; - PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008E; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - SSPCON2 : byte absolute $0091; - SSPCON2_GCEN : bit absolute SSPCON2.7; - SSPCON2_ACKSTAT : bit absolute SSPCON2.6; - SSPCON2_ACKDT : bit absolute SSPCON2.5; - SSPCON2_ACKEN : bit absolute SSPCON2.4; - SSPCON2_RCEN : bit absolute SSPCON2.3; - SSPCON2_PEN : bit absolute SSPCON2.2; - SSPCON2_RSEN : bit absolute SSPCON2.1; - SSPCON2_SEN : bit absolute SSPCON2.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_DA : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_RW : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - TXSTA : byte absolute $0098; - TXSTA_CSRC : bit absolute TXSTA.7; - TXSTA_TX9 : bit absolute TXSTA.6; - TXSTA_TXEN : bit absolute TXSTA.5; - TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.2; - TXSTA_TRMT : bit absolute TXSTA.1; - TXSTA_TX9D : bit absolute TXSTA.0; - SPBRG : byte absolute $0099; - CMCON : byte absolute $009C; - CMCON_C2OUT : bit absolute CMCON.7; - CMCON_C1OUT : bit absolute CMCON.6; - CMCON_C2INV : bit absolute CMCON.5; - CMCON_C1INV : bit absolute CMCON.4; - CMCON_CIS : bit absolute CMCON.3; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009D; - CVRCON_CVREN : bit absolute CVRCON.7; - CVRCON_CVROE : bit absolute CVRCON.6; - CVRCON_CVRR : bit absolute CVRCON.5; - CVRCON_CVR3 : bit absolute CVRCON.3; - CVRCON_CVR2 : bit absolute CVRCON.2; - CVRCON_CVR1 : bit absolute CVRCON.1; - CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009E; - ADCON1 : byte absolute $009F; - ADCON1_ADFM : bit absolute ADCON1.7; - ADCON1_ADCS2 : bit absolute ADCON1.6; - ADCON1_PCFG3 : bit absolute ADCON1.3; - ADCON1_PCFG2 : bit absolute ADCON1.2; - ADCON1_PCFG1 : bit absolute ADCON1.1; - ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010C; - EEADR : byte absolute $010D; - EEDATH : byte absolute $010E; - EEADRH : byte absolute $010F; - EECON1 : byte absolute $018C; - EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $018D; - - // CONFIGURATION WORD PIC16F87XA -// PIC16F873A -// PIC16F874A -// PIC16F876A -// PIC16F877A -// ======================================= -// CP : FLASH Program Memory Code Protection bit. -{$DEFINE _CP_ON = $1FFF} // All program memory code-protected -{$DEFINE _CP_ALL = $1FFF} // All program memory code-protected -{$DEFINE _CP_OFF = $3FFF} // Code protection off -// DEBUG : In-Circuit Debugger Mode bit -// RB6-RB7 are dedicaded to the debugger. -{$DEFINE _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger -{$DEFINE _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins -// WRT1:WRT0 : Flash Program Memory Write Enable bits. -{$DEFINE _WRT_HALF = $39FF} // 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control -// CPD : Data EEPROM Memory Code Protection bit. -{$DEFINE _CPD_ON = $3EFF} // Data EEPROM code-protected -{$DEFINE _CPD_OFF = $3FFF} // Data EEPROM code protection off -// LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit. -{$DEFINE _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming -{$DEFINE _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled -// BOREN : Brown-out Reset Enable bit. -// Enable BOREN automatically enable PWRTEN, regardless of the -// value of bit PWRTEN. Ensure the PWRTEN is enable any time -// BOREN is enable. -{$DEFINE _BOREN_OFF = $3FBF} // BOR disabled -{$DEFINE _BOREN_ON = $3FFF} // BOR enabled -// /PWRTEN : Power-up Timer Enable bit. -{$DEFINE _PWRTEN_ON = $3FF7} // PWRT enabled -{$DEFINE _PWRTEN_OFF = $3FFF} // PWRT disabled -// WDTEN : Watchdog Timer Eneble bit. -{$DEFINE _WDT_OFF = $3FFB} // WDT disabled -{$DEFINE _WDT_ON = $3FFF} // WDT enabled -// FOSC1:FOSC2 : Oscilator Seleccion bits. -{$DEFINE _LP_OSC = $3FFC} // LP oscillator -{$DEFINE _XT_OSC = $3FFD} // XT oscillator -{$DEFINE _HS_OSC = $3FFE} // HS oscillator -{$DEFINE _RC_OSC = $3FFF} // RC oscillator -// ======================================= -// The erased (unprogrammed) value of the configuration word is 3FFFFh. -// Configuration Word Address : 2007h. - - -implementation - - -procedure EEPROM_Read(addr:byte):byte; -begin - EEADR:=addr; - EECON1_EEPGD:=0; - EECON1_RD:=1; - exit(EEDATA); -end; - -procedure EEPROM_Write(addr,data:byte); -begin - EEADR:=addr; - EEDATA:=data; - EECON1_EEPGD:= 0; - EECON1_WREN := 1; - INTCON_GIE := 0; - EECON2:=$55; - EECON2:=$AA; - EECON1_WR:= 1; - INTCON_GIE := 1; - While EECON1_WR =1 do end; - EECON1_WREN:= 0; -end; - -end. diff --git a/units/PIC16F876A.pas b/units/PIC16F876A.pas deleted file mode 100644 index 60065c73..00000000 --- a/units/PIC16F876A.pas +++ /dev/null @@ -1,314 +0,0 @@ -{ -* UNIT para compilador PicPas -* SFR del microcontrolador PIC 16F877A -* -* (C) AguHDz 04-JUN-2017 -* Ultima Actualizacion: 23-JUN-2017 -* Updated: 07/01/2018 by Tito Hinostroza. -} -{$PROCESSOR PIC16F876A} -unit PIC16F876A; - -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.7; - PORTB_RB6 : bit absolute PORTB.6; - PORTB_RB5 : bit absolute PORTB.5; - PORTB_RB4 : bit absolute PORTB.4; - PORTB_RB3 : bit absolute PORTB.3; - PORTB_RB2 : bit absolute PORTB.2; - PORTB_RB1 : bit absolute PORTB.1; - PORTB_RB0 : bit absolute PORTB.0; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RBIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000C; - PIR1_PSPIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_TXIF : bit absolute PIR1.4; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000D; - PIR2_CMIF : bit absolute PIR2.6; - PIR2_EEIF : bit absolute PIR2.4; - PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000E; - TMR1H : byte absolute $000F; - T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute TMR2.6; - T2CON_TOUTPS2 : bit absolute TMR2.5; - T2CON_TOUTPS1 : bit absolute TMR2.4; - T2CON_TOUTPS0 : bit absolute TMR2.3; - T2CON_TMR2ON : bit absolute TMR2.2; - T2CON_T2CKPS1 : bit absolute TMR2.1; - T2CON_T2CKPS0 : bit absolute TMR2.0; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1 : word absolute $0015; - CCPR1L : byte absolute CCPR1.LOW; // $0015 - CCPR1H : byte absolute CCPR1.HIGh; // $0016 - CCP1CON : byte absolute $0017; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - RCSTA : byte absolute $0018; - RCSTA_SPEN : bit absolute RCSTA.7; - RCSTA_RX9 : bit absolute RCSTA.6; - RCSTA_SREN : bit absolute RCSTA.5; - RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_ADDEN : bit absolute RCSTA.3; - RCSTA_FERR : bit absolute RCSTA.2; - RCSTA_OERR : bit absolute RCSTA.1; - RCSTA_RX9D : bit absolute RCSTA.0; - TXREG : byte absolute $0019; - RCREG : byte absolute $001A; - CCPR2 : word absolute $001B; - CCPR2L : byte absolute CCPR2.LOW; // $001B - CCPR2H : byte absolute CCPR2.HIGH; // $001C - CCP2CON : byte absolute $001D; - CCP2CON_CCP2X : bit absolute CCP2CON.5; - CCP2CON_CCP2Y : bit absolute CCP2CON.4; - CCP2CON_CCP2M3 : bit absolute CCP2CON.3; - CCP2CON_CCP2M2 : bit absolute CCP2CON.2; - CCP2CON_CCP2M1 : bit absolute CCP2CON.1; - CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001E; - ADCON0 : byte absolute $001F; - ADCON0_ADCS1 : bit absolute ADCON0.7; - ADCON0_ADCS0 : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.5; - ADCON0_CHS1 : bit absolute ADCON0.4; - ADCON0_CHS0 : bit absolute ADCON0.3; - ADCON0_GO_DONE : bit absolute ADCON0.2; - ADCON0_ASON : bit absolute ADCON0.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISB : byte absolute $0086; - TRISC : byte absolute $0087; - PIE1 : byte absolute $008C; - PIE1_PSPIE : bit absolute PIE1.7; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_RCIE : bit absolute PIE1.5; - PIE1_TXIE : bit absolute PIE1.4; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TMR2IE : bit absolute PIE1.1; - PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008D; - PIE2_CMIE : bit absolute PIE2.6; - PIE2_EEIE : bit absolute PIE2.4; - PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008E; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - SSPCON2 : byte absolute $0091; - SSPCON2_GCEN : bit absolute SSPCON2.7; - SSPCON2_ACKSTAT : bit absolute SSPCON2.6; - SSPCON2_ACKDT : bit absolute SSPCON2.5; - SSPCON2_ACKEN : bit absolute SSPCON2.4; - SSPCON2_RCEN : bit absolute SSPCON2.3; - SSPCON2_PEN : bit absolute SSPCON2.2; - SSPCON2_RSEN : bit absolute SSPCON2.1; - SSPCON2_SEN : bit absolute SSPCON2.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_DA : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_RW : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - TXSTA : byte absolute $0098; - TXSTA_CSRC : bit absolute TXSTA.7; - TXSTA_TX9 : bit absolute TXSTA.6; - TXSTA_TXEN : bit absolute TXSTA.5; - TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.2; - TXSTA_TRMT : bit absolute TXSTA.1; - TXSTA_TX9D : bit absolute TXSTA.0; - SPBRG : byte absolute $0099; - CMCON : byte absolute $009C; - CMCON_C2OUT : bit absolute CMCON.7; - CMCON_C1OUT : bit absolute CMCON.6; - CMCON_C2INV : bit absolute CMCON.5; - CMCON_C1INV : bit absolute CMCON.4; - CMCON_CIS : bit absolute CMCON.3; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009D; - CVRCON_CVREN : bit absolute CVRCON.7; - CVRCON_CVROE : bit absolute CVRCON.6; - CVRCON_CVRR : bit absolute CVRCON.5; - CVRCON_CVR3 : bit absolute CVRCON.3; - CVRCON_CVR2 : bit absolute CVRCON.2; - CVRCON_CVR1 : bit absolute CVRCON.1; - CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009E; - ADCON1 : byte absolute $009F; - ADCON1_ADFM : bit absolute ADCON1.7; - ADCON1_ADCS2 : bit absolute ADCON1.6; - ADCON1_PCFG3 : bit absolute ADCON1.3; - ADCON1_PCFG2 : bit absolute ADCON1.2; - ADCON1_PCFG1 : bit absolute ADCON1.1; - ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010C; - EEADR : byte absolute $010D; - EEDATH : byte absolute $010E; - EEADRH : byte absolute $010F; - EECON1 : byte absolute $018C; - EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $018D; - - // CONFIGURATION WORD PIC16F87XA -// PIC16F873A -// PIC16F874A -// PIC16F876A -// PIC16F877A -// ======================================= -// CP : FLASH Program Memory Code Protection bit. -{$DEFINE _CP_ON = $1FFF} // All program memory code-protected -{$DEFINE _CP_ALL = $1FFF} // All program memory code-protected -{$DEFINE _CP_OFF = $3FFF} // Code protection off -// DEBUG : In-Circuit Debugger Mode bit -// RB6-RB7 are dedicaded to the debugger. -{$DEFINE _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger -{$DEFINE _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins -// WRT1:WRT0 : Flash Program Memory Write Enable bits. -{$DEFINE _WRT_HALF = $39FF} // 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control -// CPD : Data EEPROM Memory Code Protection bit. -{$DEFINE _CPD_ON = $3EFF} // Data EEPROM code-protected -{$DEFINE _CPD_OFF = $3FFF} // Data EEPROM code protection off -// LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit. -{$DEFINE _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming -{$DEFINE _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled -// BOREN : Brown-out Reset Enable bit. -// Enable BOREN automatically enable PWRTEN, regardless of the -// value of bit PWRTEN. Ensure the PWRTEN is enable any time -// BOREN is enable. -{$DEFINE _BOREN_OFF = $3FBF} // BOR disabled -{$DEFINE _BOREN_ON = $3FFF} // BOR enabled -// /PWRTEN : Power-up Timer Enable bit. -{$DEFINE _PWRTEN_ON = $3FF7} // PWRT enabled -{$DEFINE _PWRTEN_OFF = $3FFF} // PWRT disabled -// WDTEN : Watchdog Timer Eneble bit. -{$DEFINE _WDT_OFF = $3FFB} // WDT disabled -{$DEFINE _WDT_ON = $3FFF} // WDT enabled -// FOSC1:FOSC2 : Oscilator Seleccion bits. -{$DEFINE _LP_OSC = $3FFC} // LP oscillator -{$DEFINE _XT_OSC = $3FFD} // XT oscillator -{$DEFINE _HS_OSC = $3FFE} // HS oscillator -{$DEFINE _RC_OSC = $3FFF} // RC oscillator -// ======================================= -// The erased (unprogrammed) value of the configuration word is 3FFFFh. -// Configuration Word Address : 2007h. - - -implementation - - -procedure EEPROM_Read(addr:byte):byte; -begin - EEADR:=addr; - EECON1_EEPGD:=0; - EECON1_RD:=1; - exit(EEDATA); -end; - -procedure EEPROM_Write(addr,data:byte); -begin - EEADR:=addr; - EEDATA:=data; - EECON1_EEPGD:= 0; - EECON1_WREN := 1; - INTCON_GIE := 0; - EECON2:=$55; - EECON2:=$AA; - EECON1_WR:= 1; - INTCON_GIE := 1; - While EECON1_WR =1 do end; - EECON1_WREN:= 0; -end; - -end. diff --git a/units/PIC16F877A.pas b/units/PIC16F877A.pas deleted file mode 100644 index eb3aced9..00000000 --- a/units/PIC16F877A.pas +++ /dev/null @@ -1,332 +0,0 @@ -{ -* UNIT para compilador PicPas -* SFR del microcontrolador PIC 16F877A -* -* (C) AguHDz 04-JUN-2017 -* Ultima Actualizacion: 23-JUN-2017 -} -{$PROCESSOR PIC16F877A} -unit PIC16F877A; - -interface -var -// DEFINICION DE BYTES Y BITS DE ZONA MEMORIA SFR. -// Segun los nombres y direcciones en datasheet de Microchip. - INDF : byte absolute $0000; - TMR0 : byte absolute $0001; - PCL : byte absolute $0002; - STATUS : byte absolute $0003; - STATUS_IRP : bit absolute STATUS.7; - STATUS_RP1 : bit absolute STATUS.6; - STATUS_RP0 : bit absolute STATUS.5; - STATUS_TO : bit absolute STATUS.4; - STATUS_PD : bit absolute STATUS.3; - STATUS_Z : bit absolute STATUS.2; - STATUS_DC : bit absolute STATUS.1; - STATUS_C : bit absolute STATUS.0; - FSR : byte absolute $0004; - PORTA : byte absolute $0005; - PORTA_RA5 : bit absolute PORTA.5; - PORTA_RA4 : bit absolute PORTA.4; - PORTA_RA3 : bit absolute PORTA.3; - PORTA_RA2 : bit absolute PORTA.2; - PORTA_RA1 : bit absolute PORTA.1; - PORTA_RA0 : bit absolute PORTA.0; - PORTB : byte absolute $0006; - PORTB_RB7 : bit absolute PORTB.7; - PORTB_RB6 : bit absolute PORTB.6; - PORTB_RB5 : bit absolute PORTB.5; - PORTB_RB4 : bit absolute PORTB.4; - PORTB_RB3 : bit absolute PORTB.3; - PORTB_RB2 : bit absolute PORTB.2; - PORTB_RB1 : bit absolute PORTB.1; - PORTB_RB0 : bit absolute PORTB.0; - PORTC : byte absolute $0007; - PORTC_RC7 : bit absolute PORTC.7; - PORTC_RC6 : bit absolute PORTC.6; - PORTC_RC5 : bit absolute PORTC.5; - PORTC_RC4 : bit absolute PORTC.4; - PORTC_RC3 : bit absolute PORTC.3; - PORTC_RC2 : bit absolute PORTC.2; - PORTC_RC1 : bit absolute PORTC.1; - PORTC_RC0 : bit absolute PORTC.0; - PORTD : byte absolute $0008; - PORTD_RD7 : bit absolute PORTD.7; - PORTD_RD6 : bit absolute PORTD.6; - PORTD_RD5 : bit absolute PORTD.5; - PORTD_RD4 : bit absolute PORTD.4; - PORTD_RD3 : bit absolute PORTD.3; - PORTD_RD2 : bit absolute PORTD.2; - PORTD_RD1 : bit absolute PORTD.1; - PORTD_RD0 : bit absolute PORTD.0; - PORTE : byte absolute $0009; - PORTE_RE2 : bit absolute PORTE.2; - PORTE_RE1 : bit absolute PORTE.1; - PORTE_RE0 : bit absolute PORTE.0; - PCLATH : byte absolute $000A; - INTCON : byte absolute $000B; - INTCON_GIE : bit absolute INTCON.7; - INTCON_PEIE : bit absolute INTCON.6; - INTCON_TMR0IE : bit absolute INTCON.5; - INTCON_INTE : bit absolute INTCON.4; - INTCON_RBIE : bit absolute INTCON.3; - INTCON_TMR0IF : bit absolute INTCON.2; - INTCON_INTF : bit absolute INTCON.1; - INTCON_RBIF : bit absolute INTCON.0; - PIR1 : byte absolute $000C; - PIR1_PSPIF : bit absolute PIR1.7; - PIR1_ADIF : bit absolute PIR1.6; - PIR1_RCIF : bit absolute PIR1.5; - PIR1_TXIF : bit absolute PIR1.4; - PIR1_SSPIF : bit absolute PIR1.3; - PIR1_CCP1IF : bit absolute PIR1.2; - PIR1_TMR2IF : bit absolute PIR1.1; - PIR1_TMR1IF : bit absolute PIR1.0; - PIR2 : byte absolute $000D; - PIR2_CMIF : bit absolute PIR2.6; - PIR2_EEIF : bit absolute PIR2.4; - PIR2_BCLIF : bit absolute PIR2.3; - PIR2_CCP2IF : bit absolute PIR2.0; - TMR1L : byte absolute $000E; - TMR1H : byte absolute $000F; - T1CON : byte absolute $0010; - T1CON_T1CKPS1 : bit absolute T1CON.5; - T1CON_T1CKPS0 : bit absolute T1CON.4; - T1CON_T1OSCEN : bit absolute T1CON.3; - T1CON_T1SYNC : bit absolute T1CON.2; - T1CON_TMR1CS : bit absolute T1CON.1; - T1CON_TMR1ON : bit absolute T1CON.0; - TMR2 : byte absolute $0011; - T2CON : byte absolute $0012; - T2CON_TOUTPS3 : bit absolute TMR2.6; - T2CON_TOUTPS2 : bit absolute TMR2.5; - T2CON_TOUTPS1 : bit absolute TMR2.4; - T2CON_TOUTPS0 : bit absolute TMR2.3; - T2CON_TMR2ON : bit absolute TMR2.2; - T2CON_T2CKPS1 : bit absolute TMR2.1; - T2CON_T2CKPS0 : bit absolute TMR2.0; - SSPBUF : byte absolute $0013; - SSPCON : byte absolute $0014; - SSPCON_WCOL : bit absolute SSPCON.7; - SSPCON_SSPOV : bit absolute SSPCON.6; - SSPCON_SSPEN : bit absolute SSPCON.5; - SSPCON_CKP : bit absolute SSPCON.4; - SSPCON_SSPM3 : bit absolute SSPCON.3; - SSPCON_SSPM2 : bit absolute SSPCON.2; - SSPCON_SSPM1 : bit absolute SSPCON.1; - SSPCON_SSPM0 : bit absolute SSPCON.0; - CCPR1 : word absolute $0015; - CCPR1L : byte absolute CCPR1.LOW; // $0015 - CCPR1H : byte absolute CCPR1.HIGh; // $0016 - CCP1CON : byte absolute $0017; - CCP1CON_CCP1X : bit absolute CCP1CON.5; - CCP1CON_CCP1Y : bit absolute CCP1CON.4; - CCP1CON_CCP1M3 : bit absolute CCP1CON.3; - CCP1CON_CCP1M2 : bit absolute CCP1CON.2; - CCP1CON_CCP1M1 : bit absolute CCP1CON.1; - CCP1CON_CCP1M0 : bit absolute CCP1CON.0; - RCSTA : byte absolute $0018; - RCSTA_SPEN : bit absolute RCSTA.7; - RCSTA_RX9 : bit absolute RCSTA.6; - RCSTA_SREN : bit absolute RCSTA.5; - RCSTA_CREN : bit absolute RCSTA.4; - RCSTA_ADDEN : bit absolute RCSTA.3; - RCSTA_FERR : bit absolute RCSTA.2; - RCSTA_OERR : bit absolute RCSTA.1; - RCSTA_RX9D : bit absolute RCSTA.0; - TXREG : byte absolute $0019; - RCREG : byte absolute $001A; - CCPR2 : word absolute $001B; - CCPR2L : byte absolute CCPR2.LOW; // $001B - CCPR2H : byte absolute CCPR2.HIGH; // $001C - CCP2CON : byte absolute $001D; - CCP2CON_CCP2X : bit absolute CCP2CON.5; - CCP2CON_CCP2Y : bit absolute CCP2CON.4; - CCP2CON_CCP2M3 : bit absolute CCP2CON.3; - CCP2CON_CCP2M2 : bit absolute CCP2CON.2; - CCP2CON_CCP2M1 : bit absolute CCP2CON.1; - CCP2CON_CCP2M0 : bit absolute CCP2CON.0; - ADRESH : byte absolute $001E; - ADCON0 : byte absolute $001F; - ADCON0_ADCS1 : bit absolute ADCON0.7; - ADCON0_ADCS0 : bit absolute ADCON0.6; - ADCON0_CHS2 : bit absolute ADCON0.5; - ADCON0_CHS1 : bit absolute ADCON0.4; - ADCON0_CHS0 : bit absolute ADCON0.3; - ADCON0_GO_DONE : bit absolute ADCON0.2; - ADCON0_ASON : bit absolute ADCON0.0; - OPTION_REG : byte absolute $0081; - OPTION_REG_RBPU : bit absolute OPTION_REG.7; - OPTION_REG_INTEDG : bit absolute OPTION_REG.6; - OPTION_REG_T0CS : bit absolute OPTION_REG.5; - OPTION_REG_T0SE : bit absolute OPTION_REG.4; - OPTION_REG_PSA : bit absolute OPTION_REG.3; - OPTION_REG_PS2 : bit absolute OPTION_REG.2; - OPTION_REG_PS1 : bit absolute OPTION_REG.1; - OPTION_REG_PS0 : bit absolute OPTION_REG.0; - TRISA : byte absolute $0085; - TRISB : byte absolute $0086; - TRISC : byte absolute $0087; - TRISD : byte absolute $0088; - TRISE : byte absolute $0089; - TRISE_IBF : bit absolute TRISE.7; - TRISE_OBF : bit absolute TRISE.6; - TRISE_IBOV : bit absolute TRISE.5; - TRISE_PSPMODE : bit absolute TRISE.4; - PIE1 : byte absolute $008C; - PIE1_PSPIE : bit absolute PIE1.7; - PIE1_ADIE : bit absolute PIE1.6; - PIE1_RCIE : bit absolute PIE1.5; - PIE1_TXIE : bit absolute PIE1.4; - PIE1_SSPIE : bit absolute PIE1.3; - PIE1_CCP1IE : bit absolute PIE1.2; - PIE1_TMR2IE : bit absolute PIE1.1; - PIE1_TMR1IE : bit absolute PIE1.0; - PIE2 : byte absolute $008D; - PIE2_CMIE : bit absolute PIE2.6; - PIE2_EEIE : bit absolute PIE2.4; - PIE2_BCLIE : bit absolute PIE2.3; - PIE2_CCP2IE : bit absolute PIE2.0; - PCON : byte absolute $008E; - PCON_POR : bit absolute PCON.1; - PCON_BOR : bit absolute PCON.0; - SSPCON2 : byte absolute $0091; - SSPCON2_GCEN : bit absolute SSPCON2.7; - SSPCON2_ACKSTAT : bit absolute SSPCON2.6; - SSPCON2_ACKDT : bit absolute SSPCON2.5; - SSPCON2_ACKEN : bit absolute SSPCON2.4; - SSPCON2_RCEN : bit absolute SSPCON2.3; - SSPCON2_PEN : bit absolute SSPCON2.2; - SSPCON2_RSEN : bit absolute SSPCON2.1; - SSPCON2_SEN : bit absolute SSPCON2.0; - PR2 : byte absolute $0092; - SSPADD : byte absolute $0093; - SSPSTAT : byte absolute $0094; - SSPSTAT_SMP : bit absolute SSPSTAT.7; - SSPSTAT_CKE : bit absolute SSPSTAT.6; - SSPSTAT_DA : bit absolute SSPSTAT.5; - SSPSTAT_P : bit absolute SSPSTAT.4; - SSPSTAT_S : bit absolute SSPSTAT.3; - SSPSTAT_RW : bit absolute SSPSTAT.2; - SSPSTAT_UA : bit absolute SSPSTAT.1; - SSPSTAT_BF : bit absolute SSPSTAT.0; - TXSTA : byte absolute $0098; - TXSTA_CSRC : bit absolute TXSTA.7; - TXSTA_TX9 : bit absolute TXSTA.6; - TXSTA_TXEN : bit absolute TXSTA.5; - TXSTA_SYNC : bit absolute TXSTA.4; - TXSTA_BRGH : bit absolute TXSTA.2; - TXSTA_TRMT : bit absolute TXSTA.1; - TXSTA_TX9D : bit absolute TXSTA.0; - SPBRG : byte absolute $0099; - CMCON : byte absolute $009C; - CMCON_C2OUT : bit absolute CMCON.7; - CMCON_C1OUT : bit absolute CMCON.6; - CMCON_C2INV : bit absolute CMCON.5; - CMCON_C1INV : bit absolute CMCON.4; - CMCON_CIS : bit absolute CMCON.3; - CMCON_CM2 : bit absolute CMCON.2; - CMCON_CM1 : bit absolute CMCON.1; - CMCON_CM0 : bit absolute CMCON.0; - CVRCON : byte absolute $009D; - CVRCON_CVREN : bit absolute CVRCON.7; - CVRCON_CVROE : bit absolute CVRCON.6; - CVRCON_CVRR : bit absolute CVRCON.5; - CVRCON_CVR3 : bit absolute CVRCON.3; - CVRCON_CVR2 : bit absolute CVRCON.2; - CVRCON_CVR1 : bit absolute CVRCON.1; - CVRCON_CVR0 : bit absolute CVRCON.0; - ADRESL : byte absolute $009E; - ADCON1 : byte absolute $009F; - ADCON1_ADFM : bit absolute ADCON1.7; - ADCON1_ADCS2 : bit absolute ADCON1.6; - ADCON1_PCFG3 : bit absolute ADCON1.3; - ADCON1_PCFG2 : bit absolute ADCON1.2; - ADCON1_PCFG1 : bit absolute ADCON1.1; - ADCON1_PCFG0 : bit absolute ADCON1.0; - EEDATA : byte absolute $010C; - EEADR : byte absolute $010D; - EEDATH : byte absolute $010E; - EEADRH : byte absolute $010F; - EECON1 : byte absolute $018C; - EECON1_EEPGD : bit absolute EECON1.7; - EECON1_WRERR : bit absolute EECON1.3; - EECON1_WREN : bit absolute EECON1.2; - EECON1_WR : bit absolute EECON1.1; - EECON1_RD : bit absolute EECON1.0; - EECON2 : byte absolute $018D; - -// CONFIGURATION WORD PIC16F87XA -// PIC16F873A -// PIC16F874A -// PIC16F876A -// PIC16F877A -// ======================================= -// CP : FLASH Program Memory Code Protection bit. -{$DEFINE _CP_ON = $1FFF} // All program memory code-protected -{$DEFINE _CP_ALL = $1FFF} // All program memory code-protected -{$DEFINE _CP_OFF = $3FFF} // Code protection off -// DEBUG : In-Circuit Debugger Mode bit -// RB6-RB7 are dedicaded to the debugger. -{$DEFINE _DEBUG_ON = $37FF} // In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger -{$DEFINE _DEBUG_OFF = $3FFF} // In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins -// WRT1:WRT0 : Flash Program Memory Write Enable bits. -{$DEFINE _WRT_HALF = $39FF} // 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_1FOURTH = $3BFF} // 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_256 = $3DFF} // 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control -{$DEFINE _WRT_OFF = $3FFF} // Write protection off; all program memory may be written to by EECON control -// CPD : Data EEPROM Memory Code Protection bit. -{$DEFINE _CPD_ON = $3EFF} // Data EEPROM code-protected -{$DEFINE _CPD_OFF = $3FFF} // Data EEPROM code protection off -// LVP : Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit. -{$DEFINE _LVP_OFF = $3F7F} // RB3 is digital I/O, HV on MCLR must be used for programming -{$DEFINE _LVP_ON = $3FFF} // RB3/PGM pin has PGM function; low-voltage programming enabled -// BOREN : Brown-out Reset Enable bit. -// Enable BOREN automatically enable PWRTEN, regardless of the -// value of bit PWRTEN. Ensure the PWRTEN is enable any time -// BOREN is enable. -{$DEFINE _BOREN_OFF = $3FBF} // BOR disabled -{$DEFINE _BOREN_ON = $3FFF} // BOR enabled -// /PWRTEN : Power-up Timer Enable bit. -{$DEFINE _PWRTEN_ON = $3FF7} // PWRT enabled -{$DEFINE _PWRTEN_OFF = $3FFF} // PWRT disabled -// WDTEN : Watchdog Timer Eneble bit. -{$DEFINE _WDT_OFF = $3FFB} // WDT disabled -{$DEFINE _WDT_ON = $3FFF} // WDT enabled -// FOSC1:FOSC2 : Oscilator Seleccion bits. -{$DEFINE _LP_OSC = $3FFC} // LP oscillator -{$DEFINE _XT_OSC = $3FFD} // XT oscillator -{$DEFINE _HS_OSC = $3FFE} // HS oscillator -{$DEFINE _RC_OSC = $3FFF} // RC oscillator -// ======================================= -// The erased (unprogrammed) value of the configuration word is 3FFFFh. -// Configuration Word Address : 2007h. - - -implementation - - -procedure EEPROM_Read(addr:byte):byte; -begin - EEADR:=addr; - EECON1_EEPGD:=0; - EECON1_RD:=1; - exit(EEDATA); -end; - -procedure EEPROM_Write(addr,data:byte); -begin - EEADR:=addr; - EEDATA:=data; - EECON1_EEPGD:= 0; - EECON1_WREN := 1; - INTCON_GIE := 0; - EECON2:=$55; - EECON2:=$AA; - EECON1_WR:= 1; - INTCON_GIE := 1; - While EECON1_WR =1 do end; - EECON1_WREN:= 0; -end; - -end. diff --git a/version.txt b/version.txt index 7ef06f65..28976d14 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -VER_PROG = '0.8.4'; \ No newline at end of file +VER_PROG = '0.9.0'; \ No newline at end of file